منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
خطأ في الحفظ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : خطأ في الحفظ (/showthread.php?tid=29337)



خطأ في الحفظ - nourmandour - 11-04-19

برجاء المساعدة أنا جديد علي الفيجوال نت 
بيظهر خطأ في حفظ بينات الداتا جريد لقاعدة البيانات
المثال في المرفقات


RE: خطأ في الحفظ - elgokr - 12-04-19

مرحباً اخى nourmandour

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

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

تعال على كود الحفظ خاص الحدث Button2_Click
واستبدل كامل الكود بداخله بهذا الكود
كود :
       For i As Integer = 0 To dgrid.RowCount - 1
           Dim sql As String = "INSERT INTO fat_ba (id, numb, [date], sdad, amel, mgma, sanf, kmea, sar, agmale, mdfa) Values (@id, @numb, @date, @sdad, @amel, @mgma, @sanf, @kmea, @sar, @agmale, @mdfa)"
           Dim cm As New OleDb.OleDbCommand(sql, conn)
           Dim sdad As String = ""
           If RadioButton1.Checked = True Then
               sdad = "نقدي"
           ElseIf RadioButton2.Checked = True Then
               sdad = "اجلة"
           ElseIf RadioButton3.Checked = True Then
               sdad = "جزء نقضي"
           End If

           With cm.Parameters
               .AddWithValue("@id", TextBox1.Text).DbType = DbType.String
               .AddWithValue("@numb", dgrid.Rows(i).Cells(0).Value).DbType = DbType.Int32
               .AddWithValue("@date", TextBox2.Text).DbType = DbType.String
               .AddWithValue("@sdad", sdad).DbType = DbType.String
               .AddWithValue("@amel", ComboBox2.Text).DbType = DbType.String
               .AddWithValue("@mgma", dgrid.Rows(i).Cells(1).Value).DbType = DbType.String
               .AddWithValue("@sanf", dgrid.Rows(i).Cells(2).Value).DbType = DbType.String
               .AddWithValue("@kmea", dgrid.Rows(i).Cells(3).Value).DbType = DbType.Int32
               .AddWithValue("@sar", dgrid.Rows(i).Cells(4).Value).DbType = DbType.Currency
               .AddWithValue("@agmale", dgrid.Rows(i).Cells(5).Value).DbType = DbType.Currency
               .AddWithValue("@mdfa", 0).DbType = DbType.Currency
           End With

           If (conn.State = ConnectionState.Open) Then conn.Close()
           conn.Open()
           cm.ExecuteNonQuery()
           conn.Close()
       Next
       MsgBox("تم الحفظ")

قم بفتح شاشة mdconn
واستبدل كامل الكود بها بهذا الكود
كود :
Imports System.Data.OleDb

Module mdconn
   Public conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\data_1.mdb;user id=admin;jet oledb:database password=123")
End Module

بالنهاية لا تنسي ان تجعل السورس يعمل على بيئة 32Bit
من الواضح ان جهازك يعمل على بيئة 32Bit
لذلك لم يحدث معك اى مشكلة ولكن عند اختبار البرنامج
على جهاز من بيئة 64Bit فلا يمكنك تشغيل البرنامج لذلك حرصاً اجعل
البرنامج على بيئة 32Bit

تحياتى لك
وتمنياتى لك التوفيق



RE: خطأ في الحفظ - nourmandour - 12-04-19

(12-04-19, 12:15 AM)elgokr كتب :
مرحباً اخى nourmandour

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

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

تعال على كود الحفظ خاص الحدث Button2_Click
واستبدل كامل الكود بداخله بهذا الكود
كود :
       For i As Integer = 0 To dgrid.RowCount - 1
           Dim sql As String = "INSERT INTO fat_ba (id, numb, [date], sdad, amel, mgma, sanf, kmea, sar, agmale, mdfa) Values (@id, @numb, @date, @sdad, @amel, @mgma, @sanf, @kmea, @sar, @agmale, @mdfa)"
           Dim cm As New OleDb.OleDbCommand(sql, conn)
           Dim sdad As String = ""
           If RadioButton1.Checked = True Then
               sdad = "نقدي"
           ElseIf RadioButton2.Checked = True Then
               sdad = "اجلة"
           ElseIf RadioButton3.Checked = True Then
               sdad = "جزء نقضي"
           End If

           With cm.Parameters
               .AddWithValue("@id", TextBox1.Text).DbType = DbType.String
               .AddWithValue("@numb", dgrid.Rows(i).Cells(0).Value).DbType = DbType.Int32
               .AddWithValue("@date", TextBox2.Text).DbType = DbType.String
               .AddWithValue("@sdad", sdad).DbType = DbType.String
               .AddWithValue("@amel", ComboBox2.Text).DbType = DbType.String
               .AddWithValue("@mgma", dgrid.Rows(i).Cells(1).Value).DbType = DbType.String
               .AddWithValue("@sanf", dgrid.Rows(i).Cells(2).Value).DbType = DbType.String
               .AddWithValue("@kmea", dgrid.Rows(i).Cells(3).Value).DbType = DbType.Int32
               .AddWithValue("@sar", dgrid.Rows(i).Cells(4).Value).DbType = DbType.Currency
               .AddWithValue("@agmale", dgrid.Rows(i).Cells(5).Value).DbType = DbType.Currency
               .AddWithValue("@mdfa", 0).DbType = DbType.Currency
           End With

           If (conn.State = ConnectionState.Open) Then conn.Close()
           conn.Open()
           cm.ExecuteNonQuery()
           conn.Close()
       Next
       MsgBox("تم الحفظ")

قم بفتح شاشة mdconn
واستبدل كامل الكود بها بهذا الكود
كود :
Imports System.Data.OleDb

Module mdconn
   Public conn As New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\data_1.mdb;user id=admin;jet oledb:database password=123")
End Module

بالنهاية لا تنسي ان تجعل السورس يعمل على بيئة 32Bit
من الواضح ان جهازك يعمل على بيئة 32Bit
لذلك لم يحدث معك اى مشكلة ولكن عند اختبار البرنامج
على جهاز من بيئة 64Bit فلا يمكنك تشغيل البرنامج لذلك حرصاً اجعل
البرنامج على بيئة 32Bit

تحياتى لك
وتمنياتى لك التوفيق

الف الف الف شكرا 
وتسلم ايدك
 
في استفسار بخصوص 32bit يعني البرنامج 
بعد ما يخلص موش يشتغل علي اي نسخة غير 32 bit


RE: خطأ في الحفظ - elgokr - 12-04-19

الشكر لله والحمد لله
والحمد لله على كل حال

بخصوص بيئة الـ 32Bit للبرنامج
فهو يعملى على نظام 32Bit و 64Bit
عكس 64Bit لا يمكن العمل على 32Bit 

والمقصود بانك تجعل البرنامج على بيئة 32Bit
وهنا ليتم استعمال ملفات الـ Dll خاص بالاتصال بقاعدة البيانات
لان الاصدارا المستخدم لا يحتاج 
الى تثبيت اى اضافات مع البرنامج على الجهاز الاخر
لان بطبيعة الحال اى نسخة Windows تحتوى على ملفات Dll
تخص هذا الاتصال ولكن الملفات ببيئة 32Bit

لهذا السبب سيحدث مشكلة
اذا تم فتح البرنامج على نظام 64Bit
بدون تعديل بيئة البرنامج نفسه

اتمنى ان تكون الصورة وضحت لك كاملاً

تحياتى لك
وتمنياتى لك التوفيق