delphi4arab منتديات دلفي للعرب
معالجة سير تنفيذ الأوامر - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : معالجة سير تنفيذ الأوامر (/showthread.php?tid=8936)



معالجة سير تنفيذ الأوامر - TAOTiE - 13-10-2017

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

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

كود :
OnClickEvent begin task1 executed... task2 executed... UNEXPECTED EXCEPTION OCCURRED HERE IMOPRTANT task3 not executed... IMPORTANT task4 not executed... end;



RE: معالجة سير تنفيذ الأوامر - PLANSHARP - 13-10-2017

و عليكم السلام أهلا ب TAOTiE

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

BeginTrans ,CommitTrans ,RollbackTrans


RE: معالجة سير تنفيذ الأوامر - TAOTiE - 14-10-2017

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

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

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



RE: معالجة سير تنفيذ الأوامر - Delphi4Us - 18-10-2017

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


RE: معالجة سير تنفيذ الأوامر - TAOTiE - 18-10-2017

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

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


RE: معالجة سير تنفيذ الأوامر - Ben.Ja - 20-10-2017

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

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

موضوع جيد نبهت عليه أخ TAOTie, هل يمكنك وضع مثال خفيف لاستخدام transaction مع try except


RE: معالجة سير تنفيذ الأوامر - TAOTiE - 20-10-2017

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

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