المشاركات : 88
المواضيع 23
:
: 0
الإنتساب : Oct 2012
السلام عليكم و رحمة الله و بركاته
عندي جدولان في قاعدة البيانات أحدهما ماستر و الثاني ديتال
و لقد و ضعت هذه الرابطة بين الجدولين في الدلفي
فهل عند حذف سجل من الماستر أكون قد تخلصت من السجلات المرتبطة معه في جدول الديتال
أو يجب أن أحذفها تباعا(فإن كانت كذلك فما هي أفضل طريقة)
شكر كبير لهذا المنتدى و لكل أعضائه.
المشاركات : 628
المواضيع 72
:
: 211
الإنتساب : Jun 2010
و عليكم السلام
إن فهمت جيدا سؤالك فهذا يتعلق بنوع الحقل هل هو أولي أم ثانوي
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
المشاركات : 88
المواضيع 23
:
: 0
الإنتساب : Oct 2012
المشاركات : 119
المواضيع 0
:
: 0
الإنتساب : Sep 2012
السلام عليكم...
إذا كانت العلاقة منشأة فقط في Delphi (علاقة Master/Details) دون وجود علاقة حقيقية (Relation) في قاعدة البيانات فإن حذف السجلات الفرعية (Detail) يتم برمجياً باستعمال Command أو Query لتنفيذ جملة SQL تشبه التالية:
كود :
DELETE FROM detail_table WHERE (foreign_key_field = master_id_value)
حيث detail_table اسم الجدول الفرعي. foreign_key_field اسم الحقل في الجدول الفرعي الذي يحتوي على رقم تعريف السجل في الجدول الرئيسي. master_id_value رقم تعريف السجل في الجدول الرئيسي.
أما إذا كانت هناك علاقة بين الجدولين في قاعدة البيانات فإن الأمر يعتمد على ما إذا كان هناك تكامل مرجعي (ٌReferential Integrity) بخصوص حذف السجلات الفرعية عند حذف السجل الرئيسي المرتبط بها (Cascade Delete).
فإذا كان هناك تكامل مرجعي بخصوص الحذف فسيتم حذف السجلات الفرعية تلقائياً عند حذف السجل الرئيسي المرتبط بها، و إلا فستحتاج إلى حذفها برمجياً كما سبق.
نرجو الاستفادة و السلام.
المشاركات : 88
المواضيع 23
:
: 0
الإنتساب : Oct 2012
أحسنت أخي. لذا فإن أفضل الطريقتين الاولى و دلك بربط الجداول في sgbd.
جزاك الله كل الخير.
المشاركات : 88
المواضيع 23
:
: 0
الإنتساب : Oct 2012
عفوا أقصد الطريقة الثانية.
المشاركات : 842
المواضيع 49
:
: 65
الإنتساب : Jun 2010
السلام عليكم
ملاحظة بسيطة
إقتباس :فإذا كان هناك تكامل مرجعي بخصوص الحذف فسيتم حذف السجلات الفرعية تلقائياً عند حذف السجل الرئيسي المرتبط بها،
هذا في حالة ما إذا كانت referential action ـ = CASCADE
على ما أظن أغلب الـ rdbms تدعمها
كود :
http://en.wikipedia.org/wiki/Foreign_key
بالتوفيق
المشاركات : 19
المواضيع 1
:
: 0
الإنتساب : Jun 2010
السلام عليكم
اولا :حذف تسجيلة من tablemaster
;(procedure form1.Button1Click(Sender: TObject
begin
;tablemaster.Delete
;end
ثانيا
من الخاصية: Beforedelete ل:tablemaster يتم حذف جميع تسجيلات tabledetail
;(procedure tabledetailBeforeDelete(DataSet: TDataSet
var
;i:integer
begin
for i:=1 to tabledetail.recordcount do
begin try
;tabledetail.Last
;tabledetail.Delete
except
;end;end
;end
المشاركات : 119
المواضيع 0
:
: 0
الإنتساب : Sep 2012
السلام عليكم...
مجرد نصيحة: لا تستعمل الحلقات في مثل هذا الأمر. إذا كان الأمر يتعلق بحذف 10 سجلات أو 100 سجل فربما يكون مقبولاً، و لكن عند التعامل مع آلاف أو مئات الألاف من السجلات فإن استعمال حلقة في مثل هذا الأمر سيكون بطيئاً جداً جداً، و ربما يؤدي إلى توقف البرنامج عن الاستجابة إلى حين انتهاء الحلقة.
سلام.