|
|
TIBTransaction komponens
Interbase 5. rész
|
|
Példaprogram letöltése
7322 bájt
|
A sorozat mai cikkében az TIBTransaction komponenssel ismerkedünk meg. Megnézzük, hogy mik is azok a tranzakciók, miért van rájuk szükség. Bemutatjuk a komponens tulajdonságait, eseményeit és metódusait. Beépítve a példaprogramba tanulmányozhatjuk, hogyan teszi biztonságosabbá az adatok kezelését.
Tranzakciónak nevezzük az egyetlen logikai egységet képző adatbázis-kezelési műveletet. Vagy a tranzakció összes művelete megtörténik, vagy egyik sem. Egy hiba esetén a teljes tranzakció visszagörgetődik, beáll a tranzakció előtti konzisztens állapot.
Általános javaslat, hogy egy tranzakció a lehető legkevesebb módosítást tartalmazza (csak a szigorúan összetartozókat, amelyek egy egységet alkotnak), hogy gyors legyen. Kerüljük az olyan tranzakciókat, amely felhasználói beavatkozásra vár a befejezéshez, mert ha a felhasználó például otthagyja a gépet a tranzakció nagyon hosszú ideig aktív maradhat. A több rekordot egyszerre frissítő UPDATE utasítások és a tárolt frissítések használata segít abban, hogy a tranzakciók kis méretűek és gyorsak legyenek.
Az IBTransaction komponens segítségével teljes mértékben felügyelhetjük a tranzakciókat. Fontos tudni, hogy legalább egy komponens szükséges minden olyan programban, amelyik az InterBase Express komponenscsomagot használja. Ha egy tranzakció-komponenshez kapcsolt adatkészlet szerkesztését megkezdjük, a tranzakció automatikusan elindul.
Most nézzünk meg egy példakódot arra, hogyan használjuk a komponenst.
Procedure TForm1.Button1Click(Sender : TObject);
Begin
IBTransaction1.CommitRetaining; //IBTransaction1.RollbackRetaining;
End.
A következő kód is helyes, de mivel lezáródik a kurzor meg kell nyitnunk az adatforrást:
Procedure TForm1.Button1Click(Sender : TObject);
Begin
IBTransaction1.Commi; //IBTransaction1.Rollback;
IBTransaction1.StartTransaction;
DataSourceX.DataSet.Open;
End.
Ne felejtsük el, hogy az InterBase lezár minden kurzort, ha a tranzakció véget ér. Ami azt jelenti, hogy újra meg kell nyitni, és újra ki kell nyerni belőle az adatokat, attól függetlenül, hogy változtattunk-e rajtuk. Ha véglegesítjük, vagy visszagörgetjük az adatokat, a CommitRetaining vagy a RollbackRetaining parancsokkal megkérhetjük az InterBase-t, hogy maradjon a tranzakcióban, nyitva hagyva az adatkészletet. Ennek a viselkedésnek az az oka, hogy a tranzakciók az adatok egy pillanatnyi állapotát jelentik. Ha egy tranzakció befejeződött, az adatokat újra kell olvasni, mert közben más felhasználók is módosíthattak rajtuk.
A komponens gyakrabban használt tulajdonságai:
- Active: Beállíthatjuk, hogy a tranzakció aktív legyen. A tulajdonság használatával meg is tudhatjuk, hogy aktív-e a tranzakció vagy sem.
- DatabaseCount: A tranzakció részét képző adatbázisok számát adja.
- Databases: A beállított index által visszaadott adatbázist mutatja.
- DefaultAction: Milyen tranzakció következzen be, amikor egy az IdleTimer tulajdonságnál beállított idő eltelik. Négy lehetséges értéke van:
- taRollback: A tranzakció visszagörgetődik.
- taCommit: A tranzakció végrehajtódik.
- taRollbackRetaining: A tranzakció visszagörgetődik, de az adatkészlet nyitva marad.
- taCommitRetaining: A tranzakció végrehajtódik, de az adatkészlet nyitva marad.
- DefaultDatabase: Mely IBDatabase komponensre hassanak a tranzakciók.
- IdleTimer: Mennyi idő teljen el addig másodpercekben, amíg a DefaultAction tulajdonságnál beállított tranzakció automatikusan bekövetkezik.
- InTransaction: A tulajdonság segítségével megállapítható, hogy egy tranzakció folyamatban van-e vagy sem.
- Params: A tranzakció paramétereit állíthatjuk be. Ritkán használjuk.
A komponens eseményei:
- OnIdleTimer: Az IdleTimer tulajdonság által meghatározott idő elérésekor aktiválódik. Lehetőséget biztosít például arra, hogy tájékoztassuk a felhasználót, hogy a tranzakció végbement, mert a gép sokáig nem kommunikált az adatbázissal.
A komponens metódusai:
- AddDatabase: Újabb adatbázis tranzakció-kezelését bízhatjuk a komponensre.
- CheckDatabasesInList: Ellenőrizhetjük, hogy az adatbázis benne van-e a tranzakció listájában. Ha nincs, egy kivétel keletkezik.
- CheckInTransaction: Ellenőrizhetjük, hogy a tranzakció aktív-e, és hogy a tranzakció listájában található-e adatbázis. Ha a feltételek nem teljesülnek, akkor egy kivétel keletkezik.
- CheckNotInTransaction: Azonos funkciójú eljárás, mint az előző, csak az ellenőrzést fordított értelemben végzi el.
- Commit: Mindenféle frissítés, törlés, módosítás véglegesen belekerül az adatbázisba, és a tranzakció befejeződik. Az eljárás hívása után a következő tranzakció elindításához a StartTransaction metódust kell meghívni. A Commit meghívása előtt ellenőrizzük, hogy van-e tranzakció az InTransction tulajdonság használatával.
- CommitRetaining: Hasonló funkciójú metódus, mint az előbbi eljárás, de nem zárja le az aktuális tranzakciót. Utána nem kell meghívni a StartTransaction metódust.
- FindDatabase: Megkeresi a megadott IBDatabase komponenshez tartozó indexet a lista alapján.
- RemoveDatabase: Egy IBDatabase komponenst töröl a listából.
- RemoveDatabases: Az IBTransaction komponenshez kapcsolt összes adatbázis-komponenst törli.
- Rollback: A tranzakciót visszagörgeti, és lezárja azt. Az eljárás hívása után a következő tranzakció elindításához a StartTransaction metódust kell használni. A Rollback meghívása előtt ellenőrizzük, hogy van-e aktív tranzakció az InTransaction tulajdonság használatával.
- RollbackRetaining: Hasonló funkciójú metódus, mint az előbbi eljárás, de nem zárja le az aktuális tranzakciót. Utána nem kell meghívni a StartTransaction metódust.
- StartTransaction: Új tranzakciót indíthatunk el.
A mellékelt példa magyarázatai a forráskódban lettek elhelyezve.
Próbáljuk ki a tranzakciók hatását: változtassunk az adatokon, majd véglegesítsük, vagy görgessük vissza a változásokat a Tranzakciók menü valamelyik elemét használva. Figyeljük meg a hatásokat.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 384. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|