المشاركات : 15
المواضيع 5
:
: 10
الإنتساب : Oct 2017
السلام عليكم و رحمة الله
في حالة حدوث استثناء في مرحلة ما من التنفيذ، كيف تعالج سير تنفيذ مجموعة من الأوامر المتتالية في حدث واحد (نقر على زر الحفظ مثلا)
سيناريو:
خلال تنفيذ أسطر متتالية من الأوامر يتم بمساعدتها تسجيل عملية بيع بنجاح (تحفظ في جدول المبيعات) ثم يحدث استثناء غير متوقع، مما يسبب فشل عملية الإنقاص من المخزون القيمة التي تم بيعها (فشل الحفظ في جدول المخزون للسلع) و نجد نفسنا امام خطأ في التسيير بين سلعة تم بيعها و لم يتم تسجيل خروجها من المخزون.
و ماذا في حالة تسلسل مجموعة من المهام في حدث نقر واحد (حفظ البيع، حفظ انقاص من المخزون، حفظ تقرير النشاط، حساب المدخول المالي و طبعا قبلها مجموعة من الفحوصات لما ادخله المستعمل (فحص اذا كان ما ادخله فراغات او ارقام فقط او صيغة صحيحة للتاريخ او طول محارف اكبر من ما تم حجزه في طول الحقل))
كود :
OnClickEvent
begin
task1 executed...
task2 executed...
UNEXPECTED EXCEPTION OCCURRED HERE
IMOPRTANT task3 not executed...
IMPORTANT task4 not executed...
end;
كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة1 user says Thank You to TAOTiE for this post
• Ben.Ja
المشاركات : 138
المواضيع 1
:
: 4
الإنتساب : Feb 2016
و عليكم السلام أهلا ب TAOTiE
إذا كنت تستخدم ADO , يمكنك إستخدام:
BeginTrans ,CommitTrans ,RollbackTrans
المشاركات : 15
المواضيع 5
:
: 10
الإنتساب : Oct 2017
جميل جدا، و هل كتابتها صحيحة بهذه الطريقة:
كود :
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 على المشاركة المفيدة1 user says Thank You to TAOTiE for this post
• Ben.Ja
المشاركات : 1,677
المواضيع 349
:
: 1,069
الإنتساب : Nov 2013
اجل صحيحة
وهذه الطريقة ستجدها في كل قواعد البيانات
او على الاقل لم اتعامل مع قواعد بيانات لا توجد بها هذه الطرريقة
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
المشاركات : 15
المواضيع 5
:
: 10
الإنتساب : Oct 2017
شكرا على المداخلة.
حماية سير تنفيذ الأوامر من الأمور الأساسية المهمة جدا، لتفادي اي اشكال قد ينتج من سوء تسلسل التنفيذ.
شكرا مرة اخرى على المشاركة.
كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة1 user says Thank You to TAOTiE for this post
• Ben.Ja
المشاركات : 117
المواضيع 1
:
: 38
الإنتساب : May 2017
(18-10-2017, 08:16 PM)TAOTiE كتب : شكرا على المداخلة.
حماية سير تنفيذ الأوامر من الأمور الأساسية المهمة جدا، لتفادي اي اشكال قد ينتج من سوء تسلسل التنفيذ.
شكرا مرة اخرى على المشاركة.
موضوع جيد نبهت عليه أخ TAOTie, هل يمكنك وضع مثال خفيف لاستخدام transaction مع try except
كل من 1 user says قال شكرا ل Ben.Ja على المشاركة المفيدة1 user says Thank You to Ben.Ja for this post
• TAOTiE
المشاركات : 15
المواضيع 5
:
: 10
الإنتساب : Oct 2017
آلية العمل في المشاركة رقم 3، بعد اعطاء امر حماية الأوامر بــ try و تحضير بداية الــ Transaction سوف يتم توجيه و اكمال التنفيذ في حالة حدوث استثناء الى الجزء exception الذي يتم فيه استدعاء Rollback لارجاع حالة قاعدة البيانات الى وضعها القبل Transaction و في حالة سير التنفيذ بدون حدوث استثناء سوف يتم اكمال العملية بــ Commit مباشرة في ملف قاعدة البيانات لما تم عمله.
بمعنى ان عملية الحفظ النهائية و الحقيقية في ملف قاعدة البيانات سوف يتم تسيرها من طرف المكون ADOConnection حتى لو اعتمدنا على مكونات Table او Query في اضافة التسجيلات الى ملف قاعدة البيانات.
يرجى التصحيح من الاعضاء.
كل من 1 user says قال شكرا ل TAOTiE على المشاركة المفيدة1 user says Thank You to TAOTiE for this post
• Ben.Ja