PDA

View Full Version : دلیل این پیغام خطا چی هست؟



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

البته این پیغام برای هیچ خط خاصی داده نمی شه و برنامه رو بدون خطا اجرا می کنه ولی به محض اینکه دکمه مربوط به ارسال داده ها رو می زنم با این خطا مواجه می شم

این پیغام خطا هست

http://i31.tinypic.com/2cgmxrn.jpg
این هم کد برنامم هست



For i = 0 To DataGridView1.RowCount - 1
cmd.CommandText = "UPDATE dade2 SET sal81 = " & DataGridView1.Rows.Item(i).Cells.Item(3).Value & ", sal82 = " & DataGridView1.Rows.Item(i).Cells.Item(4).Value & ", sal83 = " & DataGridView1.Rows.Item(i).Cells.Item(5).Value & ", sal84 = " & DataGridView1.Rows.Item(i).Cells.Item(6).Value & ", sal85 = " & DataGridView1.Rows.Item(i).Cells.Item(7).Value & ", sal86 = " & DataGridView1.Rows.Item(i).Cells.Item(8).Value & ", sal87 = " & DataGridView1.Rows.Item(i).Cells.Item(9).Value & ", sal88 = " & DataGridView1.Rows.Item(i).Cells.Item(10).Value & ", sal89 = " & DataGridView1.Rows.Item(i).Cells.Item(11).Value & ", sal90 = " & DataGridView1.Rows.Item(i).Cells.Item(12).Value & " WHERE iddade = " & DataGridView1.Rows.Item(i).Cells.Item(0).Value
cmd.ExecuteNonQuery()
Next

combo_ci
شنبه 31 فروردین 1387, 19:30 عصر
فکر میکنم ردیفی از datagrid رو هنوز انتخاب نکردی این کد اجرا میکنی

bahar2008
شنبه 31 فروردین 1387, 19:45 عصر
من خودم هم اول همین فکر رو می کردم ولی بعد انتخاب کردم و کلید رو زدم ولی باز هم همین پیغام رو داد:افسرده:

combo_ci
شنبه 31 فروردین 1387, 19:51 عصر
ComboBox1.SelectedIndex - 1

این قسمت رو چک کردی؟

combo_ci
شنبه 31 فروردین 1387, 19:54 عصر
فکر کنم وقتی این کارو میکنی


Year = ComboBox1.SelectedIndex - 1

عددی که در year قرار میگیره در datagrid وجود نداره

bahar2008
شنبه 31 فروردین 1387, 20:19 عصر
عددی که در year قرار می گیره ردیفی هست که توسط کاربر در datagrid انتخاب می شه و من اول اون ردیف رو انتخاب می کنم و بعد این دستورات رو اجرا می کنم

Erfanian
شنبه 31 فروردین 1387, 20:36 عصر
این مورد را قبل از Add کردن انجام دهید:
For x As Integer = SqlSelectCommand1.Parameters.Count - 1 To 0 Step -1
SqlSelectCommand1.Parameters.RemoveAt(x)
Next

bahar2008
شنبه 31 فروردین 1387, 21:26 عصر
منظورتون این هست که قبل از این دستور قرارش بدم؟


Year = ComboBox1.SelectedIndex - 1

bahar2008
دوشنبه 02 اردیبهشت 1387, 18:19 عصر
سلام دوستان عزیز
اون پیغام خطای قبلی مشکلش حل شد و حالا یک پیغام خطای جدید دارم که با اینکه کدم درست هست نمی دونم دلیل پیغامش چی هست و چون عنوان تاپیکم یکی بود گفتم همین جا مطرحش کنم

البته این پیغام برای هیچ خط خاصی داده نمی شه و برنامه رو بدون خطا اجرا می کنه ولی به محض اینکه دکمه مربوط به ارسال داده ها رو می زنم با این خطا مواجه می شم

این پیغام خطا هست

http://i31.tinypic.com/2cgmxrn.jpg
این هم کد برنامم هست



For i = 0 To DataGridView1.RowCount - 1
cmd.CommandText = "UPDATE dade2 SET sal81 = " & DataGridView1.Rows.Item(i).Cells.Item(3).Value & ", sal82 = " & DataGridView1.Rows.Item(i).Cells.Item(4).Value & ", sal83 = " & DataGridView1.Rows.Item(i).Cells.Item(5).Value & ", sal84 = " & DataGridView1.Rows.Item(i).Cells.Item(6).Value & ", sal85 = " & DataGridView1.Rows.Item(i).Cells.Item(7).Value & ", sal86 = " & DataGridView1.Rows.Item(i).Cells.Item(8).Value & ", sal87 = " & DataGridView1.Rows.Item(i).Cells.Item(9).Value & ", sal88 = " & DataGridView1.Rows.Item(i).Cells.Item(10).Value & ", sal89 = " & DataGridView1.Rows.Item(i).Cells.Item(11).Value & ", sal90 = " & DataGridView1.Rows.Item(i).Cells.Item(12).Value & " WHERE iddade = " & DataGridView1.Rows.Item(i).Cells.Item(0).Value cmd.ExecuteNonQuery()
Next

