23-01-18, 01:13 PM
(آخر تعديل لهذه المشاركة : 23-01-18, 01:25 PM {2} بواسطة عبدالله الدوسري.)
الخطاء في انك مثبت هذة القيمة في كل حلقة تكرار
where inv='" & TextBox2.Text & "'"
المفروض ان تضع رقم الــ ID الخاص بالسجل الذي تقوم بعمل Update له
والـ ID المفروض يتغير في كل لفة
أخطاء أخرى : لا أعرف كيف أصنفها , إعتبرها تحت مسمى الجودة
أولاً : Dim a As New OleDb.OleDbCommand
من المفترض أن تكون خارج الحلقة وليس في كل لفة تقوم بإنشاء أمر جديد
أيضاً : a.Connection = con
ما هو ثابت لماذا تقوم بتعيين القيمة له في كل لفة
ثانياً : If con.State = ConnectionState.Open Then con.Close()
con.Open()
المفروض أن تسأل عن حالة الإتصال فقط مرة واحدة قبل الدخول إلى الحلقة
وإذا مغلق يتم فتح الإتصال قبل الدخول إلى الحلقة
وبعد الإنتهاء من كامل حلقة التكرار تقوم بإغلاق الإتصال
----------------------------------------
داخل الحلقة المفرتض أن تعين قيمة CommandText
وتنفيذ الإستعلام ExecuteNonQuery
فقط لاغير
-------------------------------------------------------------
الحل :
أولاً : في كل حلقة
-----------------------------
where inv='" & TextBox2.Text & "'"
ضع رقم الــ ID ( الـprimary key ) الخاص بالسجل الذي تقوم بعمل Update له
ليصبح :
xxxxxxxxxxxxxxxxx = رقم الــIndex الخاص بالعامود ID في الداتا قريد فيو
إذا كان الــID عبارة عن رقم
قم بإزالة التنصيص المعلم باللون الأحمر , تماماً مثل ما عملت مع الحقل QTY بدون تنصيص
'" & Val(DataGridView1.Rows(i).Cells(xxxxxxxxx).Value) & "'"
-----------------------------
الكود الكامل : بعد التعديل
سؤااااااااااااااااااااااااااااااااااااااااااااااال يطرح نفسة ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
لماذا تعتمد على الـDatagridview بينما الجدول الأصل موجود
لماذا لا تتعامل مع الجدول مباشرة الــ DataRow
تابع معي هذا الدرس
مثال بسيط لبرنامج إجازات فقط لأغراض الشرح (الدرس الأول)
where inv='" & TextBox2.Text & "'"
المفروض ان تضع رقم الــ ID الخاص بالسجل الذي تقوم بعمل Update له
والـ ID المفروض يتغير في كل لفة
أخطاء أخرى : لا أعرف كيف أصنفها , إعتبرها تحت مسمى الجودة
أولاً : Dim a As New OleDb.OleDbCommand
من المفترض أن تكون خارج الحلقة وليس في كل لفة تقوم بإنشاء أمر جديد
أيضاً : a.Connection = con
ما هو ثابت لماذا تقوم بتعيين القيمة له في كل لفة
ثانياً : If con.State = ConnectionState.Open Then con.Close()
con.Open()
المفروض أن تسأل عن حالة الإتصال فقط مرة واحدة قبل الدخول إلى الحلقة
وإذا مغلق يتم فتح الإتصال قبل الدخول إلى الحلقة
وبعد الإنتهاء من كامل حلقة التكرار تقوم بإغلاق الإتصال
----------------------------------------
داخل الحلقة المفرتض أن تعين قيمة CommandText
وتنفيذ الإستعلام ExecuteNonQuery
فقط لاغير
-------------------------------------------------------------
الحل :
أولاً : في كل حلقة
-----------------------------
where inv='" & TextBox2.Text & "'"
ضع رقم الــ ID ( الـprimary key ) الخاص بالسجل الذي تقوم بعمل Update له
ليصبح :
PHP كود :
where inv = Val(DataGridView1.Rows(i).Cells(xxxxxxxxxxxxxxxxx).Value)
إذا كان الــID عبارة عن رقم
قم بإزالة التنصيص المعلم باللون الأحمر , تماماً مثل ما عملت مع الحقل QTY بدون تنصيص
'" & Val(DataGridView1.Rows(i).Cells(xxxxxxxxx).Value) & "'"
-----------------------------
الكود الكامل : بعد التعديل
PHP كود :
Dim a As New OleDb.OleDbCommand() With {.Connection = con, .CommandType = CommandType.Text}
If con.State = ConnectionState.Open Then con.Close() : con.Open()
Try
For i As Integer = 0 To DataGridView1.RowCount - 2
a.CommandText = "update QYE set PART_NO='" & DataGridView1.Rows(i).Cells(0).Value & "', DES='" & DataGridView1.Rows(i).Cells(1).Value & "', QTY=" & Val(DataGridView1.Rows(i).Cells(2).Value) & ",UP=" & Val(DataGridView1.Rows(i).Cells(3).Value) & ", TP=" & Val(DataGridView1.Rows(i).Cells(4).Value) & " where inv='" & Val(DataGridView1.Rows(i).Cells(xxxxxxxxx).Value) & "'"
a.ExecuteNonQuery()
Next
MsgBox(" OK EDIT IS DONE ", MsgBoxStyle.ApplicationModal)
Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
End Try
سؤااااااااااااااااااااااااااااااااااااااااااااااال يطرح نفسة ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
لماذا تعتمد على الـDatagridview بينما الجدول الأصل موجود
لماذا لا تتعامل مع الجدول مباشرة الــ DataRow
تابع معي هذا الدرس
مثال بسيط لبرنامج إجازات فقط لأغراض الشرح (الدرس الأول)
