HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

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

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. 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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |