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

نسخة كاملة : مشكلة حفظ تعديلات الداتاقريد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

ارجوا المساعدة لو سمحتوا .....

كيف يمكن حفظ تعديلات الداتاقريد فيوا  علما انه تمت تعبئة الداتا قريد من خلال استعلام من قاعدة البيانات ( من مجموعة جداول وليس جدول واحد )
حاولت استخدم هذا الكود

كود :
If ds.HasChanges = True Then
           Me.Validate()
           CmdB.DataAdapter = da
           'ds.AcceptChanges()
           da.Update(ds, "showd")

           MsgBox("تم حفظ البيانات بنجاح", MsgBoxStyle.Information, "حفظ")
           ' Exit Sub
       Else
           MsgBox("لم تقم بأي تغيرات", MsgBoxStyle.Exclamation, "حفظ")
       End If
لكن تظهر هذه الرسالة :
Dynamic SQL generation is not supported against multiple base tables.
إن توليد SQL بشكل ديناميكي غير معتمد مقابل العديد من الجداول الأساسية.
ممكن تستخدم طريقة اخرى .. مثلا تعرض الصف في مربعات نص وتحدث
لجات لحيلة بسيطة وهي بعد ان يتم فحص هل تم تحديث الداتاست اعمل  For لكل الصفوف واقوم بفحص  هل  الحقل بالداتاجريد مثلها في الجدول عن طريقة دالة بسيط استعلام
ان كنت تريد المثال اكتب رد
من خلال بحثي في الانترنت وجدت موضوع في هذا الشأن إلا أني لم استطيع فهمة .... لو حد يستطيع مساعدتي اكون شاكرا له
الموضوع في الرابط التالي:
https://msdn.microsoft.com/en-us/library/xzb1zw3x.aspx
شكرأ أخي سعود على تتفاعلك الطيب معي و أعتذر عن التأخر في الرد

أكيد أريد المثال و انا مستنية بفارغ الصبر
المثال حذفتهSmile لكن ماعليك اسوي واحد جديد لان الفكرة لسى موجودة
انتظر...
كود :
Public Class Form1
   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
   Dim con As New OleDb.OleDbConnection(str)

   Dim sql As String = "select tb1.tid,tb1.tn,tb2.tid,tb2.mobile from tb1,tb2 where tb2.tb1tid=tb1.tid"
   Dim ds As DataSet
   Dim da As OleDb.OleDbDataAdapter
   Dim cm As OleDb.OleDbCommandBuilder

   Private Sub conon()
       If con.State = ConnectionState.Closed Then
           con.Open()
       End If
   End Sub
   Private Function isfound(ByVal tb As String, ByVal tn As String) As Boolean
       Dim cm As New OleDb.OleDbCommand("", con)
       cm.Parameters.Clear()



       Select Case tb
           Case "tb1"
               cm.CommandText = "select count(tid) from tb1 where tn='" & tn & "'"

               conon()
               If cm.ExecuteScalar > 0 Then
                   Return True
               Else
                   Return False
               End If


           Case "tb2"
               cm.CommandText = "select count(tid) from tb2 where mobile='" & tn & "'"

               conon()
               If cm.ExecuteScalar > 0 Then
                   Return True
               Else
                   Return False
               End If

           Case Else
               Return False
       End Select

   End Function





   Private Sub gd()
       dg.DataSource = Nothing
       dg.Rows.Clear()
       ds = New DataSet
       da = New OleDb.OleDbDataAdapter(sql, con)
       cm = New OleDb.OleDbCommandBuilder(da)


       da.Fill(ds, "tb1")
       '  da.Fill(ds, "tb2")

       dg.DataSource = ds
       dg.DataMember = "tb1"

       dg.Columns(0).HeaderText = "م"
       dg.Columns(1).HeaderText = "الاسم"

       '  dg.Columns(2).Visible = False
       dg.Columns(3).HeaderText = "الجوال"
   End Sub
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       gd()
   End Sub

   Private Function fupdate(ByVal tb As String, ByVal tn As String, ByVal mo As String, ByVal id As Integer) As Boolean
       Dim cm As New OleDb.OleDbCommand("", con)
       cm.Parameters.Clear()
       conon()
       Select Case tb
           Case "tb1"
               cm.CommandText = "update tb1 set tn=@tn where tid=@tid"
               cm.Parameters.AddWithValue("@tn", tn)
               cm.Parameters.AddWithValue("@tid", id)

               Try
                   cm.ExecuteNonQuery()
                   Return True
               Catch ex As Exception
                   MsgBox(Err.Description)
                   Return False
               End Try


           Case "tb2"

               cm.CommandText = "update tb2 set mobile=@mobile where tid=@tid"
               cm.Parameters.AddWithValue("@mobile", mo)
               cm.Parameters.AddWithValue("@tid", id)

               Try
                   cm.ExecuteNonQuery()
                   Return True
               Catch ex As Exception
                   MsgBox(Err.Description)
                   Return False
               End Try
           Case Else
               Return False
       End Select


   End Function


   Private Sub btn_update_Click(sender As Object, e As EventArgs) Handles btn_update.Click
       For r = 0 To dg.Rows.Count - 2
           Dim tn As String = dg.Rows(r).Cells(1).Value
           If fupdate("tb1", tn, Nothing, dg.Rows(r).Cells(0).Value) Then
               MsgBox("تم حفظ الاسم")
           End If





           Dim mo As String = dg.Rows(r).Cells(3).Value
           If fupdate("tb2", Nothing, mo, dg.Rows(r).Cells(2).Value) Then
               MsgBox("تم حفظ الجوال")
           End If


       Next
   End Sub
