المشاركات : 55
المواضيع 15
الإنتساب : May 2017
السمعة :
1
الشكر: 168
تم شكره 84 مرات في 41 مشاركات
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,771
المواضيع 36
الإنتساب : Mar 2014
السمعة :
725
الشكر: 7108
تم شكره 6714 مرات في 3265 مشاركات
جرب استخدام الكود بهذا الشكل
كود :
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
الشكر: 394
تم شكره 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,771
المواضيع 36
الإنتساب : Mar 2014
السمعة :
725
الشكر: 7108
تم شكره 6714 مرات في 3265 مشاركات
(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 لتجنب عرض رسالة الاخطاء
تحياتى للجميع
وتمنياتى لكم التوفيق
المشاركات : 55
المواضيع 15
الإنتساب : May 2017
السمعة :
1
الشكر: 168
تم شكره 84 مرات في 41 مشاركات
جزاكم الله خير جاري التجربة
المشاركات : 55
المواضيع 15
الإنتساب : May 2017
السمعة :
1
الشكر: 168
تم شكره 84 مرات في 41 مشاركات
26-07-18, 01:04 PM
(آخر تعديل لهذه المشاركة : 26-07-18, 01:05 PM {2} بواسطة dell.)
أخي Done وأخي elgokr
حل الأخ Done ممتاز وعمل معاي بأفضل حل
أشكر لكم جهودكم
المشاركات : 55
المواضيع 15
الإنتساب : May 2017
السمعة :
1
الشكر: 168
تم شكره 84 مرات في 41 مشاركات
أخواني معليش تعبتكم معاي .. في حالة التعديل يظهر لي خطاء
كود :
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,771
المواضيع 36
الإنتساب : Mar 2014
السمعة :
725
الشكر: 7108
تم شكره 6714 مرات في 3265 مشاركات
بخصوص التعديل
بعد الكلمة التالية Set
ستجد هذه الجملة
كود :
[id_tsjel_subj] = ?
قم بحذفها
ويكتفي ان تجعلها باخر كود الاستعلام لتصبح
كود :
WHERE [id_tsjel_subj] = ?
لان الاى دى فى التعديل لا يعدل
بل يتم الاستعانة به لاتمام تعديل البيانات التى تعمل الاى دى المطلوب
ثانياً سطر كود الاستعلام يجب ان يكون بداخل For وايضاً سطر التحقق من فتح واغلاق الـ connn
تحياتى لك
وتمنياتى لك التوفيق
المشاركات : 50
المواضيع 1
الإنتساب : Jun 2018
السمعة :
17
الشكر: 394
تم شكره 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] =@Password, [id_number] =@id_number, [FirstName] =@FirstName, [name_dorh] =@name_dorh, [number_dorh] =@number_dorh, [subj] =@subj WHERE [id_tsjel_subj] =@id_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 وليكن لديك متغير واحد للاتصال
المشاركات : 7,397
المواضيع 802
الإنتساب : Sep 2013
السمعة :
853
الشكر: 13167
تم شكره 18826 مرات في 4421 مشاركات
26-07-18, 08:04 PM
(آخر تعديل لهذه المشاركة : 26-07-18, 08:15 PM {2} بواسطة سعود.)
ركز بالصورة وهي خطا بكود التحقق من الاتصال
اوووووووووه معلش!!!
يجب علي انا ان اتاكد
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
|