Delphi - SQL táblák oszlopainak trimmelése

forráskód letöltése
Ebben a cikkben készítünk egy példaprogramot, amely segítségével az SQL szerver egy megadott táblájának varchar típusú mezőit trimmeljük. A funkciót úgy kell érteni, hogy a varchar típusú mezők egyes értékeinél a szöveg elején vagy végén elhelyezkedő szóközöket levágjuk. A szöveg belsejében semmilyen változás nem történik.
A mellékelt példaprogram futtatása előtt az ADOConnection objektum ConnectionString tulajdonságának értékét módosítsa úgy, hogy az SQL szerver összes adatbázisa elérhetővé váljon.
A programot úgy készítjük el, hogy bármely adatbázis, bármely tábláját elérhessük vele.
A kapcsolatot egy ADOConnection komponens segítségével hozzuk létre. A ConnectionString-et úgy kell beállítanunk, hogy az összes adatbázis elérhetővé váljon. Ha ezt így adjuk meg, akkor az alábbi módon, bármilyen adatbázishoz csatlakozhatunk majd vele.
ADOConnection1.ConnectionString:=ConnectionString+';Initial Catalog='+Edit1.Text+';';
A programnak automatikusan kell végrehajtani a táblák adatszerkezetének ellenőrzését és a varchar típusú mezők trimmelését.
Egy tábla adatszerkezetét az sp_columns tárolt SQL eljárással kérdezhetjük le. A tárolt eljárás egy olyan eredménytáblát ad eredményül, amely tartalmazza az adattábla szerkezetének adatait. Az sp_columns eljárás használatához szükségünk van egy ADOStoredProc komponensre.
with SPColumns do begin
  ProcedureName:='sp_Columns';
  Parameters.Clear;
  Parameters.Add;
  Parameters[0].Value:=Edit2.Text;
  Open;
end;
Az sp_columns-nak csak a tábla nevét kell megadnunk paraméterként.
A lekérdezett adatszerkezetet ugyanúgy használhatjuk, mintha egy hagyományos tábla lenne. Minden sorában egy mező tulajdonságai helyezkednek el.
Végig kell mennünk ennek a táblának a rekordjain és fel kell jegyeznünk azokat a mezőket, amelyeknek a TYPE_NAME tulajdonságánál varchar bejegyzést találunk. A mezők nevét a tábla COLUMN_NAME mezője tartalmazza.
A trimmeléshez az UPDATE parancsot, valamint az LTRIM és RTRIM függvényeket használjuk fel.
A parancsot az alábbi formában kell megadnunk.
UPDATE tábla_név SET mező_név = RTRIM(LTRIM(mező_név)), . . . 
Az UPDATE parancs végigmegy a tábla összes során. Használatához szükségünk van egy ADOQuery komponensre.
with ADOQuery1 do begin
  SQL.Clear;
  SQL.Add('UPDATE '+Edit2.Text);
  SetWrited:=False;
  ...
A varchar típusú mezőket úgy jegyezzük fel, hogy az ADOQuery komponens SQL tulajdonságában létrehozunk egy UPDATE parancsot, és ennek a SET ágát folyamatosan bővítjük. Több mezőt, vesszővel elválasztva adhatunk meg. A SetWrited, logikai típusú változóval figyeljük, hogy a SET parancsot beírtuk-e már az SQL property-be.
Az ADOStoredProc eredménytáblájából a következő módon kérdezhetjük le az aktuális mező nevét és típusát.
FName:=SPColumns.Fields.FieldByName('COLUMN_NAME').AsString;
FType:=SPColumns.Fields.FieldByName('TYPE_NAME').AsString;
Felhasználva a mezők nevét és tulajdonságát, valamint a SetWrited változót, az ADOQuery1 SQL property-jét folyamatosan bővítjük, ha az aktuális mező varchar típusú. Az UPFATE parancsot csak akkor futtatjuk le, ha végigmentük az SPColumns összes során.
if not SetWrited then begin
  SQL.Add('SET '+FName+' = RTRIM(LTRIM('+FName+'))');
  SetWrited:=True;
end
else
  SQL.Add(','+FName+' = RTRIM(LTRIM('+FName+'))');
A parancs végrehajtásához meg kell hívnunk az ADOQuery1 Open metódusát. A parancs lefut, de a Delphi egy hibaüzenettel reagál rá, mivel az UPDATE parancs semmilyen eredménytáblát nem ad vissza. Ezért az Open metódus meghívását egy try - except blokkban kell elhelyeznünk.