PDA

نسخه کامل مشاهده نسخه کامل : جلوگیری از ثبت اطلاعات تکراری در دیتابیس



ghayour
08-08-2012, 16:45
سلام
من يک پروژه دفترچه تلفن با vb.net ساختم. مي خواهم اطلاعات تکراري در ديتابيس ذخيره نشه و يک پيام بده که قبلا اين ثبت شده. منظورم براساس سه تا تکس باکسه، ببينه که تکراري هست يانه! مثلا اگر کسي را در تکس باکس نوشتيم تا ذخيره کند و نام و نام خانوادگي و سمت همون فرد قبلا ثبت شده باشد، يعني در يک سطر از ديتابيس، نام و نام خانوادگي و سمت فرد مورد نظر ما باهم(در يک سطر) از قبل وجود داشت ديگر ثبت نشود. اميدوارم منظورم را فهميده باشيد.
من کدي در اين رابطه نوشتم اما در ديتابيس در يک سطر جستجو نميکند بلکه در هر جايي که وجود داشته باشد مي گردد.
لطفا کمکم کنيد!!
اين هم کدي که در دکمه ذخيره نوشتم:

Dim con As New System.Data.OleDb.OleDbConnection
Dim com As New System.Data.OleDb.OleDbCommand
con.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Phone.accdb")
Dim table As String
Dim table1 As String
Dim table2 As String
Dim d As String
Dim d1 As String
Dim d2 As String
Dim ds As New DataSet
table = "select * from tblPhone where نام=" + "'" + txtFirstName.Text + "'"
table1 = "select * from tblPhone where خانوادگي=" + "'" + txtLastName.Text + "'"
table2 = "select * from tblPhone where سمت=" + "'" + cboTitle.Text + "'"
Dim da As OleDbDataAdapter = New OleDbDataAdapter(table, con)
Dim da1 As OleDbDataAdapter = New OleDbDataAdapter(table1, con)
Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(table2, con)
d = da.Fill(ds, "tblPhone")
d1 = da1.Fill(ds, "tblPhone")
d2 = da2.Fill(ds, "tblPhone")
If (d = True And d1 = True And d2 = True) Then
MessageBox.Show("فرد مورد نظر شما قبلا ثبت شده است", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
com.Connection = con
com.CommandText = "INSERT INTO tblPhone (نام, خانوادگي, سمت, موبايل1, موبايل2, تلفن1, تلفن2, آدرس) VALUES(@نام, @خانوادگي, @سمت, @موبايل1, @موبايل2, @تلفن1, @تلفن2, @آدرس)"
com.Parameters.Clear()
com.Parameters.AddWithValue("@نام", txtFirstName.Text)
com.Parameters.AddWithValue("@خانوادگي", txtLastName.Text)
com.Parameters.AddWithValue("@سمت", cboTitle.Text)
com.Parameters.AddWithValue("@موبايل1", txtMobile1.Text)
com.Parameters.AddWithValue("@موبايل2", txtMobile2.Text)
com.Parameters.AddWithValue("@تلفن1", txtPhone1.Text)
com.Parameters.AddWithValue("@تلفن2", txtPhone2.Text)
com.Parameters.AddWithValue("@آدرس", txtAdress.Text)
con.Open()
com.ExecuteNonQuery()
con.Close()
com.Dispose()
con.Dispose()
End If

senaps
08-08-2012, 20:29
فیلد یا فیلد های کلیدی نمیتونن تکرار بشن!!

مسئله اینه که اگر مثلا اسم ها تکرار نشن، ما کلی اسم و فامیل تکراری داریم!!! تازه ممکنه یه نفر چند شماره داشته باشه یا ....!!!

ghayour
14-08-2012, 11:50
فیلد یا فیلد های کلیدی نمیتونن تکرار بشن!!
من اینکاری رو که گفتید رو انجام دادم اما یک مشکلی هست و اون هم اینه که اگه اطلاعات ما تکراری بشه، دستور com.ExecuteNonQuery() کار نمی کنه و از برنامه خارج میشه و من نتونستم دستوری بنویسم که اگر تکراری بود پیغام بده که تکراری هست و برنامه بسته نشه!!
لطفا کمکم کنید.




مسئله اینه که اگر مثلا اسم ها تکرار نشن، ما کلی اسم و فامیل تکراری داریم!!! تازه ممکنه یه نفر چند شماره داشته باشه یا ....!!!
در این مورد هم که گفتید، چون براساس سه تا تکست باکس دنبال میگرده(نام، نام خانوادگی، سمت) دیگه خیلی کم امکان داره پیدا بشه و همچنین برای هر نفر هم دوتا شماره موبایل و هم دوتا شماره تلفن در نظر گرفتم و این تعداد شماره کافیه. با این حال اگر فرد تکراری یا شماره ی بیشتری خواستیم یادداشت کنیم فقط کافیه که یک کاراکتر مثل (1) به آن اضافه کنیم و دیگر مشکلی پیش نمیاد.


ببخشید که یکم دیر جواب میدم چون کمی با اینترنتم مشکل دارم.

amenehgh
14-08-2012, 12:49
سلام،من یه برنامه سی شارپ با استفاده از پایگاه داده نوشتم و روی هاست آپلود کردم،چطوری میتونم اطلاعات پایگاه داده رو از روی هاست توی یه برنامه سی شارپ دیگه تو کامپیوتر خودم بخونم؟ممنون میشم سریعتر جواب بدید.خیلی خیلی وقتم کمه.به دادم برسید

senaps
14-08-2012, 13:21
لطفا کمکم کنید.


شما ارور مربوطه رو هندل کردین؟!
وقتی کدی مینویسید که حتی ۱ صدم درصد احتمال میدین که ممکنه یه زمانی تحت شرایط خاصی این کد ارور بده، باید بریزیدش توی Try,catch و هندل کنین ارور مربوطه رو... چون خود سیستم، وقتی ارور میده، کار رومتوقف میکنه!!!
میتونین یه مسیج باکس بذارین تو بخش Catch که بگه اقاجون دیتات تکراری میباشه!!


در این مورد هم که گفتید، چون براساس سه تا تکست باکس دنبال میگرده(نام، نام خانوادگی، سمت) دیگه خیلی کم امکان داره پیدا بشه و همچنین برای هر نفر هم دوتا شماره موبایل و هم دوتا شماره تلفن در نظر گرفتم و این تعداد شماره کافیه. با این حال اگر فرد تکراری یا شماره ی بیشتری خواستیم یادداشت کنیم فقط کافیه که یک کاراکتر مثل (1) به آن اضافه کنیم و دیگر مشکلی پیش نمیاد.

روشتون تا حدودی درسته!!!!
مخصوصا این اضافه کردن شماره تلفن.... ببنید، طراحی جدول بانکتون ضعیف میباشه!!(ببخشید که این رو روک گفتم!).....
معمولا سعی بشه ادرس ها و تماس ها هر کدوم یه جدول داشته باشه عالی میباشه!! مصلا، جدول مربوط به شماره تلفن های همراه!! که توش Id و شماره تلفن ذخیره میشه.... حالا Id میتونه بینهایت شماره تلفن یا ایمیل، ادرس و ... داشته باشه!! و شما میتونی خیلی راحت اینا رو نشون بدی! بدون اضافه کردن عدد به نام یاتقلب های دیگه!!( فوقش مجبور باشید توی لیست باکس نمایشش بدین شماره های یه نفر رو... اینجوری سیستم بهینه تره و جست و جوی راحت تری بهتون میده!)...



سلام،من یه برنامه سی شارپ با استفاده از پایگاه داده نوشتم و روی هاست آپلود کردم،چطوری میتونم اطلاعات پایگاه داده رو از روی هاست توی یه برنامه سی شارپ دیگه تو کامپیوتر خودم بخونم؟ممنون میشم سریعتر جواب بدید.خیلی خیلی وقتم کمه.به دادم برسید



دوست عزیز، ایده‌ی جالبی دارین ولی فقط شنیدین که اینجوری کارتون راه می‌افته!! در واقع، شما باید یه وب سرویس برای دیتابیس مربوطه بنویسید!!!! میتونید وب سرویس ها رو گوگل کنین تا اطلاعات کامل تری بدست بیارید... راه حل بهینه و عالی میباشه...(و البته تنها راه حل برای کاری که شما احتمالا میخوای بکنی!)