delphi4arab منتديات دلفي للعرب

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

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

كود :
OnClickEvent begin task1 executed... task2 executed... UNEXPECTED EXCEPTION OCCURRED HERE IMOPRTANT task3 not executed... IMPORTANT task4 not executed... end;
و عليكم السلام أهلا ب TAOTiE

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

BeginTrans ,CommitTrans ,RollbackTrans
جميل جدا، و هل كتابتها صحيحة بهذه الطريقة:

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

حيث كل اوامر معالجة الحفظ و الانقاص و غيرها موجودة في دالة Valider لعملية بيع سلعة واحدة مرة واحدة.
هل من طرق اخرى غير الاعتماد على ADOConnection  في حماية سير تنفيذ الأوامر؟
اجل صحيحة
وهذه الطريقة ستجدها في كل قواعد البيانات
او على الاقل لم اتعامل مع قواعد بيانات لا توجد بها هذه الطرريقة
شكرا على المداخلة.
حماية سير تنفيذ الأوامر من الأمور الأساسية المهمة جدا، لتفادي اي اشكال قد ينتج من سوء تسلسل التنفيذ.

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

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

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

يرجى التصحيح من الاعضاء.