منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
مشكلة في العلاقات بين الجداول...أرجو المساعدة - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم أسئلة قواعد البيانات تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=41)
+--- الموضوع : مشكلة في العلاقات بين الجداول...أرجو المساعدة (/showthread.php?tid=6426)



مشكلة في العلاقات بين الجداول...أرجو المساعدة - TheMatrix - 18-10-12

السلام عليكم و رحمة الله و بركاته..
أتمنى من الأخوة الكرام ، تقديم المساعدة في المشكلة التي واجهتني في البرنامج الذي أعمل عليه ، حيث و قد تعلق العمل عليه بسبب هذه المشكلة ، و التي حاولت أن أجد لها حلاً، لكني لم أجد حتى هذه اللحظة..المشكلة تكمن في العلاقة بين الجداول و هي كالآتي:
لدي جدولان هما (CostumerData) و (CounterData) تم إحضارهما إلى (DataSet) ، الجدول الـ Main (الأب) هو (CostumerData) و الجدول (CounterData) هو الـ Details (الأبن) و قد أنشئت بينهما علاقة حسب الشيفرة التالي:

كود :
[align=left]With ggRdNtDataSet
            .Relations.Add("R1", .Tables("CostumerData").Columns(0), _
                                 .Tables("CounterData").Columns(0), True)
End With[/align]
و قد تم وضع كلا جدول على حده في (Panel) خاصة به ، و تم ربط حقولهما بـ (TextBoxes) لكل حقل على الـ (Panel)، بحيث يمكنني تعبئة حقول الجدول الأب أولاً ، و قد قمت باستخلاص كائن (CurrencyManager) لإدارة هذا الجدول كما في الشيفرة التالية:-
كود :
[align=left]BindControl("Text", "CostumerData.CstmrNo", txtCstmrNo)
        BindControl("Text", "CostumerData.CstmrNm", txtCstmrNm)
        BindControl("Text", "CostumerData.CstmrHPhon", txtCstmrHphon)
        BindControl("Text", "CostumerData.CstmrMblPhon1", txtCstmrMblPhon1)
        BindControl("Text", "CostumerData.CstmrMblPhon2", txtCstmrMblPhon2)
        BindControl("Checked", "CostumerData.IsInBlckLst", chkBlackList)

        gcmCostumerData = pnlNewCstmr.BindingContext(ggRdNtDataSet, "CostumerData") : gcmCostumerData.Refresh()[/align]
حيث أن (BindControl) هو اجراء لتنفيذ عدة مهام ، و قد كررت نفس العملية مع الجدول الأبن ، مع إضافة اثنين (TextBoxes) ـ على الـ (Panel) الخاص بالجدول الأبن ـ تم ربطهما بحقلي الرقم و الاسم في الجدول الأب..بحيث أنه عندما يتم التنقل بين السجلات في الجدول الأب ، يتم فرز السجلات الأبناء الخاصة بسجل جدول الأب فقط مع امكانية الإضافة و التعديل و الحذف للسجلات الأبناء ، لكن هذا لم يحدث ، حيث أن كلاهما يتنقل بين السجلات الخاصة به باستقلالية تامة عن الآخر، فعند الذهاب إلى السجل التالي في الجدول الأب..لا تتأثر السجلات في الجدول الأبن ، مع العلم أني استخدم فقط (TextBoxes) و لم استخدم (DataGridView) لعرض السجلات في الجدول الأبن ، أيضاَ كلا الجدولين الأب و الأبن لهما كائنين (CurrencyManager) خاص بهما و ربط حقول الجدولين بالـ(TextBoxes) صحيح 100%... فهل يمكن إيجاد علاقة بين كائني (CurrencyManager) الخاص بالجدولين من أجل تحقيق التأثير بين الجدولين؟ أو ايجاد الطرقة المثلى لحل هذه المشكلة .. جزاكم الله ألف خير


مشكلة في العلاقات بين الجداول...أرجو المساعدة - TheMatrix - 18-10-12

السلام عليكم و رحمة الله و بركاته..إخوتي الكرام
كنت قد وضعت مشكلتي مع العلاقة بين الجداول كما هو موضح أعلاه ، و بحمد الله ، فبعد أن بحثت في مواقع الانترنت المتخصصة بلغة VB.NET استطعت أن أجد حلاً جذرياً و ناجعاً لها..و أردت أن أضع هذا الحل بين أيديكم للاستفادة..
كانت المشكلة تكمن في الكائن (BindingContext) التابع للحاويات (بالنسبة لبرنامجي كانت الحاوية من النوع "Panel") ، فقمت باستبدال ذلك بكائن من النوع (BindingSource) و عدلت في الشيفرة البرمجية على النحو التالي:

كود :
[align=left]'This block of code belongs CostumerData table.
        gbsCostumerData = New BindingSource
        gbsCostumerData.DataSource = ggRdNtDataSet
        gbsCostumerData.DataMember = "CostumerData"[/align]
أما بالنسبة للجدول الابن فتمت تعديل الشفرة كالتالي:
كود :
[align=left]'This block of code belongs CounterData table.
        gbsCounterData = New BindingSource
        gbsCounterData.DataSource = gbsCostumerData
        gbsCounterData.DataMember = "R1"[/align]
و هكذا انتهت المشكلة و أصبح برنامجي يعمل كما هو مطلوب منه تماماً.. اتمنى للجميع الاستفادة..و تقبلوا خالص التحية