
A mellékelt példaprogram megnyitása előtt a TableCheck.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A példaprogram működéséhez szükséges SQL adatbázis létrehozásához futtassa a mellékelt Run_script.cmd programot.
Amennyiben az SQL adatbázis eléréséhez szükséges, ADOConnection1 objektum ConnectionString értéke az Ön beállításainak nem megfelelő, módosítsa annak értékét, hogy az SQL szerver Proba adatbázisa elérhetővé váljon.
A komponens használatához szükséges egy ADOConnection objektum, amelyben beállítjuk az adatbázis elérését. Az ADOConnection objektumhoz a komponens Connection property-jén keresztül kapcsolódhatunk. A TableName property-ben adhatjuk meg az ellenőrizendő tábla nevét.
Az ellenőrzés az Execute metódus meghívásával kezdődik.
A komponens a tábla elejétől kezdődően végigmegy annak összes során. Minden egyes beolvasott sornál létrejön az OnRow esemény.
TRowEvent = procedure(Sender: TObject; var Values: TValuesArray; var Modify: Boolean) of object;
A Values dinamikus tömbön keresztül megkapjuk az adattábla aktuális sorának értékeit. A tömb Variant típusú elemeket tartalmaz. Ha az adott rekord valamelyik értékét módosítani akarjuk, akkor nincs más dolgunk, mint a Values tömb megfelelő elemének értékét megváltoztatnunk. Ha valamilyen adatot megváltoztatunk, akkor a Modify változó értékét igazra kell állítanunk. Ezzel jelezzük a komponens számára a változásokat.
A komponens a módosításokat tranzakcióként kezeli. Ha a tranzakció véglegesítése során valamilyen hiba lépne fel, úgy az adatok nem kerülnek módosításra.
A komponens elkészítése
Az adattábla tartalmát egy ADOQuery komponens segítségével kérdezzük le. A komponenst az adatok elérése mellett, a tranzakciót vezérlő utasítások kiadására is fel fogjuk használni.
Azért, hogy a komponenshez kapcsolt ADOConnection objektum törlésekor a Delphi ne adjon hibaüzenetet, az alábbi metódust kell implementálnunk:
procedure TTableCheck.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (AComponent=FConnection) and (Operation=opRemove) then
FConnection:=Nil;
end;
Egy SQL tranzakció kezdetét a BEGIN TRANSACTION paranccsal kezdhetjük.
SQL.Add('BEGIN TRANSACTION TEST_TRAN;');
Az adattáblán bármilyen módosítást végezhetünk. A módosításokat később egyszerre aktiválhatjuk, vagy semlegesíthetjük.
A módosítások életbeléptetéséhez a COMMIT TRANSACTION parancsot kell kiadnunk.
SQL.Add('COMMIT TRANSACTION TEST_TRAN;');
A módosítások semlegesítését a ROLLBACK TRANSACTION utasítással kérhetjük.
SQL.Add('ROLLBACK TRANSACTION TEST_TRAN;');
Az adattábla egy adott sorának beolvasásához Variant típusú tömböt használunk, így az adott elemek helyén bármilyen értéket tárolhatunk.