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

Deleting when relations exist

مغلق
بدأه abuehab في 2 مايو 2007 · 8 رد · 984 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ...

عندي 3 جداول (جدول معلومات المستخدمين، وجدولين فيهم حقل يعود إلى الجدول الرئيسي "جدول معلومات المسجلين" ) يعني FK

المهم، في صفحة لحذف حساب المستخدم، عندما يحذف حسابه، يحذف أيضاً المعلومات الموجودة في الجدولين الثانيات، بالترتيب، يتم الحذف من الجدولين أولاً، ثم من الجدول الرئيسي، ولكنه لا يحذف من الجدول الرئيسي ويحذف من الجدولين الثانيات، علماً بأني لو قمت بحذفه يدوياً سوف يحذف ... فما السب ؟؟؟

وشكراً

rulesor7.gif
#2

عاملة On Delete Cascade

وضحي رجاء

#3

عفوا على التدخل في قسم لست مشاركا فيه ولكن الواضح ان المشكلة في البرمجة وليست في السيكوال و ابو ايهاب يستخدم الدوت نت وبالتالي سأرد بما أراد قد يكون صحيحا

أخي يجب أن تعمل الطريقة ..

للأسف نحن نتجاهل قضية مهمة في برمجتنا باستخدام ال VS.NET و هي عمل Debug للكود

ربما أنت قمت بعمل loop او nested if conditions ولا يتم الدخول كليا للداخل

او ربما استخدمت ال Response.Redirect بداخل جزئية معينة من الكود وبالتالي تم تحويلك

لصفحة أخرى قبل أن تكتمل عملية الحذف للسجلات المرتبطة ..

عموما لو أضفت الكود ممكن يساعد في الفهم

لو كنت تستخدم ال Stored Procedure من أجل عملية الحذف المتداخلة يمكنك استخدام ال Query Analyzer لتنفيذ هذه الاجرائية والتأكد

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 2 مايو 2007 في 20:07

You can fly while you can touch the sky

#5

يعني باختصار شديد:

بدي أحذف حقل من جدول في جدولين مرتبطات في هذا الحقل .... كيف؟

rulesor7.gif
#6

الله يشفينا و يعافينا

#7

مرحبا،،

عفوا أخي أنت الذي تقصده هو سجل وليس حقل، لأن الحقل هو عمود في جدول أما السجل فهو عبارة عن سطر (كامل) في جدول

أنت ما تقصده أنك تريد حذف سجل من الجدول الول الذييحتوي على حقل هو عبارة عن حقل مرجعي للحقلين في الجدولين الآخرين.

أما ما سيحدث عند الحذف من الجدول الأول فهذاعائد كيف أنت قد قمت بتحديد علاقة الـ Foreign Key بين الجدولين هل هي NO ACTION أم CASCADE أم SET NULL أم SET DEFAULT

مبدئيا إذا كنت قد حددتها من نوع NO ACTION فلن يسمح لك نظام قاعدة المعطيات بحذف أي سجل في الجدول الأول إذا كان هذا السجل قد ارتبط بسجل واحد على الأقل في أحد الجدولين الآخرين.

أم CASCADE فعند حذف سجل من جدول الجدول الأول فسوف يؤدي إلى حذف جميع السجلات في الجدولين الأخرين للسجلات المرتبطة فقط بالسجل المحذوف من الجدول الأول

أما SET NULL فعند حذف سجل من الجدول الأول فسوف لن يتم حذف السجلات المرتبطة من الجدولين الآخرين وليكن سيتم جعل قيمة الخلايا العائدة للجدول الأول NULL

أما SET DEFAULT فعند حذف سجل من الجدول الأول فسوف لن يتم حذف السجلات المرتبطة من الجدولين الآخرين وليكن سيتم استبدال قيمة الخلايا العائدة للجدول لسجل الجدول الأول المحذوف بالقيمة الافتراضية للحقل (طبعا هذه فقط إذا كنت قد حددت قيمة إفتراضية سابقة للعمود)

وشكرا

#8

شكرأ جزيلاً يا أخي عبد الكريم ،

اكتشفت الخطأ قبل أن أقرأ مشاركتك، وكانت كما ذكرت، ذهبت إلى خصائص الجداول التي أنشأتها، واخترت OnDeleteCascade

جزاك الله كل خير .....

rulesor7.gif
#9

السلام عليكم

جربت نفس الطريقة لكن يحذف السجلات من الجدول الأول ولا يحذف من الجدول الثاني مع أني وضعت Delete Rule = Cascade كما في الصورة

post-2767-1188121409_thumb.jpg

460.gif

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

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