PDA

View Full Version : جلوگيري از ورود تكراري ركورد در بانك اطلاعاتي sql



saeednadery
شنبه 06 مهر 1387, 09:21 صبح
با سلام
من مي خواستم كه زمان وروديك ركورد جديد ، اگر آن ركورد تكراري بود با پيغام " كد اموال تكراري مي باشد " از تكرار آن جلوگيري كند . لطفا راهنمائي فرمائيد
با تشكر

saeednadery
شنبه 06 مهر 1387, 10:13 صبح
با تشكر از همه دوستان
كد مربوطه را پيدا كردم به صورت زير اگر نظري داريد لطف بفرمائيد
dt = ds.Tables("device")
dt.DefaultView.RowFilter = "amvalno like '" & TextBox1.Text & "'"
If dt.Rows.Count <> 0 Then
MsgBox("كد اموال فوق تكراري مي باشد ")
Else
strSql1 = "Insert Into device(" & "amvalno, " & _
"serialno, " & "edarno," & "vahedno," & "omurno," & "monttype," & "edrhno," & "ram," & "hdd," & "cpu," & "oprtdate," & "deviceno, " & _
"userName , " & "prsnlno," & "mark," & "model," & "mhz," & "location," & "typeno," & "state) VALUES ('" & st & "', '" & _
av & "','" & 0 & "' ,'" & 0 & "','" & 0 & "' ,' ' ,'" & 0 & "','" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & _
TextBox3.Text & "', '" & TextBox4.Text & "','" & un & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox8.Text & "','" & ComboBox1.SelectedIndex + 1 & "','" & z & "' )"
cmdClasf = New SqlCommand(strSql1, con)
cmdClasf.ExecuteNonQuery()
MsgBox("Insert Completed .")
ds.Clear()
da.Fill(ds, "device")
da.Update(ds, "device")

arsalansalar
شنبه 06 مهر 1387, 10:39 صبح
کدو تو تگ بزاری خیلی بهتره:چشمک:

dt = ds.Tables("device")
dt.DefaultView.RowFilter = "amvalno like '" & TextBox1.Text & "'"
If dt.Rows.Count <> 0 Then
MsgBox("كد اموال فوق تكراري مي باشد ")
Else
strSql1 = "Insert Into device(" & "amvalno, " & _
"serialno, " & "edarno," & "vahedno," & "omurno," & "monttype," & "edrhno," & "ram," & "hdd," & "cpu," & "oprtdate," & "deviceno, " & _
"userName , " & "prsnlno," & "mark," & "model," & "mhz," & "location," & "typeno," & "state) VALUES ('" & st & "', '" & _
av & "','" & 0 & "' ,'" & 0 & "','" & 0 & "' ,' ' ,'" & 0 & "','" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & 0 & "' ,'" & _
TextBox3.Text & "', '" & TextBox4.Text & "','" & un & "','" & TextBox6.Text & "','" & TextBox7.Text & "','" & TextBox8.Text & "','" & ComboBox1.SelectedIndex + 1 & "','" & z & "' )"
cmdClasf = New SqlCommand(strSql1, con)
cmdClasf.ExecuteNonQuery()
MsgBox("Insert Completed .")
ds.Clear()
da.Fill(ds, "device")
da.Update(ds, "device")

مهدی فرزاد
شنبه 06 مهر 1387, 12:46 عصر
با سلام
دوست عزیز شما میتونی فیلدی رو که کد اموال در آن قرار میگره ، به عنوان فیلد کلیدی در جدول Sql معرفی کنی و با این کار دیگه کد تکراری رو قبول نمیکنه

reza6384
شنبه 06 مهر 1387, 16:53 عصر
دوست عزیز شما میتونی فیلدی رو که کد اموال در آن قرار میگره ، به عنوان فیلد کلیدی در جدول Sql معرفی کنی و با این کار دیگه کد تکراری رو قبول نمیکنه

در تکمیل صحبت دوستمون.
بله ، اینجوری دیگه احتیاجی به چک کردن نداری. ولی باید از Try و Catch استفاده کنی ، چون SqlError به وجود میاد در صورتی که رکوردت تکراری باشه.

مهدی فرزاد
شنبه 06 مهر 1387, 22:55 عصر
بله با تشكر از reza6384 كه مطلبي رو كه فراموش كردم بنويسم رو گوش زد كرد

Rambod
شنبه 06 مهر 1387, 23:07 عصر
اگر هم نميخواي اون فيلد رو كليد در نظر بگيري، روي اون فيلد يك Unique Index بساز.

ALI TT
یک شنبه 07 مهر 1387, 01:33 صبح
کاری نداره ، همون فیلدی رو که می خوای ثبت بشه رو از توی همون بانک SELECT کن ( هر قسمتی رو که می خوای ؛ مثلا شماره تکراری نباشه ، نام تکراری نباشه و ... ) ، بعد یه ستور if بزار که اگه Dataset خالی بود ثبت کنه و اگه پر بود ثبت نکنه و ارور مناسبی به کاربر نشون بده .
منظور از پر اینه که ، یه چیزی شبیه اون پیدا کرده .

اینم یه نمونه از دستور if :

.
.
.

If DataSet1.Tables(0).Rows.Count <> 0 Then

'انجام عمل ثبت

Else

MessageBox.Show("ثبت تکراری")

End If

mostafaaa
یک شنبه 07 مهر 1387, 09:19 صبح
یه راهش هم اینه که اون فیلدی که میخوای تکراری نباشه رو به قول دوستمون Unique Index کنی و کدت روی توی Try بندازی . به این شکل

Try
Me.Table1TableAdapter.Insert(Me.TextBox1.Text, Me.TextBox2.Text)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

mansour93
پنج شنبه 25 تیر 1394, 00:17 صبح
سلام و خسته نباشید...

من تازه سی شارپ رو یاد گرفتم و یک دفترچه تلفن با سی شارپ و بانک SQL نوشتم و فیلدهای نام و نام خانوادگی را در بانک به صورت ترکیبی به عنوان کلید اصلی درنظر گرفتم، طبیعیه که وقتی

یک نام و نام خانوادگی تکراری را در سی شارپ از توی فرم وارد میکنم تا وارد dataset بشه پیغام تکراری بودن از سمت sql میاد و برنامه بسته میشه. حالا سوال من اینه که وقتی اطلاعات تکراری وارد میکنم

چکار کنم که پیغام بده : "اطلاعات تکراری است" و دیگه پیغام sql نیاد و برنامه هم بسته نشه.؟در ضمن من با تکنولوژی ADO.NET و به صورت آفلاین (Dataset و TableAdapter ) پروژه دفترتلفن رو ساختم.

با تشکر بسیار.

xsbehx
پنج شنبه 25 تیر 1394, 12:59 عصر
دوست عزیز دو خط بالاتر جناب ALI TT (http://barnamenevis.org/member.php?63303-ALI-TT)جواب رو گفته که !

mansour93
پنج شنبه 25 تیر 1394, 13:46 عصر
نه!دوست عزیز جواب ایشون کامل نیست و برای کار من جواب نمیده.چون اول اینکه هنگام فرم لود دیتاست و دیتاتیبل پر میشه و اطلاعات توی گرید نمایش داده میشه و دوم اینکه من فیلد های

نام و نام خانوادگی رو کلید اصلی گرفتم .

mansour93
پنج شنبه 25 تیر 1394, 13:47 عصر
دوست عزیز دو خط بالاتر جناب ALI TT (http://barnamenevis.org/member.php?63303-ALI-TT)جواب رو گفته که !

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

نام و نام خانوادگی رو کلید اصلی گرفتم .

xsbehx
پنج شنبه 25 تیر 1394, 15:46 عصر
من خودم همیشه این کارو می کنم
یک پروسیجر برای Insert می نویسم و بعد قبلش چک می کنم که مقدار وارد شده تو جدول مورد نظر موجود هست یا نه
اگر نباشه مقدار جدید ثبت می شه و اگر باشه پیغام "تکراری می باشد" بر می گردونه
به این صورت


create procedure spTest
@fldName nvarchar(50),
@fldFamily nvarchar(50)
as
begin
if (
(select count(*) from tblTest
where fldName = @fldName
and fldFamily = @fdFamily)
=0)
Insert into tblTest(fldName, fldFamily) values (@fldName, @fldFamily)
else
select 'تکراری می باشد'
end