PDA

View Full Version : سوال: کمک در حل مشکل پیغام خطایی که در تعریف متغیر صادر می کنه



bahar2008
پنج شنبه 30 خرداد 1387, 12:27 عصر
سلام دوستان
به یک مشکل عجیبی برخوردم که امیدوارم با کمک شما دوستان حلش کنم :قلب::قلب:

کد اولیه من این بود که بدون هیچ خطایی برنامه رو انجام می داد ولی جواب درست نمی داد


For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView1.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value


مشکل اینکه جواب درست نیم داد رو فهمیدم و فقط اسم دیتاگرید رو به صورت زیر تغییر دادم


For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value

ولی الان که برنامه رو اجرا می کنم پیغام خطای زیر رو نشون می ده :اشتباه::ناراحت:
http://img.majidonline.com/pic/159743/khata2.JPG

با اینکه اسم متغیر رو هم عوض کردم ولی باز هم همین خطا رو می گرفت :ناراحت:
آیا کسی از دوستان تا به حال با این پیغام مواجه شده؟

bahar2008
جمعه 31 خرداد 1387, 10:34 صبح
یعنی هیچ کسی تا به حال به این پیغام خطا بر نخورده؟:ناراحت:
من تا فردا فقط فرصت دارم این مشکل رو حل کنم :افسرده::افسرده:...........هر کی بلده لطفا کمک کنه :قلب:

Dariuosh
جمعه 31 خرداد 1387, 10:55 صبح
سلام دوستان
به یک مشکل عجیبی برخوردم که امیدوارم با کمک شما دوستان حلش کنم :قلب::قلب:

کد اولیه من این بود که بدون هیچ خطایی برنامه رو انجام می داد ولی جواب درست نمی داد


For j AsInteger = 0 To DataGridView2.RowCount - 1
If DataGridView1.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value


مشکل اینکه جواب درست نیم داد رو فهمیدم و فقط اسم دیتاگرید رو به صورت زیر تغییر دادم


For j AsInteger = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value

ولی الان که برنامه رو اجرا می کنم پیغام خطای زیر رو نشون می ده :اشتباه::ناراحت:
http://img.majidonline.com/pic/159743/khata2.JPG

با اینکه اسم متغیر رو هم عوض کردم ولی باز هم همین خطا رو می گرفت :ناراحت:
آیا کسی از دوستان تا به حال با این پیغام مواجه شده؟


1- اينجا شرطت چيه يعني داري چيو چک ميکني ؟
2- اين پيغام ميگه @a قبلاً تعريف شده و تو مي خواي دوباره تعريفش کني و فک نميکنم ماله اين تيکه کدي باشه که گذاشتي

bahar2008
جمعه 31 خرداد 1387, 11:09 صبح
این شرط برای این هست که ببینه آیا در دیتا گرید دوم چک باکسی تیک خورده یا نخورده
در برنامم دو تا دیتا گرید دارم که در هر دو ستونی داره که چک باکس هست و اول با شرط زیر دیتا گرید اول رو چک کردم که آیا تیک خورده یا نه و در حلقه هم دیتا گرید دوم رو چک کردم که تیک داره یا نه (در حلقه گذاشتم چون به تعدادی که چک باکس ها در دیتا گرید دوم تیک خورده باید عمل تقسیم رو انجام بده)
برنامه به این صورت هست می کنه



If DataGridView1.CurrentRow.Cells(0).Value Then
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
cmd.CommandText = "insert into shakhes (sal81,sal82,sal83,sal84,sal85,sal86,sal87,sal88,s al89,sal90) VALUES (@a,@b)"
cmd.Parameters.AddWithValue("a", a)
cmd.Parameters.AddWithValue("b", b)
cmd.ExecuteNonQuery()
End If
Next

Dariuosh
جمعه 31 خرداد 1387, 12:19 عصر
اينو يه امتحان بکن


Cmd.Parameters.Item("a").Value = a

