فايربيرد و Transaction
#1
السلام عليكم.
من فضلكم عندي اسائلة بخصوص ال Transaction باستعمال Firebird و Firedac.

أود أن أعرف كيفية اتستعمال ال Transaction و هل كل ما أقوم بتعديل (Insert , Update , delete)  أقوم باستدعاء ال Transaction ؟
مع ال FdTable أو FdQuery.

في الختام هل ممكن مثال ولو بسيط حول هذا الموضوع.
و بارك الله فيكم.
الرد
#2
وعليكم السلام ورحمة الله

حقيقة ان كل عملية تتم على الفايربيرد هي تتم بداخل ترانسكشن

واستخدم هذه الطريقة اذا كان لديك اكثر من عملية مرتبطة ببعضها اما ماعداها فليس لها ضرورة
يعني عملية اضافة تتبعها عملية حذف مثلا ولابد ان تتم معا او تفشلا معا

اليك مثال عملي لعمليتين
كود :
FDConnection1.StartTransaction; try   FDQuery1.ExecSQL;   ....   FDQuery1.ExecSQL;   FDConnection1.Commit; except   FDConnection1.Rollback;   raise; end;

العمليات المتداخلة

كود :
// start new transaction FDConnection1.StartTransaction; try   FDQuery1.ExecSQL;   ....   // set savepoint   FDConnection1.StartTransaction;   try     FDQuery1.ExecSQL;     ....     // release savepoint     FDConnection1.Commit;   except     // rollback to savepoint     FDConnection1.Rollback;     raise;   end;   // commit transaction   FDConnection1.Commit; except   // rollback transaction   FDConnection1.Rollback;   raise; end;
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 1 user says قال شكرا ل Delphi4Us على المشاركة المفيدة
  • Delphi2020
الرد
#3
جميل جدا ،
بارك الله فيك.

1- ما هو دور
كود :
raise;

2- بالنسبةل Transaction المتداخلة ، هل الأفضل استعمال 2 FDTransaction او الاكتفاء بواحدة.

3- هل  هي نفس الطريقة التي يجب استعمالها في FdTable ؟

جزاك الله خيرا.
الرد
#4
ان raise تيتخدم لرفع استثناء والقيام بعملية ما استدعاء دالة او اظهار رسالة او اي امر ولاحظ انها موجودة في الحاوية التي سيتم تنفيذها عند حدوث اسثناء
بشكلها هذا هي حقيقة لا تفعل اي شئ ولكن امثلة على الاستخدام :


كود :
try except   raise EOtherError.Create('My Message'); end;


كود :
procedure MyHandleException(AException: Exception); begin   ShowMessage(AException.Message);   AcquireExceptionObject;   raise AException; end; procedure TForm1.Button1Click(Sender: TObject); begin   try     raise Exception.Create('Bum');   except     on E: Exception do       MyHandleException(E);   end; end;


كود :
uses   SysUtils; procedure RaiseMyException; begin   raise Exception.Create('Hallo World!'); end;


التداخل فقط لاعطيك فكرة ان ذلك ممكن فيتم تنفيد عمليات والغاء اخرى حسب التركيبة المستخدمة

ويمكنك الاكتفاء بواحد فقط بالتأكيد يحتوي العديد من العمليات اضافة تعديل حذف وغيره .

واجل ماتسخدمه مع مكون Table هو نفسه مع Query
قل: اللهم فاطِرَ السماوات والأرض عالم الغيبِ والشهادة، ربَّ كُلِّ شَيءٍ ومَلِيكَه، أَشْهد أن لا إله إلا أنت، أعوذ بك من شرِّ نفسي وشرِّ الشيطان وشِرْكِهِ وأن أقترف على نفسي سوءًا أو أجرُّه إلى مسلم
[-] كل من 2 users say قال شكرا ل Delphi4Us على المشاركة المفيدة
  • Delphi2020, أبو معاذ
الرد
#5
وعليكم السلام

لإثراء الموضوع

كود :
https://www.youtube.com/watch?v=grRVDj-BVdM
[-] كل من 2 users say قال شكرا ل larbiparadox على المشاركة المفيدة
  • Delphi2020, أبو معاذ
الرد


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


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