معالجة سير تنفيذ الأوامر
#1
السلام عليكم و رحمة الله
في حالة حدوث استثناء في مرحلة ما من التنفيذ، كيف تعالج سير تنفيذ مجموعة من الأوامر المتتالية في حدث واحد (نقر على زر الحفظ مثلا)
سيناريو:
خلال تنفيذ أسطر متتالية من الأوامر يتم بمساعدتها تسجيل عملية بيع بنجاح (تحفظ في جدول المبيعات) ثم يحدث استثناء غير متوقع، مما يسبب فشل عملية الإنقاص من المخزون القيمة التي تم بيعها (فشل الحفظ في جدول المخزون للسلع) و نجد نفسنا امام خطأ في التسيير بين سلعة تم بيعها و لم يتم تسجيل خروجها من المخزون.

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

كود :
OnClickEvent begin task1 executed... task2 executed... UNEXPECTED EXCEPTION OCCURRED HERE IMOPRTANT task3 not executed... IMPORTANT task4 not executed... end;
[-] كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة
  • Ben.Ja
الرد
#2
و عليكم السلام أهلا ب TAOTiE

إذا كنت تستخدم ADO , يمكنك إستخدام:

BeginTrans ,CommitTrans ,RollbackTrans
[-] كل من 2 users say قال شكرا ل PLANSHARP على المشاركة المفيدة
  • TAOTiE, Ben.Ja
الرد
#3
جميل جدا، و هل كتابتها صحيحة بهذه الطريقة:

كود :
procedure TVentesDetails.Valider1Click(Sender: TObject); begin  try    MenuPrincipal.ADOConnection.BeginTrans;    Valider();    MenuPrincipal.ADOConnection.CommitTrans;  except    MenuPrincipal.ADOConnection.RollbackTrans;  end; end;

حيث كل اوامر معالجة الحفظ و الانقاص و غيرها موجودة في دالة Valider لعملية بيع سلعة واحدة مرة واحدة.
هل من طرق اخرى غير الاعتماد على ADOConnection  في حماية سير تنفيذ الأوامر؟
[-] كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة
  • Ben.Ja
الرد
#4
اجل صحيحة
وهذه الطريقة ستجدها في كل قواعد البيانات
او على الاقل لم اتعامل مع قواعد بيانات لا توجد بها هذه الطرريقة
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • TAOTiE
الرد
#5
شكرا على المداخلة.
حماية سير تنفيذ الأوامر من الأمور الأساسية المهمة جدا، لتفادي اي اشكال قد ينتج من سوء تسلسل التنفيذ.

شكرا مرة اخرى على المشاركة.
[-] كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة
  • Ben.Ja
الرد
#6
(18-10-2017, 08:16 PM)TAOTiE كتب : شكرا على المداخلة.
حماية سير تنفيذ الأوامر من الأمور الأساسية المهمة جدا، لتفادي اي اشكال قد ينتج من سوء تسلسل التنفيذ.

شكرا مرة اخرى على المشاركة.

موضوع جيد نبهت عليه أخ TAOTie, هل يمكنك وضع مثال خفيف لاستخدام transaction مع try except
[-] كل من 1 user says قال شكرا ل Ben.Ja على المشاركة المفيدة
  • TAOTiE
الرد
#7
آلية العمل في المشاركة رقم 3، بعد اعطاء امر حماية الأوامر بــ try و تحضير بداية الــ Transaction سوف يتم توجيه و اكمال التنفيذ في حالة حدوث استثناء الى الجزء exception الذي يتم فيه استدعاء Rollback لارجاع حالة قاعدة البيانات الى وضعها القبل Transaction و في حالة سير التنفيذ بدون حدوث استثناء سوف يتم اكمال العملية بــ Commit مباشرة في ملف قاعدة البيانات لما تم عمله.
بمعنى ان عملية الحفظ النهائية و الحقيقية في ملف قاعدة البيانات سوف يتم تسيرها من طرف المكون ADOConnection حتى لو اعتمدنا على مكونات Table او Query في اضافة التسجيلات الى ملف قاعدة البيانات.

يرجى التصحيح من الاعضاء.
[-] كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة
  • Ben.Ja
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم