تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
خطأ في عملية حفظ محتوى datagridview إلى جدول من قاعدة البيانات
#1
السلام عليكم ورحمة الله وبركاته أعضاء المنتدى
لدي جدول يحتوي على خمسة حقول
الرقم : مفتاح : القيمة نص 
الإسم واللقب : نص
رقم الحساب : رقم
مفتاح : رقم
المبلغ : رقم

عند تنفيذ الكود التالي
كود :
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).
فكيف يمكن معالجة هذا الخطأ بارك الله فيكم
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

الرقم : مفتاح : القيمة نص
اجعله ترقيم تلقائي ( AutoNumber )


تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: حريف برمجة
#3
السلام عليكم ورحمة الله وبركاته 
شكرا لك أخي 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
الرد }}}
تم الشكر بواسطة:
#4
السبب يرجع الى القيمة هنا
كود :
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


تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة:
#5
بارك الله فيك أخي وشكرا على الإجابة 
كود يشتغل 
بقي لدي هو أن الأرقام  في حقل الرقم لا تبدأ من 01 عند حذف كامل المعطيات في الجدول
بل تواصل عند أخر تسجيلة حذفت مثلا 144 
عند الإضافة رغم أن الجدول فارغ تصبح التسجيلة 145
فهل من طريقة لجعل الرقم يبدأ العد من جديد
الرد }}}
تم الشكر بواسطة:
#6
يرجع هذا السبب لكون العمود ترقيم تلقائي
وبهذا لا يوجد مشكلة فى البداية والنهاية هو ما الا ترقيم
واستغلاله فقط للتعديل والحذف على البيانات

ولكن عند العرض او الاستخدام يمكنك انشاء عمود اخر وليكن كود
وهو من نوع رقم

وعند الاضافة تقوم انت بادراج الرقم يدوياً مثل الاسم وباقي البيانات

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: معاذ_ابراهيم
#7
بارك الله فيك أخي elgokr  
جزاك الله خيرا
الرد }}}
تم الشكر بواسطة: elgokr
#8
لى ولك وللجميع بامر الله

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة: technomedia


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف يتم عرض جدول من قائمة listbox في داتاقريدفيو ahmedfa71 5 883 04-09-25, 02:59 PM
آخر رد: ahmedfa71
  تصدير البيانات إلى ملف RTF مصمم هاوي 4 842 15-08-25, 04:13 PM
آخر رد: أبو خالد الشكري
  [VB.NET] ما هو أفضل موقع استضافة لقواعد البيانات MSSQL ؟ mmaalmesry 0 799 16-07-25, 10:45 PM
آخر رد: mmaalmesry
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,265 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  مشكلة في حفظ البيانات مصمم هاوي 2 1,028 30-06-25, 08:51 AM
آخر رد: مصمم هاوي
  بطء في جلب البيانات مصمم هاوي 9 1,009 08-05-25, 07:51 AM
آخر رد: مصمم هاوي
  [Acces2007] مشكلة ملف قاعدة بيانات access للقراءة فقط mmaalmesry 11 1,489 29-04-25, 08:55 PM
آخر رد: mmaalmesry
  تعديل كود تحديث البيانات مصمم هاوي 1 790 26-04-25, 06:07 PM
آخر رد: مصمم هاوي
Photo لايمكن تعرف على تنسيق قاعدة البيانات الدريساوي 2 703 26-04-25, 12:24 AM
آخر رد: الدريساوي
  مساعدة في طريقة تحميل الفيديوهات المخزنة في قاعدة البيانات foad8920 0 665 24-04-25, 12:58 PM
آخر رد: foad8920

التنقل السريع :


يقوم بقرائة الموضوع: