|
|
TADOQuery komponens
ADO paletta 7. rész
|
|
Példaprogram letöltése
18138 bájt
|
A cikkben az ADO komponenspaletta TADOQuery komponensét mutatjuk be. A komponens a BDE TQuery komponenséhez hasonlóan egy vagy több tábla adatainak SQL utasításon keresztül történő elérésére szolgál.
A TADOQuery komponens segítségével SQL lekérdezéseket tehetünk fel az ADO adatforrásunknak. DDL utasításokat is kiadhatunk. A lekérdezések összeállításánál a megszokott módon használhatunk paramétereket a Parameters property-n keresztül. A SELECT tartalmú query-t az Open metódussal nyithatjuk meg. Az összes többi SQL utasításhoz az ExecSQL metódust használhatjuk.
Lássuk a property-ket, metódusokat, eseményeket!
Property-k:
DataSource: A paraméterátadás egy módja lehet, hogy a query-hez egy másik adatforrást kapcsolunk a DataSource property-n keresztül. Ez az adatforrás lehet egy tábla, egy másik query vagy bármilyen TDataSet leszármazott, és a lekérdezésünk az értéket még nem kapott paramétereit itt keresi meg. A paraméter nevének ekkor meg kell egyeznie a kapcsolt adatforrás valamely mezejének a nevével. A Delphi help-ből kölcsönvett példa a következő:
A TADOQuery komponens (ADOQuery2) az alábbi paraméteres SQL utasítást tartalmazza, és a CustNo paraméter értékét egy másik adatforrás (ADOQuery1) szolgáltatja a DataSource property-n keresztül.
SELECT * FROM Orders O WHERE (O.CustNo = :CustNo)
Amikor a query-t futtatjuk, a kapcsolt adatforrásnak is nyitva kell lennie. A paraméterek feltöltését a Prepare metódus végzi.
with ADOQuery2 do
begin
DataSource := DataSource1;
Prepared := True;
Open;
end;
Ha a query SELECT utasítást tartalmaz, minden esetben, amikor a kapcsolt adatforrás rekordmutatója megváltozik, újra lefut. Ilyen módon könnyen master-detail viszonyt létesíthetünk két adatforrás között. A query lesz a detail adathalmaz, és a DataSource property mutat a Master-re.
Ha a query nem SELECT, a kapcsolt adatforrás változása esetén nem fut újra, ha szükséges, nekünk kell gondoskodnunk róla.
RowsAffected: Az utoljára végrehajtott query által érintett sorok számát tartalmazza. (Pl. hány sort update-eltünk vagy töröltünk.) Ha a query valamiért sikertelen volt, a RowsAffected értéke -1 lesz.
SQL: A query által végrehajtandó SQL utasítás szövegét tartalmazza.
Metódusok:
ExecSQL: A metódus az SQL property-ben megadott utasítást futtatja. Olyan utasítások végrehajtására való, amelyek nem produkálnak eredményhalmazt. (INSERT, UPDATE, CREATE TABLE, stb.) A SELECT utasításhoz az Open metódust kell használnunk. Ha az utasítás paramétereket is tartalmaz, a Parameters property-t használhatjuk.
Események:
A TCustomADODataSet komponenshez képest nem vezet be új eseményt.
Példaprogram
Szokás szerint a NorthWind SQL példaadatbázist használjuk a teszteléshez. A ConnectionString alapértelmezett értéke:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;
Initial Catalog=Northwind;Data Source=NALA
SQL Server esetén a Data Source paraméter értékét le kell cserélni a gazdaszámítógép nevére. Ha nincs SQL Server a gépen, meg lehet próbálkozni a NorthWind Access változatával. A ConnectionString ekkor valami ilyesmi lesz:
Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;
Data Source=C:\Program Files\Microsoft Data Access SDK\Samples\ADO\NWIND.mdb;
Ha nincs Northwind adatbázis, bármi mással is próbálkozhatunk, hiszen a programban van Connection String szerkesztési lehetőség.
A példaprogramban először csatlakozzunk az adatbázisra a Connect gomb megnyomásával. A 'SELECT products' gomb megnyomásával egy TADOQuery komponenst állítunk be, majd a lekérdezést le is futtatjuk.
with ADOQuery1, SQL do
begin
Close;
Clear;
Add('SELECT * FROM Products');
Open;
end;
A gomb alatti radiogroup a Sort property használatát mutatja be.
ADOQuery1.Sort := 'ProductName';
A property beállításával a recordset sorrendje megváltozik. Ez nem új lekérdezés futtatását jelenti, hanem csak az eredményhalmaz sorbarendezését a kliens oldalon. A kifejezésben vesszővel elválasztva több mezőnevet is felsorolhatunk, és használhatjuk az ASC(ENDING) és DESC(ENDING) szavakat is.
A MaxRecord property beállításával az eredményhalmaz rekordjainak maximális számát adhatjuk meg. Ennél több nem töltődik le.
Az Update gomb megnyomásával egy eredményhalmazt nem produkáló SQL utasítást hajtunk végre. Ekkor az ExecSQL metódust kell használnunk az Open helyett. Az RowsAffected property-ben visszakapjuk a módosított rekordok számát.
with ADOQuery1, SQL do
begin
Close;
Clear;
Add('update products');
Add('set ProductName = ProductName + ''1''');
Add('where CategoryID = 2');
ExecSQL;
sb1.SimpleText := Inttostr(RowsAffected);
end;
Példaképpen még két SQL kifejezést elküldünk az adatbázisnak a TADOQuery komponens segítségével. Az első egy tartalmazásvizsgálatra mutat példát, a másik egy beágyazott SELECT-re.
SELECT CategoryID, ProductID, ProductName
FROM Products
WHERE CategoryID BETWEEN 2 and 4
ORDER BY CategoryID, ProductID
SELECT OrdD1.OrderID, OrdD1.ProductID, OrdD1.Quantity
FROM [Order Details] OrdD1
WHERE OrdD1.Quantity > ALL
(SELECT OrdD2.Quantity
FROM [Order Details] OrdD2 JOIN Products Prd
ON OrdD2.ProductID = Prd.ProductID
WHERE Prd.CategoryID = 4)
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 107. 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!
|