المشاركات : 82
المواضيع 18
الإنتساب : Sep 2013
السمعة :
0
الشكر: 185
تم شكره 31 مرات في 15 مشاركات
السلام عليكم
ارجوا المساعدة لو سمحتوا .....
كيف يمكن حفظ تعديلات الداتاقريد فيوا علما انه تمت تعبئة الداتا قريد من خلال استعلام من قاعدة البيانات ( من مجموعة جداول وليس جدول واحد )
حاولت استخدم هذا الكود
كود :
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.
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18794 مرات في 4413 مشاركات
إن توليد SQL بشكل ديناميكي غير معتمد مقابل العديد من الجداول الأساسية.
ممكن تستخدم طريقة اخرى .. مثلا تعرض الصف في مربعات نص وتحدث
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18794 مرات في 4413 مشاركات
لجات لحيلة بسيطة وهي بعد ان يتم فحص هل تم تحديث الداتاست اعمل For لكل الصفوف واقوم بفحص هل الحقل بالداتاجريد مثلها في الجدول عن طريقة دالة بسيط استعلام
ان كنت تريد المثال اكتب رد
المشاركات : 82
المواضيع 18
الإنتساب : Sep 2013
السمعة :
0
الشكر: 185
تم شكره 31 مرات في 15 مشاركات
من خلال بحثي في الانترنت وجدت موضوع في هذا الشأن إلا أني لم استطيع فهمة .... لو حد يستطيع مساعدتي اكون شاكرا له
الموضوع في الرابط التالي:
https://msdn.microsoft.com/en-us/library/xzb1zw3x.aspx
المشاركات : 82
المواضيع 18
الإنتساب : Sep 2013
السمعة :
0
الشكر: 185
تم شكره 31 مرات في 15 مشاركات
شكرأ أخي سعود على تتفاعلك الطيب معي و أعتذر عن التأخر في الرد
أكيد أريد المثال و انا مستنية بفارغ الصبر
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18794 مرات في 4413 مشاركات
المثال حذفته لكن ماعليك اسوي واحد جديد لان الفكرة لسى موجودة
انتظر...
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18794 مرات في 4413 مشاركات
كود :
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
المشاركات : 82
المواضيع 18
الإنتساب : Sep 2013
السمعة :
0
الشكر: 185
تم شكره 31 مرات في 15 مشاركات
(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
شكراً أخي وأعرني على عدم الرد رغم انه بعد سنوات لكن أعذرني أخي وطريقتك جاى وقتها وراح أطبقها الأن
|