المشاركات : 54
المواضيع 13
الإنتساب : May 2017
السمعة :
1
الشكر: 166
تم شكره 81 مرات في 40 مشاركات
24-07-18, 09:36 PM
السلام عليكم ورحمة الله وبركاته
أخواني الكرام لدي DataGridView1 ووأقوم بنقل البيانات منها إلى DataGridView2 وتعمل الحمد الله بشكل سليم
المشكلة عندما أقوم بالحفظ لايحفظ إلا الصف الأول من DataGridView2 ولايحفظ الصفين
هذا كود الحفظ
كود :
For Each saf As DataGridViewRow In DataGridView2.Rows
If Not saf.IsNewRow Then
Dim Str As String
Dim cmds As New SqlCommand
If Not connn.State = ConnectionState.Open Then
connn.Open()
End If
cmds.Connection = connn
Str = "insert into tsjel_subj(id_tsjel_subj,id_number,FirstName,name_dorh,number_dorh,subj)" &
"values (@1,@2,@3,@4,@5,@6)"
cmds.CommandText = Str
cmds.Connection = connn
cmds.Parameters.AddWithValue("@1", saf.Cells(0).Value.ToString)
cmds.Parameters.AddWithValue("@2", saf.Cells(1).Value.ToString)
cmds.Parameters.AddWithValue("@3", saf.Cells(2).Value.ToString)
cmds.Parameters.AddWithValue("@4", saf.Cells(3).Value.ToString)
cmds.Parameters.AddWithValue("@5", saf.Cells(4).Value.ToString)
cmds.Parameters.AddWithValue("@6", saf.Cells(5).Value.ToString)
cmds.ExecuteNonQuery()
cmds.Dispose()
connn.Close()
asd()
asd3()
End If
Next
مالحل بارك الله فيكم
المشاركات : 3,816
المواضيع 36
الإنتساب : Mar 2014
السمعة :
720
الشكر: 7238
تم شكره 6675 مرات في 3261 مشاركات
جرب استخدام الكود بهذا الشكل
كود :
For ii As Integer = 0 To DataGridView2.RowCount - 1
Dim Str As String = "insert into tsjel_subj(id_tsjel_subj,id_number,FirstName,name_dorh,number_dorh,subj) values (@1,@2,@3,@4,@5,@6)"
Dim cmds As New SqlCommand
If Not connn.State = ConnectionState.Open Then connn.Open()
cmds.Connection = connn
cmds.CommandText = Str
cmds.Connection = connn
cmds.Parameters.AddWithValue("@1", DataGridView2.Rows(ii).Cells(0).Value.ToString())
cmds.Parameters.AddWithValue("@2", DataGridView2.Rows(ii).Cells(1).Value.ToString())
cmds.Parameters.AddWithValue("@3", DataGridView2.Rows(ii).Cells(2).Value.ToString())
cmds.Parameters.AddWithValue("@4", DataGridView2.Rows(ii).Cells(3).Value.ToString())
cmds.Parameters.AddWithValue("@5", DataGridView2.Rows(ii).Cells(4).Value.ToString())
cmds.Parameters.AddWithValue("@6", DataGridView2.Rows(ii).Cells(5).Value.ToString())
cmds.ExecuteNonQuery()
cmds.Dispose()
connn.Close()
asd()
asd3()
Next
تحياتى لك
وتمنياتى لك التوفيق
المشاركات : 50
المواضيع 1
الإنتساب : Jun 2018
السمعة :
17
الشكر: 406
تم شكره 96 مرات في 52 مشاركات
يجب عدم وضع اسم عمود الترقيم التلقائي في الاضافة Insert
PHP كود :
Dim cmds As New SqlCommand( _ "INSERT INTO tsjel_subj(id_tsjel_subj, id_number, FirstName, name_dorh, number_dorh, subj) " & _ "VALUES (@id_tsjel_subj, @id_number, @FirstName, @name_dorh, @number_dorh, @subj) " _ , connn)
If connn.State <> ConnectionState.Open Then connn.Open() For Each saf As DataGridViewRow In DataGridView2.Rows If saf.IsNewRow Then Exit For cmds.Parameters.Clear() cmds.Parameters.AddWithValue("@id_tsjel_subj", saf.Cells(0).Value.ToString) cmds.Parameters.AddWithValue("@id_number", saf.Cells(1).Value.ToString) cmds.Parameters.AddWithValue("@FirstName", saf.Cells(2).Value.ToString) cmds.Parameters.AddWithValue("@name_dorh", saf.Cells(3).Value.ToString) cmds.Parameters.AddWithValue("@number_dorh", saf.Cells(4).Value.ToString) cmds.Parameters.AddWithValue("@subj", saf.Cells(5).Value.ToString) If cmds.ExecuteNonQuery() = 0 Then MsgBox("لم يتم حفظ السطر: " & saf.Index) Exit For End If Next connn.Close()
المشاركات : 3,816
المواضيع 36
الإنتساب : Mar 2014
السمعة :
720
الشكر: 7238
تم شكره 6675 مرات في 3261 مشاركات
(25-07-18, 12:37 PM)Done كتب : يجب عدم وضع اسم عمود الترقيم التلقائي في الاضافة Insert
PHP كود :
Dim cmds As New SqlCommand( _ "INSERT INTO tsjel_subj(id_tsjel_subj, id_number, FirstName, name_dorh, number_dorh, subj) " & _ "VALUES (@id_tsjel_subj, @id_number, @FirstName, @name_dorh, @number_dorh, @subj) " _ , connn)
If connn.State <> ConnectionState.Open Then connn.Open() For Each saf As DataGridViewRow In DataGridView2.Rows If saf.IsNewRow Then Exit For cmds.Parameters.Clear() cmds.Parameters.AddWithValue("@id_tsjel_subj", saf.Cells(0).Value.ToString) cmds.Parameters.AddWithValue("@id_number", saf.Cells(1).Value.ToString) cmds.Parameters.AddWithValue("@FirstName", saf.Cells(2).Value.ToString) cmds.Parameters.AddWithValue("@name_dorh", saf.Cells(3).Value.ToString) cmds.Parameters.AddWithValue("@number_dorh", saf.Cells(4).Value.ToString) cmds.Parameters.AddWithValue("@subj", saf.Cells(5).Value.ToString) If cmds.ExecuteNonQuery() = 0 Then MsgBox("لم يتم حفظ السطر: " & saf.Index) Exit For End If Next connn.Close()
احسن اخى Done
فى ردك بملاحظة هذه النقطة المهمة
واضافة لصاحب الموضوع لما تم اضافته من الاخ Done
حيث اذا كان الـ ID ترقيم تلقائي لا حاجة الى اضافته فى كود الادخال
واذا كان الترقيم يدوى دون تكرار
فيجب الانتباه لما هو الترقيم لا اعلم ما يعرض فى الصورة بسبب حجمها صغير فلا يمكننى الاطلاع عليها
فاذا كان الترقيم كلاهما 2 فى الصورة فسيقوم باضافة واحداً فقط ويجب ظهور رسالة خطاء عند ادخال الثاني
الا اذا كنت تستخدم Try لتجنب عرض رسالة الاخطاء
تحياتى للجميع
وتمنياتى لكم التوفيق
المشاركات : 54
المواضيع 13
الإنتساب : May 2017
السمعة :
1
الشكر: 166
تم شكره 81 مرات في 40 مشاركات
جزاكم الله خير جاري التجربة
المشاركات : 54
المواضيع 13
الإنتساب : May 2017
السمعة :
1
الشكر: 166
تم شكره 81 مرات في 40 مشاركات
26-07-18, 01:04 PM
(آخر تعديل لهذه المشاركة : 26-07-18, 01:05 PM {2} بواسطة dell.)
أخي Done وأخي elgokr
حل الأخ Done ممتاز وعمل معاي بأفضل حل
أشكر لكم جهودكم
المشاركات : 54
المواضيع 13
الإنتساب : May 2017
السمعة :
1
الشكر: 166
تم شكره 81 مرات في 40 مشاركات
أخواني معليش تعبتكم معاي .. في حالة التعديل يظهر لي خطاء
كود :
Dim cmds As New SqlCommand("UPDATE tsjel_subj SET [id_tsjel_subj] =?, [Password] =?, [id_number] =?, [FirstName] =?, [name_dorh] =?, [number_dorh] =?, [subj] =?", conn)
If connn.State <> ConnectionState.Open Then connn.Open()
For Each saf As DataGridViewRow In DataGridView1.Rows
If saf.IsNewRow Then Exit For
cmds.Parameters.Clear()
cmds.Parameters.AddWithValue("@id_tsjel_subj", saf.Cells(0).Value.ToString)
cmds.Parameters.AddWithValue("@Password", saf.Cells(1).Value.ToString)
cmds.Parameters.AddWithValue("@id_number", saf.Cells(2).Value.ToString)
cmds.Parameters.AddWithValue("@FirstName", saf.Cells(3).Value.ToString)
cmds.Parameters.AddWithValue("@name_dorh", saf.Cells(4).Value.ToString)
cmds.Parameters.AddWithValue("@number_dorh", saf.Cells(5).Value.ToString)
cmds.Parameters.AddWithValue("@subj", saf.Cells(6).Value.ToString)
cmds.ExecuteNonQuery()
Next
connn.Close()
MsgBox("تم الحفظ بنجاح", MsgBoxStyle.MsgBoxRight, "")
صورة الخطاء
المشاركات : 3,816
المواضيع 36
الإنتساب : Mar 2014
السمعة :
720
الشكر: 7238
تم شكره 6675 مرات في 3261 مشاركات
بخصوص التعديل
بعد الكلمة التالية Set
ستجد هذه الجملة
كود :
[id_tsjel_subj] = ?
قم بحذفها
ويكتفي ان تجعلها باخر كود الاستعلام لتصبح
كود :
WHERE [id_tsjel_subj] = ?
لان الاى دى فى التعديل لا يعدل
بل يتم الاستعانة به لاتمام تعديل البيانات التى تعمل الاى دى المطلوب
ثانياً سطر كود الاستعلام يجب ان يكون بداخل For وايضاً سطر التحقق من فتح واغلاق الـ connn
تحياتى لك
وتمنياتى لك التوفيق
المشاركات : 50
المواضيع 1
الإنتساب : Jun 2018
السمعة :
17
الشكر: 406
تم شكره 96 مرات في 52 مشاركات
26-07-18, 08:03 PM
(آخر تعديل لهذه المشاركة : 26-07-18, 08:04 PM {2} بواسطة Done.)
(26-07-18, 07:34 PM)dell كتب : أخواني معليش تعبتكم معاي .. في حالة التعديل يظهر لي خطاء
كود :
Dim cmds As New SqlCommand("UPDATE tsjel_subj SET [id_tsjel_subj] =?, [Password] =?, [id_number] =?, [FirstName] =?, [name_dorh] =?, [number_dorh] =?, [subj] =?", conn)
If connn.State <> ConnectionState.Open Then connn.Open()
For Each saf As DataGridViewRow In DataGridView1.Rows
If saf.IsNewRow Then Exit For
cmds.Parameters.Clear()
cmds.Parameters.AddWithValue("@id_tsjel_subj", saf.Cells(0).Value.ToString)
cmds.Parameters.AddWithValue("@Password", saf.Cells(1).Value.ToString)
cmds.Parameters.AddWithValue("@id_number", saf.Cells(2).Value.ToString)
cmds.Parameters.AddWithValue("@FirstName", saf.Cells(3).Value.ToString)
cmds.Parameters.AddWithValue("@name_dorh", saf.Cells(4).Value.ToString)
cmds.Parameters.AddWithValue("@number_dorh", saf.Cells(5).Value.ToString)
cmds.Parameters.AddWithValue("@subj", saf.Cells(6).Value.ToString)
cmds.ExecuteNonQuery()
Next
connn.Close()
MsgBox("تم الحفظ بنجاح", MsgBoxStyle.MsgBoxRight, "")
الخطأ يشير الى ان الاتصال مغلق والسبب أن لديك متغيرا للاتصال احدهم conn والاخر connn،
ثم اعتمدت على conn في الامر command في حين أنك تفتح الاتصال connn
النقطة الثانية التي ستواجهك هي
قاعدة بيانات SQLServer لا يتعامل مع ؟ lمثل الاكسس،
بل لابد من تسمية البارامترات
النقطة الخيرة والطيرة التي أغفلتها هي ما ذكرهاالاخ algokr وهي يجب تحديد السطر ب WHERE والذي تريد التعديل حتى لا تقوم بتغيير جميع اسطر الجدول بنفس البيانات
PHP كود :
Dim cmds As New SqlCommand("UPDATE tsjel_subj SET [Password] [email protected], [id_number] [email protected]_number, [FirstName] [email protected], [name_dorh] [email protected]_dorh, [number_dorh] [email protected]_dorh, [subj] [email protected] WHERE [id_tsjel_subj] [email protected]_tsjel_subj ", connn)
If connn.State <> ConnectionState.Open Then connn.Open() For Each saf As DataGridViewRow In DataGridView1.Rows If saf.IsNewRow Then Exit For cmds.Parameters.Clear() cmds.Parameters.AddWithValue("@id_tsjel_subj", saf.Cells(0).Value.ToString) cmds.Parameters.AddWithValue("@Password", saf.Cells(1).Value.ToString) cmds.Parameters.AddWithValue("@id_number", saf.Cells(2).Value.ToString) cmds.Parameters.AddWithValue("@FirstName", saf.Cells(3).Value.ToString) cmds.Parameters.AddWithValue("@name_dorh", saf.Cells(4).Value.ToString) cmds.Parameters.AddWithValue("@number_dorh", saf.Cells(5).Value.ToString) cmds.Parameters.AddWithValue("@subj", saf.Cells(6).Value.ToString) cmds.ExecuteNonQuery() Next connn.Close()
MsgBox("تم الحفظ بنجاح", MsgBoxStyle.MsgBoxRight, "")
احذف المتغير conn وليكن لديك متغير واحد للاتصال
المشاركات : 6,926
المواضيع 740
الإنتساب : Sep 2013
السمعة :
791
الشكر: 12386
تم شكره 17454 مرات في 3880 مشاركات
26-07-18, 08:04 PM
(آخر تعديل لهذه المشاركة : 26-07-18, 08:15 PM {2} بواسطة سعود.)
ركز بالصورة وهي خطا بكود التحقق من الاتصال
اوووووووووه معلش!!!
يجب علي انا ان اتاكد
=====* التوقيع *======
=================
|