Erfanian
سه شنبه 03 اردیبهشت 1387, 08:07 صبح
بعد از Next‌یک BreakPoint قراردهید و در موقع اجرا محتویاتcmd.CommandText را بررسی کنید.احتمالا یکی از مقادیر خالی است یا کاماها را درست وارد نکرده‌اید.

bahar2008
سه شنبه 03 اردیبهشت 1387, 13:44 عصر
ممنونم از راهنماییتون دوست عزیز
منظورتون از خالی بودن مقادیر هنگام اجرای برنامه هست؟ یعنی اگر در اجرای برنامه یکی از ستون های دیتاگرید رو مقدار ندم این پیغام رو می گیره؟
خب اگه من نخوام همه ستونهای دیتا گریدم مقدار داشته باشه چی؟ یعنی موقع اجرای برنامه فقط یک سلول بخوام مقدار داشته باشه :متفکر::متفکر:
من دستور breakpoint رو نوشتم ولی ناشناخته بود برای vb :ناراحت: :متفکر:
من از visualstudio2005 استفاده می کنم و این دستور برای vb ناشناخته هست و خطا می گیره :اشتباه::ناراحت:

Erfanian
چهارشنبه 04 اردیبهشت 1387, 08:14 صبح
breakpoint‌ یکی از روشهای Debug کردن برنامه در حال اجرااست.
یعنی برروی خطی که commandtext مقدار گرفته است ، کلید F9 را بزنید و برنامه را اجرا کنید.هنگامی که اجرای برنامه به آن خط رسید، اجرا موقتا متوقف می‌شود و می‌توانید محتویات commandtext را بررسی کنید. از طریق اضافه کردن Watch یا مشاهده آن در پنجره Immediate

bahar2008
چهارشنبه 04 اردیبهشت 1387, 09:40 صبح
ممنونم از راهنماییتون دوست عزیز
من کاری که شما گفتید رو انجام دادم و وقتی Immediate رو زدم پنجره ای باز کرد که داخلش خالی بود و پیغام خطایی نداشت داخلش :افسرده:
راه دیگه ای رو امتحان کردم و تمام سلولهای دیتاگرید رومقدار دادم و با اینکه باز هم این پیغام خطا رو می داد ولی اطلاعات رو وارد بانکم کرد (ولی با پیغام خطایی که باز هم می داد) :اشتباه:

ولی من نمی خوام تمام مقادیر دیتاگریدم پر باشه و بعضی از سلولهایش ممکنه خالی باشه و برای این کار چه کدی لازم هست که بنویسم که داخل سلولهایی که خالی هست خودش مقدار صفر رو قرار بده تا کد اجرا بشه ؟؟؟؟( چون اگه مقداری نداشته باشه اطلاعات ر وداخل بانک قرار نمی ده ):افسرده:

Erfanian
چهارشنبه 04 اردیبهشت 1387, 13:42 عصر
در پنجره Immediate تایپ کنید :
cmd.CommandText?

nasseritemp
چهارشنبه 04 اردیبهشت 1387, 19:39 عصر
',' ها رو بعد از یک Space قرار بدید.


For i = 0 To DataGridView1.RowCount - 1
cmd.CommandText = "UPDATE dade2 SET sal81 = " & DataGridView1.Rows.Item(i).Cells.Item(3).Value & " , sal82 = " & DataGridView1.Rows.Item(i).Cells.Item(4).Value & " , sal83 = " & DataGridView1.Rows.Item(i).Cells.Item(5).Value & " , sal84 = " & DataGridView1.Rows.Item(i).Cells.Item(6).Value & " , sal85 = " & DataGridView1.Rows.Item(i).Cells.Item(7).Value & " , sal86 = " & DataGridView1.Rows.Item(i).Cells.Item(8).Value & " , sal87 = " & DataGridView1.Rows.Item(i).Cells.Item(9).Value & " , sal88 = " & DataGridView1.Rows.Item(i).Cells.Item(10).Value & " , sal89 = " & DataGridView1.Rows.Item(i).Cells.Item(11).Value & " , sal90 = " & DataGridView1.Rows.Item(i).Cells.Item(12).Value & " WHERE iddade = " & DataGridView1.Rows.Item(i).Cells.Item(0).Value cmd.ExecuteNonQuery()
Next

