منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طريقة نقل المعلومات من DataGridView1 إلى DataGridView2 والحفظ
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله وبركاته

أخواني الكرام لدي 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
 

مالحل بارك الله فيكم
جرب استخدام الكود بهذا الشكل
كود :
       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


تحياتى لك
وتمنياتى لك التوفيق
يجب عدم وضع اسم عمود الترقيم التلقائي في الاضافة 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() 
(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 لتجنب عرض رسالة الاخطاء

تحياتى للجميع
وتمنياتى لكم التوفيق
جزاكم الله خير جاري التجربة
أخي Done  وأخي  elgokr


حل الأخ  Done   ممتاز وعمل معاي بأفضل حل

أشكر لكم جهودكم
أخواني معليش تعبتكم معاي .. في حالة التعديل يظهر لي خطاء

كود :
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, "")

صورة الخطاء

بخصوص التعديل
بعد الكلمة التالية Set
ستجد هذه الجملة
كود :
[id_tsjel_subj] = ?

قم بحذفها 
ويكتفي ان تجعلها باخر كود الاستعلام لتصبح
كود :
WHERE [id_tsjel_subj] = ?

لان الاى دى فى التعديل لا يعدل
بل يتم الاستعانة به لاتمام تعديل البيانات التى تعمل الاى دى المطلوب

ثانياً سطر كود الاستعلام يجب ان يكون بداخل For وايضاً سطر التحقق من فتح واغلاق الـ connn


تحياتى لك
وتمنياتى لك التوفيق
(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 وليكن لديك متغير واحد للاتصال

ركز بالصورة وهي خطا بكود التحقق من الاتصال

اوووووووووه معلش!!!
يجب علي  انا ان اتاكدSad
الصفحات : 1 2