PDA

View Full Version : ورود داده غیر تکراری در جدول



mehdiDER_5
جمعه 07 اردیبهشت 1386, 19:23 عصر
با سلام

من یک فرمی دارم که دارای textbox های مختلفی است که اطلاعات از طریق این textbox ها با کلیدی به داخل بانک منتقل میشود ضمناً دارای یک datagridview که اطلاعات insert شده را در داخل گرید ویو مشاهده میکنم دو تااز این ستون های بانک جدولم یا همان تکس باکس ها دارای کلید اصلی است که آن دو عبارت اند از شماره پرونده و سال حال میخواهم اگر کاربر شماره پرونده را 2 وارد کرد در سال 1386 اگر اشتباها ً خواست دوباره داده را تکراری وارد کند برنامه به او هشدار دهد ضمناً من نمیخوام از sp استفاده کنم من insert زا داخل خود برنامه مینویسم ضمناً سرچ کردم یک سری چیزها در مورد index گفته بودند و همچنین select قبل از دستور insert یا استفاده از sp اما من نتوانستم استفاده کنم چون کدهای کاملی نبود
کد من این است
dim cmdinsert as new sqlcommand
dim sqlconnection1 as new sqlconnection
cmdinsert.commandtext=""insert into table (sh_p,sal values()"'textbox1.text. "textbox2.text
)
sqlconnection1.open ()
cmdinsert.executenonquery
sqlconnection.close()(
حال آیا من باید یک دستور select مثل همین دستوری که برای insert نوشتم با شرط sh_p,sal بنویسمکه جواب نمیدهد لطفاً راهنمائی کنید

با تشکر

titbasoft
جمعه 07 اردیبهشت 1386, 21:34 عصر
راه اول: برای فیلد های سال و شماره پرونده Unique constraint در SQL Server تعریف کنید
راه دوم: قبل از اضافه کردن هر رکورد چک کنید که اون رکورد وجود داره یا نه، مثلا:


IF Exists (Select top 1 * from myTable where f1='xxx' and f2='yyy') Select 1 Else Select 0

sh
جمعه 07 اردیبهشت 1386, 23:59 عصر
که البته راه دوم در جدولهایی با رکورد زیاد زمانبر هست

mehdiDER_5
شنبه 08 اردیبهشت 1386, 20:29 عصر
با سلام و تشکر

فکر میکنم سوالم را درست مطرح نکردم من گفتم دو تا از فیلدهای من سال و شماره پرونده کلید اصلی دارند من میخواهم اگر کاربر قبلاً برای شماره پرونده 2 و برای سال 1386 را وارد کرده اگر خواست دوباره آنها را وارد کند قبل از کلید بر روی کلید ثبت در برنامه با یک msgbox به او پیغام دهد که این داده تکراری است من راه حل اول شما را استفاده کردم و در مرحله اول که این دو تا کلید اصلی من ایندکس نداشت برنامه در هنگام ورورد اطلاعات تکراری هنگ میکرد ولی بعد از استفاده از راه حل اول شما یک اروری که نمیدانم مال اسکول است یا ویبی ظاهر می شود و من میخواهم این اررور را کنترل کنم اما نمیدانم میدانم که الان میگویید باید این ارور را در داخل sp بنویسی یا تریگر برایش بنویسی اما من کدهای sql را در داخل برنامه ام مینویسمو با sp و تریگر چندان کار نکرده ام حال باید چکار کنم اگر باید ار sp استفاده کنم لطفاً یک کد برای راهنمائی من اینجا قرار دهید ضمناً اشکال برنامه را اینجا میگذارم

با آرزوی موفقیت

mehdiDER_5
یک شنبه 09 اردیبهشت 1386, 15:21 عصر
بابا یک جواب بده .............................................
خیلی ضروری است

Alireza_Salehi
یک شنبه 09 اردیبهشت 1386, 19:23 عصر
دستوری که در پست 2 گفته شد رو با متد ExecuteScalar شی Command اجرا کنید مقدار صفر یا یک بر میگردونه ، یک شرط بذارید و تصمیم بگیرید!


Dim con As New SqlConnection("ConnectionString")
Dim cmd As New SqlCommand("IF Exists (Select top 1 * from myTable where f1='xxx' and f2='yyy') Select 1 Else Select 0", con)
con.Open()
Dim result As Integer = cmd.ExecuteScalar()
Select Case cmd.ExecuteScalar()
Case 0
'not exist
Case 1
'exist
Case Else
'other
End Select
con.Close()

mehdiDER_5
دوشنبه 10 اردیبهشت 1386, 19:57 عصر
با تشکر ازدوستان

من از index برای دو تا ا زفیلدها استفاده کردم ولی پیغام ارور در هنگام ورورد داده تکراری خطائی به وجود میآید که نمیدانم مال بانک است یا ویبی من میخواهم این خطا را کنترل کنم چگونه میتوانم هنگامی که این اررور پیش می آید این پیغام بیاید که این رکورد تکراری است یعنی به نحوی کنترل خطا .من عکس ا ز ارور برنامه را اینجا گذاشتم

مممنون