bahar2008
چهارشنبه 04 اردیبهشت 1387, 22:36 عصر
در پنجره Immediate تایپ کنید :
cmd.CommandText?


این جواب رو داد بهم >>>>>>
Character is not valid.:ناراحت::افسرده:

bahar2008
چهارشنبه 04 اردیبهشت 1387, 22:41 عصر
',' ها رو بعد از یک Space قرار بدید.


For i = 0 To DataGridView1.RowCount - 1
cmd.CommandText = "UPDATE dade2 SET sal81 = " & DataGridView1.Rows.Item(i).Cells.Item(3).Value & " , sal82 = " & DataGridView1.Rows.Item(i).Cells.Item(4).Value & " , sal83 = " & DataGridView1.Rows.Item(i).Cells.Item(5).Value & " , sal84 = " & DataGridView1.Rows.Item(i).Cells.Item(6).Value & " , sal85 = " & DataGridView1.Rows.Item(i).Cells.Item(7).Value & " , sal86 = " & DataGridView1.Rows.Item(i).Cells.Item(8).Value & " , sal87 = " & DataGridView1.Rows.Item(i).Cells.Item(9).Value & " , sal88 = " & DataGridView1.Rows.Item(i).Cells.Item(10).Value & " , sal89 = " & DataGridView1.Rows.Item(i).Cells.Item(11).Value & " , sal90 = " & DataGridView1.Rows.Item(i).Cells.Item(12).Value & " WHERE iddade = " & DataGridView1.Rows.Item(i).Cells.Item(0).Value cmd.ExecuteNonQuery()
Next


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

davood-ahmadi
پنج شنبه 05 اردیبهشت 1387, 06:45 صبح
اگه میشه یک نمونه کوچک از برنامه و بانکتون را بگذارید تا دوستان راحت تر کمکتون کنند.

nasseritemp
پنج شنبه 05 اردیبهشت 1387, 22:17 عصر
حالا اگر بخوام تمام ستونهایی که کاربر خالی می ذاره رو معادل صفر در بانکم قرار بدم از چه کدی باید استفاده کنم؟


میتونید مقدار NullValue ستون مورد نظرتون رو در DataGridView Property صفر در نظر بگیرید و در رویداد DataGridView1_CellLeave هم کنترل کنید که مقدار سلول مورد نظرتون رو در صورت Null بودن به صفر یا هر مقدار دلخواه Set کنه.

bahar2008
جمعه 06 اردیبهشت 1387, 21:48 عصر
ممنونم از راهنماییتون دوست عزیز :قلب::قلب:

ولی من گزینه ای به نام NullValue رو توی DataGridView Property ندیدم:متفکر: :متفکر:

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

bahar2008
شنبه 07 اردیبهشت 1387, 19:57 عصر
می شه یکی به من بگه چه کدی باید در DataGridView1_CellLeave بنویسم تا هر سلولی که کاربر خالی می ذاره خود برنامه خود به خود در بانک عدد صفر رو قرار بده؟:ناراحت: :افسرده:

علیرضا مداح
شنبه 07 اردیبهشت 1387, 20:17 عصر
سلام،


ولی من گزینه ای به نام NullValue رو توی DataGridView Property ندیدم



DataGridViewColumn.DefaultCellStyle.NullValue

البته اگر از DataTable به عنوان دیتاسورس استفاده میکنید ، میتوانید مقدار پروپرتی DefaultValue مربوط به هر یک از DataColumn ها را نیز تغییر دهید:
مثالی از MSDN :


Private Sub CreateColumns()
Dim column As DataColumn
Dim table As New DataTable

column = New DataColumn
With column
.DataType = System.Type.GetType("System.String")
.DefaultValue = "Address"
.Unique = False
End With
table.Columns.Add(column)

column = New DataColumn
With column
.DataType = System.Type.GetType("System.Int32")
.DefaultValue = 100
End With
table.Columns.Add(column)

column = New DataColumn
With column
.DataType = System.Type.GetType("System.DateTime")
.DefaultValue = "1/1/2001"
End With
table.Columns.Add(column)

Dim row As DataRow
' Add one row. Since it has default values,
' no need to set values yet.
row = table.NewRow

table.Rows.Add(row)
End Sub

bahar2008
یک شنبه 08 اردیبهشت 1387, 11:52 صبح
ممنونم از لطفتون دوستان
مشکل حل شد :قلب::قلب::قلب::قلب: