الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة جديدة في Master/detail

مغلق
بدأه showman12 في 9 مايو 2007 · 5 رد · 1,144 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

تحية طيبة لمشرفين واعضاء المنتدي الرائع والمفيد

في اول مشاركة لي احب ان اتكلم في موضوع هام قابلتني فيه مشكلة كبيرة وهو نادر ما تم الحديث عنه هنا في هذا المنتدي او في اي منتديات اخري متعلقة بالديلفي وهو متعلق باستخدام ما يسمي master/detail relationship وذلك بأستخدام adodataset وليس adotable كيف وما هي المشكلة::

المشكلة تتمثل في الاتي:

معظم الامثلة علي هذة العلاقة تقوم بربط جدولين احدهما كماستر والاخر ديتال عن طريق اضافة العناصر من نوع adotable ومثال علي ذلك مثلا العلاقة بين جدول العملاء وجدول الفواتير حيث كل عميل يكون له مجموعة فواتير وهذا النوع يسهل ربطة عن طريق هذة العلاقة حيث يتم بأضافة عنصرين من نوع Adotable وربط كل عنصر بجدول تم عمل ربط بين هؤلاء العنصرين باستخدام الخاصية mastersource و masterfields لجدول الفواتير ويتم عمل ذلك بكل سهولة. ويمكن عرض محتويات جدول الفواتير في dbgrid لتظهر فواتير كل عميل علي حدي عند التنقل بين العملاء. وفي هذة الحالة ايضا يمكن التعديل في اي فاتورة او حذف اي فاتورة لاي عميل بسهولة.

ماذا لو كان الربط اكثر تعقيدا من ذلك. بمعني ان هناك جدول ثالث للمخازن يحتوي علي رقم المخزن واسم المخزن وكل فاتورة يتم وضع رقم المخزن المصروفة منه في خانة رقم المخزن بجدول الفواتير. بمعني اخر انه هناك علاقة بين جدول الفواتير وجدول المخازن. اذن الان نريد ان نعرف فواتير كل عميل معروضة بنفس الطريقة في dbgrid ومتضمنة اسم المخزن المصروفة منه. في هذة الحالة لا يمكن ان نستخدم العنصر ADOTABLE لثميل العلاقة Detail لان هناك بيانات مطلوبة من اكثر من جدول معا وهما جدول الفواتير وجدول المخازن. لذلك سنقوم بأستخدام العنصر AdoDataSet ونقوم بكتابة Commandtext والربط بين الجدولين لعمل تحديد بيانات الفواتير من جدول الفواتير واسم المخزن من جدول المخازن. جيد جدا الان يمكننا التنقل بين العملاء سنشاهد فواتير كل عميل وبيانتها واسم المخزن ايضا المصروفة منه ولكن هنا المشكلــــــــــــــــــــــــــــــــة. ماذا لو اردنا تعديل المخزن او حذف فاتورة معينة؟؟؟؟؟ لن نستطيع التعديل او الحذف و لو تم حذف السجل سيتم حذف المخزن ايضا من جدول المخازن وليس حذف الفاتورة فقط لان السجل هو مزيج من جدولين الفواتير والمخازن؟؟؟؟؟؟؟؟؟؟؟؟؟

هي مشكلة كبيرة ارجو ممن لدية الفكرة الجيدة التكرم علينا بالرد واعتقد ان الموضوع هام ولم يتم مناقشة شيء بهذا الشكل من قبل.

تم تعديل هذه المشاركة بواسطة showman12 في 9 مايو 2007 في 06:32

#2
showman12 كتب:
ولكن هنا المشكلــــــــــــــــــــــــــــــــة. ماذا لو اردنا تعديل المخزن او حذف فاتورة معينة؟؟؟؟؟ لن نستطيع التعديل او الحذف و لو تم حذف السجل سيتم حذف المخزن ايضا من جدول المخازن وليس حذف الفاتورة فقط لان السجل هو مزيج من جدولين الفواتير والمخازن؟؟؟؟؟؟؟؟؟؟؟؟؟

هي مشكلة كبيرة ارجو ممن لدية الفكرة الجيدة التكرم علينا بالرد واعتقد ان الموضوع هام ولم يتم مناقشة شيء بهذا الشكل من قبل.

استخدم AdoTable أخرى للتحرير او الحذف

وذلك بعد الحصول على رقم الفاتورة او المخزن المراد التعديل عليه

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

d4baa0.gif
#3

الامر واضح عند استخدام تعليمة SQL لجلب بيانات من اكثر من جدول لا يمكن التعديل و الحذف

اقتباس
لذلك سنقوم بأستخدام العنصر AdoDataSet ونقوم بكتابة Commandtext والربط بين الجدولي

يمكن استخدام Adoquery فهي مخصصة لهذا الغرض

الحل: كما قال الاخ محمد قم بالحصول على ID للجدول الذي تريد التعديل او الحذف و استخدم اما Adotable او اي Dataset لعمل ذلك من خلال التعليمات(delete, insert, edit, post)

او قم باستخدام adoquery تقوم بكتابة فيها تعليمات SQL و تستخدمها في اي مكان تريده

و الافضل هو عمل توابع تنفذ ما تريد و تستخدمها في كل مكان بحيث تريح نفسك من كتابة الاكود و تكرارها في كل مرة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4
اقتباس
الحل: كما قال الاخ محمد قم بالحصول على ID للجدول الذي تريد التعديل او الحذف و استخدم اما Adotable او اي Dataset لعمل ذلك من خلال التعليمات(delete, insert, edit, post)

او قم باستخدام adoquery تقوم بكتابة فيها تعليمات SQL و تستخدمها في اي مكان تريده

ارجو التوضيح.

طيب يعني مثلا في حالة انا اريد تغيير المخزن التابع لفاتورة معينة بدلا من المخزن 1 اجعل الفاتورة مسحوبة من المخزن 2؟ كيف اقوم بتغيير ذلك من داخل ال grid يعني المستخدم يكتب رقم المخزن الجديد في ال record الخاص بفاتورة معينة ويتم التعديل علي الفاتورة بالمخزن الجديد هذة هي المشلة بوضوح. ارجو من السادة الكرام والسيد المشرف توضيح كيفية عمل ذلك بمثال مبسط من خلال جمل sql او اي طريقة مناسبة.

#5

واضح ان الخبرات عنا متواضعة بالفعل.

#6

يا اخي الاجابة مكتوبة فوق فقط عليك التطبيق

انت في سؤالك لم تظع كود او مثال، كذلك كان الجواب

d4baa0.gif

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…