bahar2008
جمعه 31 خرداد 1387, 13:38 عصر
ممنونم از لطفت دوست عزیز
کدی که دادید رو امتحان کردم و باز این پیغام خطا رو داد موقع اجرای برنامه :اشتباه: :ناراحت:

http://img.majidonline.com/pic/159829/khata.JPG

ali_md110
جمعه 31 خرداد 1387, 14:32 عصر
ایا منظور شما از sal81,sal82,sal83,sal84,sal85,sal86,sal87,sal88,sa l89,sal90 فیلدهای جدول شماست و ایا پارامترهای ورودی به تعداد همین فیلدها ست در اینجا شما برای این همه فیلد فقط 2 پارامتر ورودی مشخص کرده اید

bahar2008
جمعه 31 خرداد 1387, 14:44 عصر
دوست عزیز مشکل از نوشتن کد در اینجا بود من فقط می خواستم دو تا از پارامترها رو بنویسم که زیاد جایی در صفحه نگیره



If DataGridView1.CurrentRow.Cells(0).Value Then
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
cmd.CommandText = "insert into shakhes (sal81,sal82) VALUES (@a,@b)"
cmd.Parameters.AddWithValue("a", a)
cmd.Parameters.AddWithValue("b", b)
cmd.ExecuteNonQuery()
End If
Next



خطایی که می گیره در متغیر a هست که با اینکه اسمش رو هم عوض کردم ولی باز هم همون پیغام خطای اولی رو می داد:ناراحت:

ali_md110
جمعه 31 خرداد 1387, 16:08 عصر
فکر کنم مشکل شما با این مثال حل بشه

bahar2008
جمعه 31 خرداد 1387, 16:47 عصر
ممنونم دوست عزیز
ولی برای این کدی که دادید خطا می گیره >>>>> Command.Parameters.Add
من با sql کار می کنم و با اینکه تمام کدهارو تبدیل کردم به sql ولی باز هم خطا می گرفت و زیر این دستور رو خط آبی می کشید :ناراحت:

bahar2008
جمعه 31 خرداد 1387, 17:24 عصر
مشکل رو پیدا کردم دوستان ولی نمی تونم حلش کنم
مشکلش این بود که چون در دیتا گریدم 2 تا گزینه رو انتخاب می کردم این می اومده اطلاعات هر دو رو در a می ریخته برنامه رو به صورت زیر تغییر دادم



If DataGridView1.CurrentRow.Cells(0).Value Then
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
End If
Next
cmd.CommandText = "insert into shakhes (sal81,sal82,sal83,sal84,sal85,sal86,sal87,sal88,s al89,sal90) VALUES (@a,@b)"
cmd.Parameters.AddWithValue("a", a)
cmd.Parameters.AddWithValue("b", b)
cmd.ExecuteNonQuery()

دیگه اون پیغام خطا رو نمی ده ولی فقط برای یک ستون از دو ستونی که تیک خورده عمل تقسیم رو انجام می ده :ناراحت:
به نظر شما دوستان چه جوری باید کد رو تغییر بدم که برای هر تعدادی که کاربر تیک می زنه عمل تقسیم رو انجام بده
من که هر چی فکر می کنم می بینم کدها درست هست و نمی دونم مشکل از کجاست:افسرده:

Sub Zero
جمعه 31 خرداد 1387, 19:14 عصر
به جای اینکه در حلقه For مدام پارامتر تعریف کنید ، یک بار خارج از حلقه پارامترها رو تعریف کنید :

Cmd.Parameters.Add("a", SqlDbType.Int, 1)
سپس در حلقه از این کد استفاده کنید .

Cmd.Parameters.Item(0).Value = a

bahar2008
جمعه 31 خرداد 1387, 20:40 عصر
من به صورت زیر نوشتم دوست عزیز ولی پیغام خطا داد آیا محلهای کد ها رو اشتباه گذاشتم؟


If DataGridView1.CurrentRow.Cells(0).Value Then
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
cmd.Parameters.Item(1).Value = a