End Class

هذا الكلاس و dg هي daatgridview
(24-04-15, 08:08 PM)سعود كتب : [ -> ]
كود :
Public Class Form1
   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
   Dim con As New OleDb.OleDbConnection(str)

   Dim sql As String = "select tb1.tid,tb1.tn,tb2.tid,tb2.mobile from tb1,tb2 where tb2.tb1tid=tb1.tid"
   Dim ds As DataSet
   Dim da As OleDb.OleDbDataAdapter
   Dim cm As OleDb.OleDbCommandBuilder

   Private Sub conon()
       If con.State = ConnectionState.Closed Then
           con.Open()
       End If
   End Sub
   Private Function isfound(ByVal tb As String, ByVal tn As String) As Boolean
       Dim cm As New OleDb.OleDbCommand("", con)
       cm.Parameters.Clear()



       Select Case tb
           Case "tb1"
               cm.CommandText = "select count(tid) from tb1 where tn='" & tn & "'"

               conon()
               If cm.ExecuteScalar > 0 Then
                   Return True
               Else
                   Return False
               End If


           Case "tb2"
               cm.CommandText = "select count(tid) from tb2 where mobile='" & tn & "'"

               conon()
               If cm.ExecuteScalar > 0 Then
                   Return True
               Else
                   Return False
               End If

           Case Else
               Return False
       End Select

   End Function





   Private Sub gd()
       dg.DataSource = Nothing
       dg.Rows.Clear()
       ds = New DataSet
       da = New OleDb.OleDbDataAdapter(sql, con)
       cm = New OleDb.OleDbCommandBuilder(da)


       da.Fill(ds, "tb1")
       '  da.Fill(ds, "tb2")

       dg.DataSource = ds
       dg.DataMember = "tb1"

       dg.Columns(0).HeaderText = "م"
       dg.Columns(1).HeaderText = "الاسم"

       '  dg.Columns(2).Visible = False
       dg.Columns(3).HeaderText = "الجوال"
   End Sub
   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       gd()
   End Sub

   Private Function fupdate(ByVal tb As String, ByVal tn As String, ByVal mo As String, ByVal id As Integer) As Boolean
       Dim cm As New OleDb.OleDbCommand("", con)
       cm.Parameters.Clear()
       conon()
       Select Case tb
           Case "tb1"
               cm.CommandText = "update tb1 set tn=@tn where tid=@tid"
               cm.Parameters.AddWithValue("@tn", tn)
               cm.Parameters.AddWithValue("@tid", id)

               Try
                   cm.ExecuteNonQuery()
                   Return True
               Catch ex As Exception
                   MsgBox(Err.Description)
                   Return False
               End Try


           Case "tb2"

               cm.CommandText = "update tb2 set mobile=@mobile where tid=@tid"
               cm.Parameters.AddWithValue("@mobile", mo)
               cm.Parameters.AddWithValue("@tid", id)

               Try
                   cm.ExecuteNonQuery()
                   Return True
               Catch ex As Exception
                   MsgBox(Err.Description)
                   Return False
               End Try
           Case Else
               Return False
       End Select


   End Function


   Private Sub btn_update_Click(sender As Object, e As EventArgs) Handles btn_update.Click
       For r = 0 To dg.Rows.Count - 2
           Dim tn As String = dg.Rows(r).Cells(1).Value
           If fupdate("tb1", tn, Nothing, dg.Rows(r).Cells(0).Value) Then
               MsgBox("تم حفظ الاسم")
           End If





           Dim mo As String = dg.Rows(r).Cells(3).Value
           If fupdate("tb2", Nothing, mo, dg.Rows(r).Cells(2).Value) Then
               MsgBox("تم حفظ الجوال")
           End If


       Next
   End Sub
End Class

هذا الكلاس و dg هي daatgridview
شكراً أخي وأعرني على عدم الرد رغم انه بعد سنوات لكن أعذرني أخي وطريقتك جاى وقتها وراح أطبقها الأن