تشخیص تکراری بودن یک ردیف در بانک
سلام دوستان خوبم
من کد زیر رو در برنامم قرار دادم برای اینکه تشخیص بده که اگر ردیفی از دیتا گریدم تکراری بود جایگزین همون ردیف قبلی در بانک بشه ولی پیغام خطایی داد که نمی دونم از چی هست :ناراحت: :ناراحت:
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
Else : a = 0
End If
cmd.CommandText = " select * from shakhes where sal81=@a"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal81 =" & a & " WHERE idsetande = " & DataGridView2.Rows(j).Cells(4).Value
End If
If DataGridView2.Rows(j).Cells(5).Value <> 0 Then
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
Else : b = 0
End If
cmd.CommandText = " select * from shakhes where sal82=@b"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal82 =" & a & " WHERE idsetande = " & DataGridView2.Rows(j).Cells(5).Value
End If
پیغام خطا به صورت زیر هست :ناراحت:
http://img.majidonline.com/pic/160544/khata.JPG
سوال دیگه ام این هست که اصلا این کدی که نوشتم آیا برای تشخیص یک ردیف در بانکم درست هست و اگر نیست به چه صورتی باید کد رو تغییر بدم؟؟؟
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
شما میخوای اگه ردیف یکی بود مقادیر با مقادیر بانک جمع شه؟بیشتر توضیح بده
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
دوست خوبم شما قبلا هم مشکلی شبیه به این داشتید مشکل شما اینه که قبل از اینکه پارامترهاتون رو تعریف کنید و بهشون مقدار بدید اون هارو insert میکنید کدتون رو به این شکل تغییر بدید :
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
sqlcomm.Parameters.Add("@sal81", SqlDbType.Int)
sqlcomm.Parameters("@sal81").Value = a
Else : a = 0
End If
cmd.CommandText = " select * from shakhes where sal81=@sal81"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal81 =@sal81 WHERE idsetande = " & DataGridView2.Rows(j).Cells(4).Value
End If
If DataGridView2.Rows(j).Cells(5).Value <> 0 Then
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
sqlcomm.Parameters.Add("@sal82", SqlDbType.Int)
sqlcomm.Parameters("@sal81").Value = b
Else : b = 0
End If
cmd.CommandText = " select * from shakhes where sal82=@sal82"
Dim dr = cmd.ExecuteReader()
If dr.hasrows = True Then
cmd.CommandText = "UPDATE shakhes SET sal82 =@sal82 WHERE idsetande = " & DataGridView2.Rows(j).Cells(5).Value
End If
البته من متوجه نشدم شما چرا از دستور Update استفاده کردید اگه میخواید سطر قبلی که تکراریه پاک شه و سطر جدید جایگزینش شه اول delete و بعد insert کنید
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نقل قول:
نوشته شده توسط
saman_itc
شما میخوای اگه ردیف یکی بود مقادیر با مقادیر بانک جمع شه؟بیشتر توضیح بده
نه دوست عزيز
من مي خوام اگر اطلاعات رديف يكي بود جايگزين همون رديفي بشه كه اطلاعاتش با اطلاعات وارد شده جديد بشه.
يعني اگر يك رديف در ديتا گريد از اعداد 2 و 5 و 8 دارم و وارد بانك مي كنم و در بانك هم رديفي مانند 2 و 5 و 7 دارم جايگزين اون رديف اول بشه و اطلاعات رو update كنه ولي به اين صورتيكه من نوشتم فيلد به فيلد اين كار رو انجام مي ده :ناراحت:
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
دوست عزيز sqlcommand اصلا پارامتري به نام Parameters نداره
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
ببخشید به جای sqlcomm بگذارید cmd
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
آیا این طرز نوشتن در برنامه درست هست دوستان؟
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
m = (DataGridView1.CurrentRow.Cells(1).Value * 100) + DataGridView2.Rows(j).Cells(1).Value
cmd.CommandText = " INSERT INTO shakhes2 VALUES(" & m & "," & a & ") where idshakhes<>" & m
cmd.CommandText = "UPDATE shakhes2 SET idshakhes =" & m & "WHERE idshakhes = " & m
cmd.CommandText = "UPDATE shakhes2 SET sal81 =" & a & " where idshakhes=" & m
cmd.ExecuteNonQuery()
آیا می شه چند تا command text و یک cmdexecutenonQuery داشته باشیم؟
چون من این کد رو که نوشتم هیچ پیغام خطایی نمی ده ولی در بانک هم insert نمی کنه:ناراحت:
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نه درست نیست وقتی شما کد فوق رو اجرا میکنید تنها commandtext آخری اجرا میشه همه دستورات رو تو یه commandtext بنویسید
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
ممنونم از لطفت دوست عزیز ولی آخه چه جوری همه رو تو یک CommandText بنویسم باید بینشون "و " بزارم یا علامت خاصی نیاز هست؟
سوال دیگه ام این هست که شرط where که در دستور زیر گذاشتم آیا درست هست به این صورت نوشتنش؟
cmd.CommandText = " INSERT INTO shakhes2 VALUES(" & m & "," & a & ") where idshakhes<>" & m
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نه به هیچ علامت خاصی نیاز نیست میتونی پشت هم همه دستور ها رو بنویسی و بینشون فقط یه space بذار البته برای شکیل تر بودن کد بهتره هر دستور رو تو یه خط بنویسی
در مورد دستورت هم شرط where درسته ولی تو دستور insert باید فیلد هایی که میخوای بهشون مقدار insert کنی مشخص باشه
insert into table1(field1,field2)values(value1,value2)
]
در ضمن تعریف پارامترها یادتون نره...
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
ممنونم از لطفت :قلب::قلب:
من همه دستورات رو به صورت زیر کنار هم نوشتم ولی خطای end of statment expected می گیره:ناراحت:
cmd.CommandText = " INSERT INTO shakhes2 VALUES(" & m & "," & a & ")where id <>" & m & "" "UPDATE shakhes2 SET id=" & m & "WHERE id = " & m & "" "UPDATE shakhes2 SET sal81 =" & a & " where id=" & m & ""
راستی شما که گفته بودی اول سطر قبلی رو delete کنم و بعد سطر جدید رو insert کنم می شه لطفا یک مثال برام اینجا بذاری؟:قلب:
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
من کد برنامم رو به جای اینکه insert کنم و delete کنم به این صورت نوشتم و بهش گفتم که اگر همچین ردیفی وجود داره عمل insert رو انجام بده ولی نمی دونم چرا خطای زیر رو داد :ناراحت::ناراحت:
If DataGridView1.CurrentRow.Cells(0).Value Then
For j AsInteger = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
If DataGridView2.Rows(j).Cells(4).Value <> 0 Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
m = (DataGridView1.CurrentRow.Cells(1).Value * 100) + DataGridView2.Rows(j).Cells(1).Value
cmd.CommandText = " select * from shakhes2 where idshakhes='" & m & "' and sal81 = '" & a & "'"
dr = cmd.ExecuteReader()
If dr.hasrows = TrueThen
dr.read()
cmd.CommandText = " UPDATE shakhes2 SET idshakhes,sal81 =" & m & "," & a & " WHERE idshakhes = " & m
cmd.ExecuteNonQuery()
Else
cmd.CommandText = " INSERT INTO shakhes2(idshakhes,sal81) VALUES(@m,@a)"
cmd.Parameters.Add("@idshakhes", SqlDbType.Int)
cmd.Parameters.Add("@sal81", SqlDbType.Int)
cmd.Parameters("@idshakhes").Value = m
cmd.Parameters("@sal81").Value = a
cmd.ExecuteNonQuery()
EndIf
Else : a = 0
EndIf
EndIf
Next
پیغام خطایی که صادر می کنه :ناراحت:
http://img.majidonline.com/pic/160797/khata.JPG
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
خواهشا دوستان یکی به من کمک کنه :افسرده::افسرده::افسرده::افس ده:
آخه چرا این پیغام خطا رو داده؟ :ناراحت::ناراحت::ناراحت::نار حت::ناراحت:
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
یعنی هیچ کسی نمی دونه این پیغام خطا برای چی هست؟ :متفکر::متفکر:
کجای کد نویسی ام اشتباه بوده که این پیغام رو داده؟:ناراحت::ناراحت::ناراح :
خواهشا دوستان خوبم یکی جواب منو بده:گریه::گریه::گریه::گریه:
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
سلام ...
اگر جایی کانکشن رو open کرده باشی بایستی اونو ببندید ...
کد شما نامفهومه ... معلوم نیست قصدتون چیه ...
شما اطلاعات جدید رو کجا وارد میکنید ... یعنی کاربر او مقادیر جدید رو جایی تایپ میکنه یا خودتون توی برنامه بدست میآرید...
اگر یه کم منظم تر برنامه بنویسید مشکلی پیش نمی آد ....
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نقل قول:
نوشته شده توسط
bahar2008
من کد برنامم رو به جای اینکه insert کنم و delete کنم به این صورت نوشتم و بهش گفتم که اگر همچین ردیفی وجود داره عمل insert رو انجام بده ولی نمی دونم چرا خطای زیر رو داد :ناراحت::ناراحت:
If DataGridView1.CurrentRow.Cells(0).Value Then
For j AsInteger = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
If DataGridView2.Rows(j).Cells(4).Value <> 0 Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
m = (DataGridView1.CurrentRow.Cells(1).Value * 100) + DataGridView2.Rows(j).Cells(1).Value
cmd.CommandText = " select * from shakhes2 where idshakhes='" & m & "' and sal81 = '" & a & "'"
dr = cmd.ExecuteReader()
If dr.hasrows = TrueThen
dr.read()
cmd.CommandText = " UPDATE shakhes2 SET idshakhes,sal81 =" & m & "," & a & " WHERE idshakhes = " & m
cmd.ExecuteNonQuery()
Else
cmd.CommandText = " INSERT INTO shakhes2(idshakhes,sal81) VALUES(@m,@a)"
cmd.Parameters.Add("@idshakhes", SqlDbType.Int)
cmd.Parameters.Add("@sal81", SqlDbType.Int)
cmd.Parameters("@idshakhes").Value = m
cmd.Parameters("@sal81").Value = a
cmd.ExecuteNonQuery()
EndIf
Else : a = 0
EndIf
EndIf
Next
پیغام خطایی که صادر می کنه :ناراحت:
http://img.majidonline.com/pic/160797/khata.JPG
دوست عزیز شما تو تعریف پارامترها مشکل دارید ...
پارامترهای شما a@ و m@ ...
idshakhes وsal81 هم مقادیری که بایستی پارامترها رو با اونا مقدار دهی کنی ...
cmd.Parameters.Addwithvalue("@m",idshakhes)
cmd.Parameters.Addwithvalue("@a",sal81)
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نقل قول:
نوشته شده توسط
bahar2008
نه دوست عزيز
من مي خوام اگر اطلاعات رديف يكي بود جايگزين همون رديفي بشه كه اطلاعاتش با اطلاعات وارد شده جديد بشه.
يعني اگر يك رديف در ديتا گريد از اعداد 2 و 5 و 8 دارم و وارد بانك مي كنم و در بانك هم رديفي مانند 2 و 5 و 7 دارم جايگزين اون رديف اول بشه و اطلاعات رو update كنه ولي به اين صورتيكه من نوشتم فيلد به فيلد اين كار رو انجام مي ده :ناراحت:
نمونه ای از حذف سطرهای اظافی:
select distinct cname,crs.C#,term
from sec,crs
where sec.C#=crs.C# and term>851
نقل قول: تشخیص تکراری بودن یک ردیف در بانک
نقل قول:
نوشته شده توسط
kablayi
سلام ...
اگر جایی کانکشن رو open کرده باشی بایستی اونو ببندید ...
کد شما نامفهومه ... معلوم نیست قصدتون چیه ...
شما اطلاعات جدید رو کجا وارد میکنید ... یعنی کاربر او مقادیر جدید رو جایی تایپ میکنه یا خودتون توی برنامه بدست میآرید...
اگر یه کم منظم تر برنامه بنویسید مشکلی پیش نمی آد ....
من كانكشن رو در آخر برنامم بستم دوست عزيز مشكل از excute reader هست كه مي گه بايد بسته بشه كه با اينكه اونو هم مي بندم ولي باز هم همين پيغام رو مي ده