استعلامات الحذف  

    Delete Queries

إعداد : محمد طاهر

 

 

استعلام الحذف Delete Queries

لحذف مجموعة من السجلات من جدول أو أكثر ، و يقوم بحذف السجل بالكامل

 

 

 

أولا :  الحذف باستخدام استعلام   يمثل جدول واحد

 

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

 

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

و  و هنا سنختار أن بلد الشحن = البرازيل مثلا

بأن نكتب فى خانة المعيار  لحقل ShipCountry  كلمة "brazil"

و هذا الحقل المستخم كمعيار criteria   موجود فى نفس الجدول الذي سنحذف منه السجلات

 

و بذلك تكون جملة الاس كيو ال  

SELECT Orders.*, Orders.ShipCountry
FROM Orders
WHERE (((Orders.ShipCountry)="brazil"));

 


و طبعا لا داعي لتكرار استدعاء حقل ShipCountry
 فقط تم استدعاء كل حقول الجدول باستخدام ال *

فنلغي علامة الاختيار من امام حقل ShipCountry    الذي سنتخدمه للمعيار دون عرضه

أو نعدل جملة الاس كيو ال مباشرة لتصبح

SELECT Orders.*
FROM Orders
WHERE (((Orders.ShipCountry)="brazil"));

 

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

 

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

و ذلك بالضغط علي ايقونة العرض      فى وضع datasheet view  أو من قائمة  view

 

 

 

تحويل استعلام التحديد الي استعلام حذف

 

ثم  بعد التأكد من صحة الاختيار يأتي دور تعديل نوع الاستعلام ، من وضع تصميم الاستعلام نفتح ايقونة  نوع الاستعلام ، و نختار استعلام حذف delete query .

 

ملاحظة :  نلاحظ أن الخطوة الاولي فى تكوين استعلام حذ ف هي تصميم استعلام تحديد عادي ثم نحول نوع الاستعلام ، و نفس هذا الاجراء نستخدمه مع استعلامات التحديث و الاضافة و تكوين جدول ، و استعلام الجداول المحورية ، الا أن الأخير يمكن تكوينه باستخدام المعالج كما سبق و تحدثنا

 

 

فتتحول الشاشة الي التالي

 

 

ثم نحفظ الاستعلام باسم q1 ، و الان الاستعلام جاهز للتنفيذ ، و لتنفيذه نضغط علي علامة التعجب الحمراء  فى الايقونة الي يمين نوع الاستعلام

و بالضغط علي هذه الايقونة ستظهر رسالة تأكيد للحذف ثم بعد ذلك يتم الحذف

 

و نلاحظ قبل أن الجدول الذي سنحذف منه كل السجلات  أمام خانة delete  كتب أمامه From  و م استخدم كمعيار كتب أمامه Where .  كما أن From  لابد أن تكتب امام ختيار جدول بالكامل  أي *  و ليس حقول ، و اذا حاولت اختيار حقول معها لن يسمح لك البرنامج بذلك .

 

و باختيار نوع الاستعلام استعلام حذف كما سبق ، تتحول جملة الاس كيو ال الي :

 

 

DELETE Orders.*
FROM Orders
WHERE
(((Orders.ShipCountry)="brazil"));
 

 

و طبعا اذا أردنا حذف كل سجلات الجدول ، نحذف الشرط :

 

 

DELETE Orders.*
FROM Orders

 

 

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

 

 هنا جدول الطلبيات orders  يمثل جانب ( المتعدد ) من علاقته مع جدول العاملين Employees  ،  فكل موظف قام بتنفيذ أكثر من طلب فى جدول  الطلبيات ، و سنقوم بعمل استعلام للحذف من جدول الطلبيات بناء علي شرط موجود فى الجدول نفسه ، أي لا دخل للجدول الآخر ( العاملين ) .

 أيضا الجدول قد يكون له علاقة أخري يمثل هو فيها جانب ( الواحد ) من العلاقة ، مثل علاقته بجدول تفاصيل الطلبيات . مع ملاحظة أنه حال وجود علاقة مثل هذه الاخيرة سيؤثر الحذف من جدول الطلبيات علي الحقول المناظرة من جدول تفاصيل الطلبيات بالرغم من عدم تناول جدول التفاصيل فى الاستعلام ، و هذا فى حالة واحدة فقط هي أن يكون خيار Cascade Delete Related Records   أي الحذف المتتالي مفعل فى العلاقة بينهما كما تحدثنا فى موضوع العلاقات .

 

ثانيا :  الحذف باستخدام استعلام بين  جدولين بينهما علاقة

 

سنتبع نفس الخطوات تحديدا و ذلك لحذف تفاصيل الطلبيات التي قام بها عامل معين

لذا سننشيء استعلام حذف لحذف جميع الطلبيات التي تمت بواسطة العامل رقم ، مثلا لنحذف جميع الطلبيات التي قام بها العامل رقم 1 فى استعلام اسمه q2

 

 و تكون جملة الاس كيو ال المناظرة

 

DELETE Orders.*, Employees.EmployeeID
FROM Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE (((Employees.EmployeeID)=1));
 

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

 

و بالرغم الي أن حذف هذه الاضافات أو تركها لن يؤثر ، الا أننا يجب أن نعرف التكوين المؤثر فى الجملة ، حيث اننا مستقبلا بإذن الله سنقوم بكتابة بعض جمل الاس كيو ال ضمن كود ال vba لتنفيذ أكود تحديث و ترحيل و اضافة ، لذا علينا أن نتعرف علي كيفية تكوين هذه الجمل ، و هذا ما دفعنا حتي الآن الي الاستمرار فى ذكر جمل الاس كيو ال المناظرة لأي استعلام ، أيضا بالنسبة للأقواس في جملة الشرط فسيكون استعمالها مفيدا حال وجود أكثر من شرط ووجود  تعبيرات And , Or  بينها.

 

 

 

 

 ملاحظات هامة حول استعلامات الحذف

 

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

و ذلك :

 باختيار نوع الاستعلام من الايقونة   Select Query  و تشغيله  من زر التنفيذ 

 

 

 أو

  الطريقة الثانية : نختار عرض  البيانات فى وضع العرض datasheet view   و هي الاسهل

 

 

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

باختيار ايقونة نوع الاستعلام  و نختار الخيار الأخير Delete Query  فى الحالة الاولي

او نضغط علي زر التصميم  فى حالة الطريقة  الثانية  

 

 

 ثم نختار تنفيذ الاستعلام من علامة التعجب الحمراء فى الزر المجاور .

 

 

2- يجب أخذ نسخة احتياطية من البيانات قبل تنفيذ استعلامات الحذف ، تحسبا لأي خطأ

 

3- أثناء تنفيذ استعلام حذف فى جدول يمثل جانب ( الواحد ) من علاقة ( واحد الي متعدد ) و مع تفعيل خاصية cascade delete  أي الحذف المتتالي سيتم حذف السجلات المناظرة من الجدول الذي يمثل جاني ( المتعدد ) من العلاقة

 

4- عند حذف سجلات من جداول مرتبطة ، مثل حذف السجلات المتكررة  من أحد الجدولين ، يجب أن نغير خاصية unique records  ( سجلات فريدة ) الي نعم .

 

 

 

 ------

تم

------