السلام عليكم ورحمة الله وبركاته أعضاء المنتدى
لدي جدول يحتوي على خمسة حقول
الرقم : مفتاح : القيمة نص
الإسم واللقب : نص
رقم الحساب : رقم
مفتاح : رقم
المبلغ : رقم
عند تنفيذ الكود التالي
كود :
For Each row As DataGridViewRow In DGView.Rows
Using cmd As New OleDbCommand("INSERT INTO Emp (nom,NCompte,Cle,MontApayer) VALUES(@Nom, @Compte, @Cle, @Montant)", cn)
cmd.Parameters.AddWithValue("@Nom", row.Cells("Nom").Value)
cmd.Parameters.AddWithValue("@Compte", row.Cells("Compte").Value)
cmd.Parameters.AddWithValue("@Cle", row.Cells("Cle").Value)
cmd.Parameters.AddWithValue("@Montant", row.Cells("Montant").Value)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
End Using
Next
بضهر الخطأ التالي
لا يمكن أن يحتوي الفهرس أو المفتاح الأساسي على قيمة خالية (Null).
فكيف يمكن معالجة هذا الخطأ بارك الله فيكم
وعليكم السلام ورحمة الله وبركاته
الرقم : مفتاح : القيمة نص
اجعله ترقيم تلقائي ( AutoNumber )
تحياتى لك
وتمنياتى لك التوفيق
السلام عليكم ورحمة الله وبركاته
شكرا لك أخي elgokr على الرد
فعلا أخي عند جعل خاصية الرقم
ترقيم تلقائي ( AutoNumber )
تمت عملية الحفظ ولكن بضهور خطأ ثاني
لا توجد للمعلمة @Nom قيمة افتراضية.
مع العلم أنني لا أريد للرقم أن يكون AutoNumber
وبارك الله فيكم
مع العلم في عملية من الفورم textbox تتم العملية بنجاح مع أن الرقم ليس ترقيم تلقائي
كمايلي في الكود أدناه
كود :
Private Sub NemID()
Dim N As Integer
cn.Open()
cmd.CommandText =
<sql>
SELECT
Nem
FROM
Emp;
</sql>.Value
Dtr = cmd.ExecuteReader
While Dtr.Read
N = Dtr(0)
End While
N += 1
TextBoxNem.Text = N.ToString("000000")
cn.Close()
End Sub
Private Sub ButtonAjouter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonAjouter.Click
cn.Open()
cmd.CommandText = "SELECT COUNT (*) FROM Emp WHERE Nem='" & TextBoxNem.Text & "'"
Dim Cpt As Int16
Cpt = cmd.ExecuteScalar
If Cpt = 0 Then
cmd.CommandText = "INSERT INTO Emp(Nem,nom,NCompte,Cle,MontApayer,Motif)VALUES ('" & TextBoxNem.Text & "','" & TextBoxNomPren.Text & "','" & TextBoxNCcp.Text & "','" & TextBoxCle.Text & "','" & TextBoxMontant.Text & "','" & ComboBoxMotif.Text & "')"
cmd.ExecuteNonQuery()
MessageBox.Show("تمت عملية الحفظ بنجاح")
Else
MessageBox.Show("هذا الإسم موجود مسبقا")
End If
cn.Close()
ShowdDataGView()
End Sub
السبب يرجع الى القيمة هنا
كود :
row.Cells("Nom").Value
تاكد بان Nom اذا كان رقم ولا يقبل ان يكون فارغ
ان يكون القيمة هنا
كود :
row.Cells("Nom").Value
هو رقم صحيح وكذلك ليس فارغ
يمكنك عمل زر للاختبار وتضع به هذا الكود
كود :
For Each row As DataGridViewRow In DGView.Rows
MsgBox(row.Cells("Nom").Value)
Next
وتقوم بتعبئة الداتا جريد
وبدلاً من عمل الحفظ تقوم بالضغط على هذا الزر
وتري فى كل مرة يظهر رسالة هل تحتوى على اى منهم رسالة فارغة
واذا كان الاجابة نعم وهى تخص الرسالة الاخيرة مثلاً
فكل ما عليك ان تقوم باستبدال كود الحفظ بهذا الكود
كود :
For Each row As DataGridViewRow In DGView.Rows
If row.Cells("Nom").Value IsNot Nothing Then
Using Then cmd As New OleDbCommand("INSERT INTO Emp (nom,NCompte,Cle,MontApayer) VALUES(@Nom, @Compte, @Cle, @Montant)", cn)
cmd.Parameters.AddWithValue("@Nom", row.Cells("Nom").Value)
cmd.Parameters.AddWithValue("@Compte", row.Cells("Compte").Value)
cmd.Parameters.AddWithValue("@Cle", row.Cells("Cle").Value)
cmd.Parameters.AddWithValue("@Montant", row.Cells("Montant").Value)
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
End Using
End If
Next
أو تطبيق هذا الاعدادات فى الداتا جريد
وهو تعطيل الاضافة بعدم تنشيط Enable Adding
تحياتى لك
وتمنياتى لك التوفيق
بارك الله فيك أخي وشكرا على الإجابة
كود يشتغل
بقي لدي هو أن الأرقام في حقل الرقم لا تبدأ من 01 عند حذف كامل المعطيات في الجدول
بل تواصل عند أخر تسجيلة حذفت مثلا 144
عند الإضافة رغم أن الجدول فارغ تصبح التسجيلة 145
فهل من طريقة لجعل الرقم يبدأ العد من جديد
يرجع هذا السبب لكون العمود ترقيم تلقائي
وبهذا لا يوجد مشكلة فى البداية والنهاية هو ما الا ترقيم
واستغلاله فقط للتعديل والحذف على البيانات
ولكن عند العرض او الاستخدام يمكنك انشاء عمود اخر وليكن كود
وهو من نوع رقم
وعند الاضافة تقوم انت بادراج الرقم يدوياً مثل الاسم وباقي البيانات
تحياتى لك
وتمنياتى لك التوفيق
بارك الله فيك أخي elgokr
جزاك الله خيرا