EndIf
Next
cmd.CommandText = "insert into shakhes (sal81,sal82,sal83,sal84,sal85,sal86,sal87,sal88,s al89,sal90) VALUES (@a,@b)"
cmd.Parameters.Add("a", SqlDbType.Int, 1)
cmd.ExecuteNonQuery()


پیغام خطا هم پیغام زیر بود :ناراحت:
http://img.majidonline.com/pic/159870/khata2.JPG

Sub Zero
جمعه 31 خرداد 1387, 21:26 عصر
کدهای شما خیلی مبهمه . به این صورت امتحان کنید.

If DataGridView1.CurrentRow.Cells(0).Value Then
cmd.CommandText = "insert into shakhes (sal81,sal82,sal83,sal84,sal85,sal86,sal87,sal88,s al89,sal90) VALUES (@a,@b)"
cmd.Parameters.Add("a", SqlDbType.Int, 2)
cmd.Parameters.Add("b", SqlDbType.Int, 2)
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
cmd.Parameters.Item(0).Value = a
cmd.Parameters.Item(1).Value = b
cmd.ExecuteNonQuery()
EndIf
Next

بسته به نیازتون اجرای کوئری رو بیرون یا داخل حلقه انجام بدید .

bahar2008
جمعه 31 خرداد 1387, 21:46 عصر
برنامه به این شکل هست که دو تا دیتا گرید دارم که در هردو یکی از ستونها چک باکس هست و از دیتا گرید اولی فقط یکی از چک باکس ها تیک میخوره و از دیتا گرید دومی هم به هر تعدادی که کاربر بخواهد می تونه تیک بزنه و وقتی کاربر انتخاب خودش رو کرد برنامه مقادیر اون فیلدهایی که کاربر تیک زده رو تقسیم بر هم کنه و جواب تقسیم رو در بانک نگهداری کنه
این کدی که شما دادید جواب تقسیم ها رو که در بانک ذخیره نمی کنه :متفکر: :متفکر:

ali_md110
شنبه 01 تیر 1387, 01:13 صبح
این مثال با اکسس جواب نداد؟ یا اینکه وقتی تبدیل به sql server میکنی جواب نمیده؟

bahar2008
یک شنبه 02 تیر 1387, 09:03 صبح
در sql خطا مي گرفت و مي گفت دستور Command.Parameters.Add رو نمي شناسه
البته من اين مشكل رو با تغيير دستور زير رفع كردم ولي يك پيغام خطاي جديد ديگه اي مي ده :اشتباه: :اشتباه: :ناراحت: :گریه:


cmd.CommandText = "insert into shakhes VALUES (" & a & ", " & b & ", " & c ',@d,@s,@f,@k,@l,@p,@r)"

mehrnoosh_al62
یک شنبه 02 تیر 1387, 09:41 صبح
کدت رو به صورت زیر تغییر بده اول پارامتر ها رو تعریف کن بهشون مقدار بده و بعد insert کن

If DataGridView1.CurrentRow.Cells(0).Value Then
For j As Integer = 0 To DataGridView2.RowCount - 1
If DataGridView2.Rows(j).Cells(0).Value Then
a = DataGridView1.CurrentRow.Cells(4).Value / DataGridView2.Rows(j).Cells(4).Value
b = DataGridView1.CurrentRow.Cells(5).Value / DataGridView2.Rows(j).Cells(5).Value
EndIf
Next
cmd.parameters.add("@sale81",SqlDbType.int)
cmd.parameters.add("@sale82",SqlDbType.int)
cmd.parameters("@sale81").value=a
cmd.parameters("@sale82").value=b
cmd.CommandText = "insert into shakhes (sal81,sal82) VALUES (@sale81,@sale82)"

cmd.ExecuteNonQuery()

bahar2008
یک شنبه 02 تیر 1387, 10:29 صبح
ممنونم از لطفت دوست عزيز :قلب::قلب::قلب:
واقعا لطف كردي اين كد رو دادي :قلب::قلب:
بالاخره اين مشكل هم حل شد :قلب::قلب::قلب::قلب: