Delphi - Rekordok módosítása, gyorsan

forráskód letöltése
Készítünk egy komponenst, amely segítségével egy tetszőleges adatbázis, tetszőleges táblájában módosíthatunk megadott rekordokat. A módosítás végrehajtását feltételhez kötjük. Meg kell adnunk egy mezőt, amelynek az értékeit figyelni akarjuk, valamint egy lista segítségével, azokat az értékeket, amelyeket módosítani akarunk. A komponens végignézi a tábla összes sorát, és a listában felsorolt értékekkel rendelkező rekordokban, a megadott mezőt felülírja.
A mellékelt példaprogram megnyitása előtt az SQLUpdate.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.
Ahhoz, hogy az SQL szerverhez csatlakozzunk, szükséges egy TADOConnection komponens, amelyhez komponensünk Connection property-jén keresztül csatlakozhatunk.
A TableName property-ben adhatjuk meg az SQL tábla nevét, az UpdateColumn-ban pedig annak a mezőnek a nevét, amelynek az értékeit ellenőrizni szeretnénk.
A módosítandó értékek listáját az UpdateList, TStringList típusú property-ben adhatjuk meg. Ha a komponens olyan értéket talál, amely szerepel a listában, akkor az adott rekordban, az UpdateColumn-ban megadott mező értékét módosítja, a NewValue property-ben megadott értékre.
A módosítás az Execute metódus meghívására kezdődik.
A komponenst a TComponent osztályból származtatjuk.
Ahhoz, hogy egy ADOConnection objektum-ot tudjunk használni, a Connection property-t az alábbi módon kell deklarálnunk.
property Connection: TADOConnection read FConnection write SetConnection;
Ha felhasználjuk a komponenst, hozzárendelünk egy ADOConnection objektumot, amelyet utána törlünk, akkor a Delphi hibaüzenetet fog adni. Ennek elkerülésére, implementálnunk kell egy eseményt, amelyben ezt a lehetőséget lekezelhetjük.
procedure TSQLDelete.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (AComponent=FConnection) and (Operation=opRemove) then
    FConnection:=Nil;
end;
A komponens lényege az Execute metódusban található. Az adatbázishoz, egy TADOTable segítségével csatlakozunk. Végig kell néznünk az adattábla összes sorát.
while not Eof do begin
  for i:=0 to FUpdateList.Count-1 do
  if TrimRight(TrimLeft(FieldByName(FUpdateColumn).AsString))=FUpdateList[i] then begin
    Edit;
    FieldByName(FUpdateColumn).AsString:=FNewValue;
    Post;
  end;
  Next;
end;
Minden egyes beolvasott rekord esetén végig kell néznünk az UpdateList-ben megadott értékeket. Ha az adott érték megegyezik az UpdateColumn mezőben szereplő értékkel, akkor azt a rekordot módosítjuk.
A TrimRight és TrimLeft függvények használatára a Char típusú SQL mezők miatt van szükség. Ezeket a szerver szóközökkel egészíti ki a megadott mezőméretre.