07-11-2012, 12:54 AM
السلام عليكم...
تحتاج إلى الـ Transaction فقط عندما تريد تنفيذ عمليات (إضافة، تعديل، حذف) مرتبطة معاً على أكثر من جدول واحد، بحيث إما تتم العمليات على كل الجداول أو تلغى من كل الجداول.
مثلاً:
إذا كان لدينا جدول الطلبيات (Orders) يحتوي على بيانات مثل: رقم الطلبية، تاريخ الطلبية، رقم الزبون صاحب الطلبية، ... إلخ. و جدول تفاصيل الطلبيات (OrderDetails) يحتوي على بيانات مثل رقم الصنف، الكمية المطلوبة، سعر البيع... إلخ. (و طبعاً رقم الطلبية كمفتاح أجنبي).
في مثل هذه الحالة، إذا لم نستعمل الـ Transaction فإنه هناك احتمال أن يتم تسجيل بيانات الطلبية (في الجدول Orders) دون أن يتم حفظ البيانات في جدول التفاصيل (OrderDetails) ربما مثلاً بسبب انقطاع الكهرباء عن الجهاز، أو خلل في البرنامج، أو انقطاع الاتصال عبر الشبكة، أو حتى خلل في نظام التشغيل.
حينئذٍ سيكون لدينا طلبية فارغة (دون تفاصيل أو أصناف)، و ربما أيضاً يحدث العكس.
إذن سيكون من المفيد أن تكون لدينا طريقة نضمن بها أن البيانات سيتم حفظها في كلا الجدولين معاً أو يتم إلغاؤها من الجدولين معاً، و هذه هي وظيفة الـ Transaction.
إذا كنت تستخدم مكونات الـ ADO فإن الشكل العام لكود الحفظ سيكون كالتالي:
نرجو الاستفادة و السلام.
تحتاج إلى الـ Transaction فقط عندما تريد تنفيذ عمليات (إضافة، تعديل، حذف) مرتبطة معاً على أكثر من جدول واحد، بحيث إما تتم العمليات على كل الجداول أو تلغى من كل الجداول.
مثلاً:
إذا كان لدينا جدول الطلبيات (Orders) يحتوي على بيانات مثل: رقم الطلبية، تاريخ الطلبية، رقم الزبون صاحب الطلبية، ... إلخ. و جدول تفاصيل الطلبيات (OrderDetails) يحتوي على بيانات مثل رقم الصنف، الكمية المطلوبة، سعر البيع... إلخ. (و طبعاً رقم الطلبية كمفتاح أجنبي).
في مثل هذه الحالة، إذا لم نستعمل الـ Transaction فإنه هناك احتمال أن يتم تسجيل بيانات الطلبية (في الجدول Orders) دون أن يتم حفظ البيانات في جدول التفاصيل (OrderDetails) ربما مثلاً بسبب انقطاع الكهرباء عن الجهاز، أو خلل في البرنامج، أو انقطاع الاتصال عبر الشبكة، أو حتى خلل في نظام التشغيل.
حينئذٍ سيكون لدينا طلبية فارغة (دون تفاصيل أو أصناف)، و ربما أيضاً يحدث العكس.
إذن سيكون من المفيد أن تكون لدينا طريقة نضمن بها أن البيانات سيتم حفظها في كلا الجدولين معاً أو يتم إلغاؤها من الجدولين معاً، و هذه هي وظيفة الـ Transaction.
إذا كنت تستخدم مكونات الـ ADO فإن الشكل العام لكود الحفظ سيكون كالتالي:
كود :
try
ADOConnection1.BeginTrans // ابدأ الصفقة
// ...
// خطوات حفظ البيانات في الجدول الأول
// ...
// ...
// خطوات حفظ البيانات في الجدول الثاني
// ...
// ...
if ADOConnection1.InTransaction then begin
// الأمور تمام. احفظ كل البيانات في كل الجداول
ADOConnection1.CommitTrans;
ShowMessage('تم حفظ البيانات');
end;
except
// حدث خطأ
on E: Exception do begin
if ADOConnection1.InTransaction then
ADOConnection1.RollbackTrans; // ألغِ كافة الإجراءات التي تمت على كل الجداول
ShowMessage('حدث خطأ عند محاولة حفظ البيانات' + #13#10 + E.Message);
end;
end;نرجو الاستفادة و السلام.

