
A mellékelt példaprogram megnyitása előtt az SQLConverter.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
Amennyiben a Unit1.pas forráskódban található ADOConnection1 objektum, ConnectionString értékének beállítása az Ön gépén nem megfelelő, úgy módosítsa azt, hogy a Northwind adatbázis elérhetővé váljon.
A komponenst Connection property-jén keresztül egy ADOConnection objektumhoz rendelhetjük hozzá. Az adatbázishoz történő kapcsolódást egy ADOConnection objektum segítségével kell megvalósítani. Az adatbázison belül, a konvertálni kívánt tábla nevét az SQLTableName property-ben adhatjuk meg.
Az új tábla nevét a NewTableName property-ben állíthatjuk be. Nem kell kiterjesztést megadnunk, csak a célkönyvtár elérési útját és a tábla nevét. A komponens a konvertálás során a táblanevet automatikusan ellátja a db vagy dbf végződéssel.
A konvertálás a ConvertToParadox vagy ConvertToDBase metódusok meghívására történik, attól függően, hogy az SQL táblát milyen formátumba akarjuk konvertálni.
function ConvertToParadox: Boolean;
function ConvertToDBase: Boolean;
Mindkét függvény visszatérési értéke logikai. Csak akkor térnek vissza igaz értékkel, ha a tábla létrehozása és az adatok áttöltése is sikeres volt.
A komponens automatikusan megpróbálja az SQL adatszerkezethez legjobban illeszkedő DBase és Paradox táblaszerkezeteket létrehozni.
A komponens elkészítése
Az SQL-ben, DBase-ben és a Paradox-ban használható adatszerkezetek nagyon eltérőek.
Az SQL szerverhez a szokásos módon, ADO komponensek segítségével csatlakozhatunk. Egy TADOStoredProc komponens segítségével felhasználjuk az sp_columns tárolt eljárást, amely a megadott SQL tábla szerkezetéről szolgáltat információkat.
A lekérdezésből, számunkra 3 mező fontos, ezek a következők:
| Mezőnév |
Jelentése |
| COLUMN_NAME |
Mezőnév. |
| TYPE_NAME |
A mező típusa, SQL elnevezéssel. |
| LENGTH |
A mező hossza. |
Első lépésben létre kell hoznunk egy új adattáblát, a megfelelő mezőszerkezettel. Ehhez egy TTable objektumot használunk.
with Table do begin
Active:=False;
TableType:=ttDBase;
TableName:=FNewTableName;
FieldDefs.Clear;
end;
...
with Table.FieldDefs.AddFieldDef do begin
A FieldDef property Name tagjában adhatjuk meg a mezőnevet, a DataType-ban a mező típusát, valamint a Size tagban a mező méretét, ha szükséges.
Amikor dinamikusan hozunk létre adattáblákat, a mezők típusát a TFieldType típussal definiálhatjuk. Az alábbi két táblázat összefoglalja a DBase for Windows és a Paradox 7 által használható mezőtípusokat, valamint azok TFieldType megfelelőit.
DBase mezők
| DBase típus |
TFieldType |
| CHARACTER |
ftString |
| FLOAT |
ftFloat |
| NUMBER |
ftFloat |
| DATE |
ftDate |
| LOGICAL |
ftBoolean |
| MEMO |
ftMemo |
| OLE |
ftDBaseOLE |
| BINARY |
ftTypedBinary |
Paradox mezők
| Paradox típus |
TFieldType |
| Alpha |
ftString |
| Number |
ftFloat |
| Money |
ftCurrency |
| Short |
ftSmallInt |
| Long Integer |
ftInteger |
| BCD |
ftBCD |
| Date |
ftDate |
| Time |
ftTime |
| TimeStamp |
ftDateTime |
| Memo |
ftMemo |
| Formatted Memo |
ftFmtMemo |
| Graphic |
ftGraphic |
| OLE |
ftParadoxOLE |
| Logical |
ftBoolean |
| AutoIncrement |
ftAutoInc |
| Binary |
ftBlob |
| Bytes |
ftBytes |
Az adatszerkezet létrehozásánál meg kell próbálnunk az adott SQL mezőhöz leginkább passzoló típust megtalálni. Nyilván sem a DBase, sem a Paradox nem rendelkezik annyi lehetőséggel, mint az SQL szerver.
Miután beállítottuk a TTable szerkezetét, a CreateTable metódus meghívásával létrejön a tábla.
Miután elkészült a tábla, át kell töltenünk a szerveren található rekordokat. A rekordok eléréséhez egy TADOTable objektumot célszerű használni, mivel jelen esetben mindenre szükségünk van.
while not ADOTable.Eof do begin
Table.Append;
for i:=0 to Table.FieldCount-1 do
try
Table.Fields[i].Value:=ADOTable.Fields[i].Value;
except
end;
Table.Post;
ADOTable.Next;
end;