المشاركات : 481
المواضيع 35
الإنتساب : Oct 2013
السمعة :
6
الشكر: 9709
تم شكره 1454 مرات في 137 مشاركات
19-08-15, 10:19 PM
(آخر تعديل لهذه المشاركة : 19-08-15, 10:21 PM {2} بواسطة مبرمج بلا حدود.)
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
اخوتي احبتي في الله
اساتذتي الكرام حياكم الله وبياكم وللجنة سهل الله خطاي وخطاكم
وفقكم الله
لدي سؤال حول تحديث بيانات اكثر من جدول داخل قاعدة بيانات من نوع اكسس ، انا لدي كود لقاعدة بيانات اكسس 2003 والكود عائد للاستاذ (ابو ايهاب) جزاه الله عنا خير وجعله الله صدقة جارية له وانا فقط غيرت فيه
هذا الكود
'تحديث قاعدة البيانات
con.Open()
dss.Clear()
da.Fill(dss, "T_Information")
con.Close()
حيث dss تمثل الداتا سيت ، والـ da داتا ادبتر
طيب اذا لدينا اكثر من جدول مثلاً جدولين او ثلاثة ماهو الكود لعمل ذلكـ
جزاكم الله خير وباركـ الله فيكم
حفظكم الله
المشاركات : 237
المواضيع 9
الإنتساب : May 2015
السمعة :
43
الشكر: 3583
تم شكره 2753 مرات في 170 مشاركات
سلام
هذا ابسط مثال على اساس لديك متغير ID فيه رقم السجل ومتطابق في كل جدول وهنا افترضت ان الجداول مترابطه
كود :
Dim connectionString As String = "Provider=.......الى اخره"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using con As New OleDbConnection(connectionString)
con.Open()
Dim tran As OleDbTransaction
tran = con.BeginTransaction
Using cmd As New OleDbCommand(Nothing, con)
cmd.Transaction = tran
cmd.CommandText = "UPDATE [table1] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update1 As Integer = cmd.ExecuteNonQuery()
cmd.CommandText = "UPDATE [table2] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update2 As Integer = cmd.ExecuteNonQuery()
cmd.CommandText = "UPDATE [table3] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update3 As Integer = cmd.ExecuteNonQuery()
If (update1 > 0) And (update2 > 0) And (update3 > 0) Then
tran.Commit()
MsgBox("تمت الاضافة")
Else
tran.Rollback()
MsgBox("فشلت الاضافة")
End If
End Using
con.Close()
End Using
End Sub
موفقين
المشاركات : 481
المواضيع 35
الإنتساب : Oct 2013
السمعة :
6
الشكر: 9709
تم شكره 1454 مرات في 137 مشاركات
(19-08-15, 10:42 PM)الطالب كتب : سلام
هذا ابسط مثال على اساس لديك متغير ID فيه رقم السجل ومتطابق في كل جدول وهنا افترضت ان الجداول مترابطه
كود :
Dim connectionString As String = "Provider=.......الى اخره"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using con As New OleDbConnection(connectionString)
con.Open()
Dim tran As OleDbTransaction
tran = con.BeginTransaction
Using cmd As New OleDbCommand(Nothing, con)
cmd.Transaction = tran
cmd.CommandText = "UPDATE [table1] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update1 As Integer = cmd.ExecuteNonQuery()
cmd.CommandText = "UPDATE [table2] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update2 As Integer = cmd.ExecuteNonQuery()
cmd.CommandText = "UPDATE [table3] SET ([col1]=?, [col2]=? WHERE [id]=? "
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@col1", txt_Name.Text.Trim)
cmd.Parameters.AddWithValue("@col2", txt_phone.Text.Trim)
cmd.Parameters.AddWithValue("@id", ID)
Dim update3 As Integer = cmd.ExecuteNonQuery()
If (update1 > 0) And (update2 > 0) And (update3 > 0) Then
tran.Commit()
MsgBox("تمت الاضافة")
Else
tran.Rollback()
MsgBox("فشلت الاضافة")
End If
End Using
con.Close()
End Using
End Sub
موفقين
وعليكم السلام ورحمة الله وبركاته
جزاكـ الله خير وباركـ الله فيكـ
العفو اخي واستاذي الفاضل ربي يحفظكـ
انا لم اقصد تحديث يعني تعديل
انا قصدت تحديث مثل الرفريش يعني انعاش
والجدولين غير مرتطبين جزاكـ الله الجنة
اتمنى تكون وصلت الفكرة ربي يحفظكـ
وعذرا لهذه الخطأ الحاصل من قبلي في عدم التوضيح
ارجوا المعذرة
باركـ الله فيكـ
المشاركات : 328
المواضيع 22
الإنتساب : Feb 2015
السمعة :
202
الشكر: 8726
تم شكره 11088 مرات في 536 مشاركات
إليك هذا المثال أخي العزيز
PHP كود :
Private conn As OleDbConnection = New OleDbConnection(connStr) conn.Open() Dim str As String = "SELECT * FROM Heading" Dim da1 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) Dim ds1 As DataSet = New DataSet("Heading") da1.Fill(ds1, "Heading") Dim ds2 As DataSet = New DataSet("SubHead") str = "SELECT * FROM SubHeading" Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) da2.Fill(ds2, "SubHeading") Dim ds3 As DataSet = New DataSet("Link") str = "SELECT * FROM Link" Dim da3 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) da3.Fill(ds3, "Link") ds1.Merge(ds2) ds1.Merge(ds3) dataGrid1.DataSource = ds1.DefaultViewManager conn.Close()
أتمنى لك التوفيق
واعبد ربك حتى يأتيك اليقين
المشاركات : 481
المواضيع 35
الإنتساب : Oct 2013
السمعة :
6
الشكر: 9709
تم شكره 1454 مرات في 137 مشاركات
(19-08-15, 11:14 PM)khodor1985 كتب : إليك هذا المثال أخي العزيز
PHP كود :
Private conn As OleDbConnection = New OleDbConnection(connStr) conn.Open() Dim str As String = "SELECT * FROM Heading" Dim da1 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) Dim ds1 As DataSet = New DataSet("Heading") da1.Fill(ds1, "Heading") Dim ds2 As DataSet = New DataSet("SubHead") str = "SELECT * FROM SubHeading" Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) da2.Fill(ds2, "SubHeading") Dim ds3 As DataSet = New DataSet("Link") str = "SELECT * FROM Link" Dim da3 As OleDbDataAdapter = New OleDbDataAdapter(str, conn) da3.Fill(ds3, "Link") ds1.Merge(ds2) ds1.Merge(ds3) dataGrid1.DataSource = ds1.DefaultViewManager conn.Close()
أتمنى لك التوفيق
السلام عليكم ورحمة الله وبركاته
جزاكـ الله خير اخي وباركـ الله فيكـ ربي يحفظكـ
لدي عدة استفسارات :
هل تقصد Heading اسم الجدول الاول ، والـ SubHeading اسم الجدول الثاني .
وهناكـ متغيرات لم اعرف فائدتهن (اعذرني على قصر معرفتي باركـ الله فيكـ)
انا هذه طريقة ربطا لقاعدة لدي
PHP كود :
Public constr As String = "provider=microsoft.ace.oledb.12.0; data source=|datadirectory|\DB_Pharmacy.accdb;jet oledb:database password=ph2015" Public con As New OleDbConnection(constr)
المشاركات : 328
المواضيع 22
الإنتساب : Feb 2015
السمعة :
202
الشكر: 8726
تم شكره 11088 مرات في 536 مشاركات
نعم صحيح فقد اجتزءت من الكود
ولكن ما تفكر به صحيح
واعبد ربك حتى يأتيك اليقين
المشاركات : 481
المواضيع 35
الإنتساب : Oct 2013
السمعة :
6
الشكر: 9709
تم شكره 1454 مرات في 137 مشاركات
(19-08-15, 11:32 PM)khodor1985 كتب : نعم صحيح فقد اجتزءت من الكود
ولكن ما تفكر به صحيح
جزاكـ الله خير وباركـ الله فيكـ
ربي يعزكـ ويعلي منزلتكـ
جاري التجربة وعائد بعد ذلكـ ان شاءالله
طيب سؤال قبل التجربة (اعذرني على كثرة اسئلتي)
انا استخدم con هل استخدمة هو ام ما كتبته انت اقصد conn (اعرف انه مجرب تعريف متغير ولكن للاطمئنان)
انا رابط القاعدة عن طريق constr هل استخدمه هو اسم ما تبته حضرتكـ connstr
واعتقد هذه لن احتاجها
ds1.Merge(ds2)
ds1.Merge(ds3)
dataGrid1.DataSource = ds1.DefaultViewManager
لانها تخص الداتا غريد
بإنتظار ملاحظاتكم حفظكـ الله
المشاركات : 328
المواضيع 22
الإنتساب : Feb 2015
السمعة :
202
الشكر: 8726
تم شكره 11088 مرات في 536 مشاركات
19-08-15, 11:54 PM
(آخر تعديل لهذه المشاركة : 20-08-15, 12:06 AM {2} بواسطة khodor1985.)
نعم صحيح ما في مشكلة أخي العزيز
ملاحظة أخي العزيز
المنطق البرمجي يقول أن كل DataAdapter يغذي DataTable واحد فقط
فإذا تعددت الجداول فلا بد من إنشاء DataAdapter لكل DataTable
ما هي وظيفة DataAdapter ؟
إستقبال البيانات من قاعدة البيانات وتغذية DataTable أو DataSet أو التأثير على قاعدة البيانات من خلال SqlCommand، فلا يمكن للـ DataAdapter أن يقوم بالتأثير على قاعدة البيانات إلا من خلال أمر وهذا الأمر يتضمن الجملة التنفيذية كـ Insert,Delete,Update.
وعليه، لا بد من إنشاء أكثر من DataAdapter في حالة تعدد DataTable.
أتمنى لك التوفيق
واعبد ربك حتى يأتيك اليقين
المشاركات : 481
المواضيع 35
الإنتساب : Oct 2013
السمعة :
6
الشكر: 9709
تم شكره 1454 مرات في 137 مشاركات
(19-08-15, 11:54 PM)khodor1985 كتب : نعم صحيح ما في مشكلة أخي العزيز
ملاحظة أخي العزيز
المنطق البرمجي يقول أن كل DataAdapter يغذي DataTable واحد فقط
فإذا تعددت الجداول فلا بد من إنشاء DataAdapter لكل DataTable
ما هي وظيفة DataAdapter ؟
إستقبال البيانات من قاعدة البيانات وتغذية DataTable أو DataSet أو التأثير على قاعدة البيانات من خلال SqlCommand، فلا يمكن للـ DataAdapter أن يقوم بالتأثير على قاعدة البيانات إلا من خلال أمر وهذا الأمر يتضمن الجملة التنفيذية كـ Insert,Delete,Update.
وعليه، لا بد من إنشاء أكثر من DataAdapter في حالة تعدد DataTable.
أتمنى لك التوفيق
جزاكـ الله خير على التوضيح الان وضحت اكثر (اقولكـ شي الصراحة لم اكن اعرف معناها الا الان ) الله يجزيكـ خير عني وعن المسلمين
باركـ الله فيكـ ، وابشركـ الكود يعمل والحمدلله تمام التمام جزاكـ ربي الجنة
الحمدلله الذي بنعمته تتم الصالحات
بقى لدي استفسار ، استفساري لتلافي المشاكل التي قد تحدث
هل استبدل con.open
بهذا الكود
If con.State = ConnectionState.Closed Then
con.Open()
End If
لو تعتقد لا يوجد داعي لهذا
المشاركات : 7,391
المواضيع 803
الإنتساب : Sep 2013
السمعة :
846
الشكر: 13249
تم شكره 18795 مرات في 4414 مشاركات
إستخدم للتحديث اوامر الاتصال المتصل بحيث يقرا معرف كل عمود بشكل مستقل عن العمود المربوط.
|