|
|
TADOConnection komponens
ADO paletta 3. rész
|
|
Példaprogram letöltése
46709 bájt
|
A hagyományos, BDE világban az SQL parancsokat a Query komponens segítségével hajtottuk végre. Ha a parancs eredményhalmazzal tért vissza, az Open metódussal indítottuk, ha nem, az ExecSQL metódus kiadásával. A Delphi 5-ben egy kicsit egyszerűbb a dolgunk, hiszen van Execute metódusunk, aminek teljesen mindegy, hogy a parancsnak van-e visszatérési értéke vagy nincs. Az ADOExpress palettán megtaláljuk az ADOQuery komponenst, az SQL parancsok végrehajtására mégis inkább egy új komponenst ajánlanak, az ADOCommand-ot.
Példaprogram
A programban a Command objektum alkalmazására mutatunk több példát.
1. példa: Az adatbáziskapcsolatot ADOConnection objektummal hozzuk létre, és erre csatlakozunk a Command objektummal. A program mellé mellékelt teszt1.mdb nevű Access adatbázishoz csatlakozunk. Az sql utasítás egyetlen SELECT, amelyben a Teszt1 tábla tartalmát egy html oldalba szelektáljuk, majd a ShellExecute API hívásával meg is jelenítjük a böngészőben.
ADOConnection.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\teszt1.mdb;Persist Security Info=False';
ADOConnection.Open;
with ADOCommand do
begin
Connection := ADOCOnnection;
CommandText := 'SELECT * INTO [TestPage.htm]
IN "." [HTML Export;] FROM Teszt1';
Execute;
ShellExecute(Handle, 'open', 'TestPage.htm', nil, '', SW_SHOW);
end;
ADOConnection.Close;
2. példa: Ugyanezt a parancsot hajtjuk végre, de nem Connection objektumon keresztül, hanem közvetlenül.
with ADOCommand do
begin
Connection := nil;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\teszt1.mdb; Persist Security Info=False';
CommandText := 'SELECT * INTO [TestPage.htm]
IN "." [HTML Export;] FROM Teszt1';
Execute;
ShellExecute(Handle, 'open', 'TestPage.htm', nil, '', SW_SHOW);
end;
3. példa: Még mindig a teszt1.mdb Access adatbázisra csatlakozunk, de most a tábla tartalmát szöveges állományba mentjük ki. A célfájl neve MyText.txt, és belső szerkezetét a MyText.txt mellé létrehozott schema.ini fájlban adhatjuk meg.
with ADOCommand do
begin
Connection := nil;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\teszt1.mdb; Persist Security Info=False';
CommandText := 'SELECT * INTO MyText#txt
IN "c:\" "Text;" FROM Teszt1';
Execute;
end;
A schema.ini fájl tartalma:
[MyText.txt]
ColNameHeader=True
CharacterSet=1250
Format=Delimited(&)
Col1=a1 Char Width 10
Col2=a3 Char Width 10
Col3=a3 Char Width 10
Col4=a4 Char Width 10
Col5=a5 Char Width 10
Col1=a6 Char Width 10
Col2=a7 Char Width 10
Col3=a8 Char Width 10
Col4=a9 Char Width 10
Col5=a10 Char Width 10
A Format= sorban adjuk meg, hogy a mezőket hogyan akarjuk egymástól elválasztani. A következő lehetőségeink vannak:
- TabDelimited: tabulátorral választjuk el a mezőket.
- CSVDelimited: vesszővel választjuk el a mezőket.
- Delimited(valami): 'valami' karakterrel választjuk el a mezőket.
- Delimited( ): Nem adunk meg elválasztó karaktert.
- FixedLength: Fix széles mezőket szeretnénk előállítani.
4. példa: Amelyik számítógépre a Microsoft betette a lábát, ott biztosan van NorthWind.mdb nevű Access példaadatbázis is. Az imént 3 példányban találtam meg a saját gépemen, az Office alatt, az MDAC ADO és RDS példái között. Ez utóbbi két könyvtárat az MDAC 2.6 SDK telepíti, amit letölthetünk a www.microsoft.com/data/ címről. Ebben a példában erre az adatbázisra csatlakozunk, és az Orders táblából tabdelimited fájlba exportáljuk az adatokat. A fájl helye az előző példához hasonlóan szintén a c gyökér, ezért a fájl szerkezetére vonatkozó információk ugyanabba a schema.ini-be kerülnek. Ami fontos, az a Format=TabDelimited sor.
with ADOCommand do
begin
Connection := nil;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Program Files\Microsoft Data Access SDK\
Samples\ADO\NWIND.mdb; Persist Security Info=False';
CommandText := 'SELECT * INTO MyText#csv
IN "c:\" "Text;" FROM Orders';
Execute;
end;
5. példa: Ebben a részben leellenőrizhetjük, hogy használható-e a keletkezett fájl, és egy ADOTable komponenssel visszaolvassuk azt egy gridbe.
with ADOTable do
begin
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\;Extended Properties="Text;"';
TableName := 'MyText#csv';
Open;
end;
A szövegfájl adatait visszaolvashatnánk Command objektummal is, de az így kapott recordset-et nem lehet DBGrid-ben megjeleníteni. De ha szükség lenne rá, a kód a következő:
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\;Extended Properties="Text;"';
CommandText := 'MyText#csv';
CommandType := cmdTable;
AdoDataSet.Recordset := Execute;
TADOCommand
Az ADOCommand komponenst arra használhatjuk, hogy SQL utasításokat, ezen belül is leginkább DDL illetve más, eredményhalmazt nem generáló parancsokat hajtsunk végre az adatbázison. A TADOCommand tulajdonképpen az ADO Command objektumának Delphi reprezentációja. Mint azt az első fejezetben írtuk, az ADO gyakorlatilag 3 objektumra támaszkodik, és ennek a három objektumnak a megfelelői a TADOConnection, TADODataSet és a TADOCommand. A másik három objektum, a TADOTable, TADOQuery és a TADOStoredProc csak azért kapott helyet a palettán, mert logikailag beleillik a Delphi adatbázis-kezelő komponenseinek a struktúrájába, de a műveleteket ők is a három alapvető objektumon keresztül valósítják meg. Így aztán előfordul, hogy egy adott probléma megoldására 2-3 féle megoldás is kínálkozik.
Az ADOCommand komponens használata rendkívül egyszerű. Dobjunk egyet a Form-ra és a Connection property-jén keresztül kössük össze egy ADOConnection objektummal. Ez nem feltétlenül szükséges, itt is létezik a ConnectionString property, így közvetlen adatbázis kapcsolatot is felépíthetünk. A végrehajtani kívánt utasítást a CommandText property-be kell beírni, az utasítás típusát jelezhetjük a CommandType property kitöltésével. A végrehajtás az Execute metódus hívásával történik. A parancsot paraméterezhetjük is a Parameters property segítségével.
Ha nagyon szükséges, az ADOCommand is tud result set-et fogadni. Az Execute metódus visszatérési értékét (ami egy record set interfész) ilyenkor közvetlenül egy DataSet komponensbe kell irányítani: ADODataSet1.RecordSet := ADOCommand1.Execute.
Lássuk a property-ket, metódusokat!
Property-k
CommandObject: A property direkt hozzáférést biztosít az ADO Command objektumához. Akkor van rá szükség, ha egy olyan metódust szeretnénk elérni, amit a Delphi ADOCommand komponense nem valósít meg.
CommandText: A komponens által végrehajtott SQL utasítás szövegét tartalmazza. Ha az utasítás paraméterezett, a paraméterek a Parameters property-be kerülnek.
CommandTimeout: A parancs végrehajtására szánt időt korlátozhatjuk másodpercben. Ha az itt beállított idő lejár, a parancs végrehajtása sikertelen.
CommandType: A CommandText mezőbe írt SQL parancs típusát állítjuk itt be. Az alapértelmezett érték: cmdUnknown. Ha így hagyjuk, az ADO maga dönti el, hogy mi van a CommandText-ben, és hogyan kell feldolgozni. A nagyobb teljesítmény érdekében célszerű nekünk kitölteni. A lehetséges értékek a következők:
- cmdUnknown: A CommandText property-ben szereplő parancs típusa ismeretlen.
- cmdText: A parancs egy SQL utasítás.
- cmdTable: A CommandText property egy tábla nevét tartalmazza.
- cmdStoredProc: A CommandText property egy tárolt eljárás nevét tartalmazza.
- cmdFile: A CommandText property egy elmentett recordset nevét tartalmazza.
-cmdTableDirect: A CommandText property egy tábla nevét tartalmazza. Abban különbözik a cmdTable-től, hogy ott az ADO egy SQL query-vel kérdezi le a tábla összes oszlopát, itt pedig a provider-t utasítja erre.
Connection: Akkor kell beállítani, ha TADOConnection komponensen keresztül kapcsolódunk az adatbázisra.
ConnectionString: Közvetlen adatbázis kapcsolat esetén a kapcsolódás paramétereit kell itt beállítanunk. Részletesen lásd a 2. fejezetben, a Connection objektum tárgyalásánál.
Name: A komponens neve.
ParamCheck: Booelan változó, ha értéke True, minden olyan esetben, amikor a CommandText property-ben lévő SQL utasítás megváltozik, újra generálódik a paraméterlista az utasítás szövegében lévő Param típusú paraméterhivatkozások alapján.
Parameters: A CommandText-ben lévő SQL utasítás paramétereit tartalmazó property. Csak akkor van értelme, ha a CommandType értéke cmdText vagy cmdStoredProc.
Prepared: Boolean változó. Ha értéke True, az SQL utasítás futása előtt az ADO előkészíti az adatbázist ugyanúgy, ahogy a BDE Prepared is teszi. Alapértelmezett értéke False.
Properties: Az ADO Command objektum Properties kollekciójának közvetlen elérésére szolgál. A Properties kollekció Property objektumok gyűjteménye, minden Property objektum a Command objektum egy jellemző paraméterét írja le. A példaprogramban előcsaljuk ezeket a Property-ket.
States: A Command objektum pillanatnyi állapotát tartalmazza ez a változó. Értéke lehet stClosed, stOpen, stConnecting, stExecuting és stFetching.
Metódusok
Assign: A metódus egy ADOCommand komponens property-jeit egy másik ADOCommand komponensbe másolja. Példa: ADOCommand1.Assign(ADOCommand2);
Cancel: Futó parancs végrehajtását szakítja meg. Hogy meg lehessen szakítani, a parancsnak aszinkron módon kell futnia (TExecuteOption => eoAsyncExecute). Ha nem így fut, exception történik.
Create: A Command objektum konstruktora.
Destroy: A Command objektum destruktora.
Execute: Végrehajtja a CommandText-ben meghatározott SQL utasítást. A RecordsAffected változóban az érintett sorok számát kapjuk vissza. Az ExecuteOptions paraméter beállításával a futás karakterisztikáját szabályozhatjuk. Értéke lehet eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking vagy eoExecuteNoRecords.
- eoAsyncExecute: a parancs aszinkron módban fut.
- eoAsyncFetch: azt jelzi, hogy miután az Initial Fetch Size (Connection) property-ben meghatározott számú sor letöltődött, a fennmaradó sorok aszinkron módon töltődnek le. Ha a keresett sor még nem töltődött le, az alkalmazás fő végrehajtási szála megáll (blokkolódik), amíg a rekord elérhetővé nem válik.
- eoAsyncFetchNonBlocking: Ugyanazt jelenti, mint az előző, csak a végrehajtási szál soha nem áll meg fetch alatt.
- eoExecuteNoRecords: nem kérünk visszatérési értéket. Ha mégis lenne, azt az objektum eldobja.
|
Cikksorozat
| 2591 | Windows | Tippek és trükkök - RAS - Modem csengetési szám állítása | 1. rész |
| 2622 | Windows | Tippek és trükkök - Program futtatása más felhasználóként | 2. rész |
| 2640 | Windows | A Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák | 3. rész |
| 2657 | Windows | Tippek és trükkök - Internet Explorer | 4. rész |
| 2667 | Windows | Tippek és trükkök | 5. rész |
| 2684 | Windows | Alapértelmezések állítása, telepítési fájlok helye, intéző nézetek | 6. rész |
| 2696 | Windows | Biztonsági trükkök | 7. rész |
| 2702 | Windows | Windows XP trükkök | 8. rész |
| 2729 | Windows | Windows 2000 és XP tippek, trükkök | 9. rész |
| 2757 | Windows | Registry trükkök | 10. rész |
| 2784 | Windows | Tippek, trükkök | 11. rész |
| 2829 | Windows | Tippek, trükkök | 12. rész |
| 2889 | Windows | Windows XP tippek | 13. rész |
| 2909 | Windows | Tippek Windows XP-hez | 14. rész |
| 2919 | Windows | Windows tippek | 15. rész |
| 2924 | Windows | Windows tippek | 16. rész |
| 2963 | Windows | Windows tippek | 17. rész |
| 2973 | Windows | Windows Tippek | 18. rész |
| 2981 | Windows | Windows tippek | 19. rész |
| 2990 | Windows | Tippek-trükkök | 20. rész |
| 3027 | Windows | IIS tippek | 21. rész |
| 3034 | Windows | Windows XP tippek-trükkök | 22. rész |
| 3088 | Windows | Windows 2000/XP tippek, trükkök | 23. rész |
| 3133 | Windows | Windows XP tippcsokor | 24. rész |
| 3140 | Windows | Windows XP tippek, trükkök | 25. rész |
| 3152 | Windows | XP és IIS tippek - trükkök | 26. rész |
| 3158 | Windows | Windows XP tippek, trükkök | 27. rész |
| 3168 | Windows | Tippek, trükkök | 28. rész |
| 3170 | Windows | Registry trükkök | 29. rész |
| 3179 | Windows | Tippek, trükkök | 30. rész |
| 3197 | Windows | Windows XP tippek, trükkök | 31. rész |
| 3205 | Windows | Tippek, trükkök | 32. rész |
| 3214 | Windows | Tippek, trükkök | 33. rész |
| 3223 | Windows | Tippek, trükkök | 34. rész |
| 3233 | Windows | Tippek, trükkök | 35. rész |
| 3271 | Windows | Tippek, trükkök | 36. rész |
| 3307 | Windows | Tippek, trükkök | 37. rész |
| 3370 | Windows | Tippek, trükkök | 38. rész |
| 3399 | Windows | Tippek, trükkök | 39. rész |
| 3510 | Windows | Tippek, trükkök | 40. rész |
| 3611 | Windows | Hardverrel kapcsolatos tippek, trükkök | 41. rész |
| 3668 | Windows | Registry trükkök | 42. rész |
| 3711 | Windows | Tippek, trükkök | 43. rész |
| 3771 | Windows | Tippek, trükkök | 44. rész |
| 3801 | Windows | Tippek, trükkök | 45. rész |
| 3831 | Windows | Tippek, trükkök | 46. rész |
| 3891 | Windows | Tippek, trükkök | 47. rész |
| 3921 | Windows | Tippek, trükkök | 48. rész |
| 3981 | Windows | Tippek, trükkök | 49. rész |
| 4041 | Windows | Tippek, trükkök | 50. rész |
| 4071 | Windows | Tippek, trükkök | 51. rész |
| 4151 | Windows | Tippek, trükkök | 52. rész |
| 4171 | C# | Tippek, trükkök | 53. rész |
| 4211 | Windows | Tippek, trükkök | 54. rész |
| 4251 | Windows | Tippek, trükkök | 55. rész |
| 4281 | Windows | Tippek, trükkök | 56. rész |
| 3589 | Delphi | Tippek, trükkök | 57. rész |
| 3718 | Delphi | Tippek, trükkök | 58. rész |
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 45. 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!
|