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

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

السلام عليكم ورحمة الله وبركاته 

اخوتي احبتي في الله 
اساتذتي الكرام حياكم الله وبياكم وللجنة سهل الله خطاي وخطاكم 
وفقكم الله 

لدي سؤال حول تحديث بيانات اكثر من جدول داخل قاعدة بيانات من نوع اكسس ، انا لدي كود لقاعدة بيانات اكسس 2003 والكود عائد للاستاذ (ابو ايهاب) جزاه الله عنا خير وجعله الله صدقة جارية له وانا فقط غيرت فيه
هذا الكود 

'تحديث قاعدة البيانات
con.Open()
dss.Clear()
da.Fill(dss, "T_Information")
con.Close()

حيث dss تمثل الداتا سيت ، والـ da داتا ادبتر
طيب اذا لدينا اكثر من جدول مثلاً جدولين او ثلاثة ماهو الكود لعمل ذلكـ 

جزاكم الله خير وباركـ الله فيكم
حفظكم الله
سلام

هذا ابسط مثال على اساس لديك متغير 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

موفقين
(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

موفقين

وعليكم السلام ورحمة الله وبركاته 
جزاكـ الله خير وباركـ الله فيكـ 
العفو اخي واستاذي الفاضل ربي يحفظكـ 
انا لم اقصد تحديث يعني تعديل  Blush
انا قصدت تحديث مثل الرفريش يعني انعاش  Angel
والجدولين غير مرتطبين جزاكـ الله الجنة
اتمنى تكون وصلت الفكرة ربي يحفظكـ

وعذرا لهذه الخطأ الحاصل من قبلي في عدم التوضيح 
ارجوا المعذرة 
باركـ الله فيكـ
إليك هذا المثال أخي العزيز
PHP كود :
Private conn As OleDbConnection = New OleDbConnection(connStr)
conn.Open()
Dim str As String "SELECT * FROM Heading"
Dim da1 As OleDbDataAdapter = New OleDbDataAdapter(strconn)
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(strconn)
da2.Fill(ds2"SubHeading")
Dim ds3 As DataSet = New DataSet("Link")
str "SELECT * FROM Link"
Dim da3 As OleDbDataAdapter = New OleDbDataAdapter(strconn)
da3.Fill(ds3"Link")
ds1.Merge(ds2)
ds1.Merge(ds3)
dataGrid1.DataSource ds1.DefaultViewManager
conn
.Close() 
أتمنى لك التوفيق
(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(strconn)
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(strconn)
da2.Fill(ds2"SubHeading")
Dim ds3 As DataSet = New DataSet("Link")
str "SELECT * FROM Link"
Dim da3 As OleDbDataAdapter = New OleDbDataAdapter(strconn)
da3.Fill(ds3"Link")
ds1.Merge(ds2)
ds1.Merge(ds3)
dataGrid1.DataSource ds1.DefaultViewManager
conn
.Close() 
أتمنى لك التوفيق

السلام عليكم ورحمة الله وبركاته 
جزاكـ الله خير اخي وباركـ الله فيكـ ربي يحفظكـ 
لدي عدة استفسارات :Smile
هل تقصد 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
نعم صحيح فقد اجتزءت من الكود
ولكن ما تفكر به صحيح
(19-08-15, 11:32 PM)khodor1985 كتب : [ -> ]نعم صحيح فقد اجتزءت من الكود
ولكن ما تفكر به صحيح

جزاكـ الله خير وباركـ الله فيكـ 
ربي يعزكـ ويعلي منزلتكـ 

جاري التجربة وعائد بعد ذلكـ ان شاءالله 
طيب سؤال قبل التجربة (اعذرني على كثرة اسئلتي)
انا استخدم con  هل استخدمة هو ام ما كتبته انت اقصد conn (اعرف انه مجرب تعريف متغير ولكن للاطمئنان)

انا رابط القاعدة عن طريق constr هل استخدمه هو اسم ما تبته حضرتكـ connstr
واعتقد هذه لن احتاجها 
ds1.Merge(ds2)
ds1.Merge(ds3)
dataGrid1.DataSource ds1.DefaultViewManager
لانها تخص الداتا غريد 
بإنتظار ملاحظاتكم حفظكـ الله 
نعم صحيح ما في مشكلة أخي العزيز

ملاحظة أخي العزيز
المنطق البرمجي يقول أن كل DataAdapter يغذي DataTable واحد فقط
فإذا تعددت الجداول فلا بد من إنشاء DataAdapter لكل DataTable

ما هي وظيفة DataAdapter ؟
إستقبال البيانات من قاعدة البيانات وتغذية DataTable أو DataSet أو التأثير على قاعدة البيانات من خلال SqlCommand، فلا يمكن للـ DataAdapter أن يقوم بالتأثير على قاعدة البيانات إلا من خلال أمر وهذا الأمر يتضمن الجملة التنفيذية كـ Insert,Delete,Update.

وعليه، لا بد من إنشاء أكثر من DataAdapter في حالة تعدد DataTable.
أتمنى لك التوفيق
(19-08-15, 11:54 PM)khodor1985 كتب : [ -> ]نعم صحيح ما في مشكلة أخي العزيز

ملاحظة أخي العزيز
المنطق البرمجي يقول أن كل DataAdapter يغذي DataTable واحد فقط
فإذا تعددت الجداول فلا بد من إنشاء DataAdapter لكل DataTable

ما هي وظيفة DataAdapter ؟
إستقبال البيانات من قاعدة البيانات وتغذية  DataTable أو  DataSet أو التأثير على قاعدة البيانات من خلال SqlCommand، فلا يمكن للـ DataAdapter أن يقوم بالتأثير على قاعدة البيانات إلا من خلال أمر وهذا الأمر يتضمن الجملة التنفيذية كـ Insert,Delete,Update.

وعليه، لا بد من إنشاء أكثر من DataAdapter في حالة تعدد DataTable.
أتمنى لك التوفيق

جزاكـ الله خير على التوضيح الان وضحت اكثر (اقولكـ شي الصراحة لم اكن اعرف معناها الا الان Blush  ) الله يجزيكـ خير عني وعن المسلمين
باركـ الله فيكـ ، وابشركـ الكود يعمل والحمدلله تمام التمام جزاكـ ربي الجنة 
الحمدلله الذي بنعمته تتم الصالحات 

بقى لدي استفسار ، استفساري لتلافي المشاكل التي قد تحدث 
هل استبدل con.open 
بهذا الكود 
        If con.State = ConnectionState.Closed Then
            con.Open()
        End If
لو تعتقد لا يوجد داعي لهذا
إستخدم للتحديث اوامر الاتصال المتصل بحيث يقرا معرف كل عمود بشكل مستقل عن العمود المربوط.
الصفحات : 1 2