A TADOQuery összetevő biztosítja Delphi A fejlesztők képesek adatok lekérésére egy vagy több táblából egy ADO adatbázis az SQL használatával.
Ezek az SQL utasítások lehetnek DDL (Data Definition Language) utasítások, például a CREATE TABLE, ALTER INDEX és így tovább, vagy lehetnek DML (Data Manipulation Language) utasítások, például SELECT, UPDATE és TÖRÖL. A leggyakoribb állítás azonban a SELECT utasítás, amely hasonló nézetet állít elő, mint amely a Table összetevő segítségével elérhető.
Megjegyzés: Annak ellenére, hogy az ADOQuery összetevő segítségével parancsok is végrehajthatók, a ADOCommandkomponens megfelelőbb erre a célra. Leggyakrabban DDL parancsok végrehajtására vagy tárolt eljárás végrehajtására használják (annak ellenére, hogy aTADOStoredProc ilyen feladatokhoz), amelyek nem adják meg az eredménykészletet.
Az ADOQuery összetevőben használt SQL-nek elfogadhatónak kell lennie a használt ADO illesztőprogram számára. Más szavakkal ismernie kell az SQL írásbeli különbségeket, például az MS Access és az MS SQL között.
Mint amikor az ADOTable összetevővel dolgozik, az adatbázisban lévő adatokhoz az ADOQuery összetevő által létrehozott adattár-kapcsolattal kell hozzáférni, azConnectionString Tulajdonság vagy a Kapcsolatingatlan.
Ahhoz, hogy Delphi űrlapot készítsen, amely az ADOQuery összetevővel képes adatokat elérni az Access adatbázisból, egyszerűen dobja el az összes adatot a kapcsolódó adathozzáférési és adatalapú összetevőket, és hozzon létre egy linket, amint azt az előző fejezetekben leírtuk tanfolyam. Az adathozzáférési összetevők: DataSource, ADOConnection, valamint az ADOQuery (az ADOTable helyett) és egy olyan adattudatos összetevő, mint a DBGrid, amire szükségünk van.
Ahogy már kifejtettük, az Object Inspector segítségével az alábbiak szerint állítsa össze az összetevőket a kapcsolat között:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// épít a ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = Hamis
SQL lekérdezés végrehajtása
A TADOQuery összetevőnek nincs TableNametulajdonság, ahogy a TADOTable teszi. A TADOQuery rendelkezik egy tulajdonsággal (TStrings) SQL amely az SQL utasítás tárolására szolgál. Az SQL tulajdonság értékét az Object Inspector segítségével beállíthatja a tervezési időpontban vagy a kódon keresztül futási időben.
Tervezéskor hívja be az SQL tulajdonság-szerkesztőt az Object Inspector ellipszis gombjára kattintva. Gépelje be a következő SQL utasítást: "SELECT * FROM Authors".
Az SQL utasítás kétféle módon végrehajtható, az utasítás típusától függően. Az Data Definition Language utasításokat általában a ExecSQL eljárás. Például egy adott rekord törléséhez egy adott táblából írhat egy DELETE DDL utasítást, és futtathatja a lekérdezést az ExecSQL módszerrel.
A (rendes) SQL utasítások végrehajtása a TADOQuery. Aktív ingatlan Igaz vagy hívja aNyisd ki módszer (alapvetően ugyanaz). Ez a megközelítés hasonló a táblaadatok lekéréséhez a TADOTable összetevővel.
Futási időben az SQL tulajdonságban található SQL utasítás használható bármilyen StringList objektumként:
az ADOQuery1-rel kezdődik Bezárás;
SQL.Clear;
SQL.Add: = 'KIVÁLASZT * A szerzőktől' SQL.Add: = 'RENDELÉS A DESC szerzőnév alapján' Megnyitás;
végén;
A fenti kód futási időben bezárja az adatkészletet, kiüríti az SQL karakterláncot az SQL tulajdonságban, új SQL parancsot rendel hozzá, és az adatkészletet az Open módszer meghívásával aktiválja.
Vegye figyelembe, hogy a mezőobjektumok tartós listájának létrehozása az ADOQuery összetevőkre nyilvánvalóan nincs értelme. A következõ alkalommal, amikor az Open metódust hívja, az SQL annyira különbözhet, hogy a teljes fájlnév (és típus) halmaza megváltozhat. Természetesen nem ez a helyzet abban az esetben, ha az ADOQuery segítségével csak egy táblát vonunk be a sorokból az állandó mezőkészlettel - és az eredményül kapott halmaz az SQL utasítás WHERE részétől függ.
Dinamikus lekérdezések
A TADOQuery komponensek egyik nagy tulajdonsága a params ingatlan. A paraméteres lekérdezés lehetővé teszi a sor / oszlop rugalmas kiválasztását egy paraméter felhasználásával az SQL utasítás WHERE záradékában. A Paraméterek tulajdonság cserélhető paramétereket tesz lehetővé az előre definiált SQL utasításban. A paraméter egy helyőrző egy értékhez a WHERE záradékban, amelyet közvetlenül a lekérdezés megnyitása előtt határoztak meg. A lekérdezésben egy paraméter megadásához használjon kettőspontot (:) egy paraméter neve előtt.
Tervezéskor használja az Object Inspector az SQL tulajdonságot az alábbiak szerint:
ADOQuery1.SQL: = 'KIVÁLASZT * az alkalmazásokat, ahonnan type =: apptype'
Az SQL szerkesztő ablak bezárásakor nyissa meg a Paraméterek ablakot az ellipszis gombra kattintva az Object Inspectorban.
Az előző SQL utasítás paraméterének neve vanAppTípus. A Paraméterek gyűjteményben a paraméterek értékeit a tervezési időben a Paraméterek párbeszédpanel segítségével állíthatjuk be, de a paramétereket általában futásidejűleg módosítjuk. A Paraméterek párbeszédpanelen megadhatók a lekérdezésben használt paraméterek adattípusai és alapértelmezett értékei.
Futási időben a paraméterek megváltoztathatók, és a lekérdezés újra végrehajtható az adatok frissítése céljából. A paraméterezett lekérdezés végrehajtásához minden paraméterhez meg kell adni egy értéket a lekérdezés végrehajtása előtt. A paraméter értékének módosításához vagy a Params tulajdonságot, vagy a ParamByName metódust használjuk. Például, tekintettel a fenti SQL utasításra, futás közben a következő kódot használhatjuk:
az ADOQuery1-rel kezdődik
Bezárás;
SQL.Clear;
SQL.Add ('Kiválasztás * az alkalmazásokból, ahol type =: apptype');
ParamByName (AppTípus '). Value: = 'multimédiás';
Nyisd ki;
végén;
Csakúgy, mint az ADOTable komponens használatakor, az ADOQuery visszaad egy készletet vagy rekordokat egy táblázatból (vagy kettőből vagy többből). Az adatkészletben való navigálás ugyanazzal a módszerrel történik, mint amelyet az "Adatok mögött az adatkészletekben" fejezet ismertet.
Navigálás és szerkesztés a lekérdezésben
Általában az ADOQuery összetevőt nem szabad használni, ha a szerkesztés megtörténik. Az SQL alapú lekérdezéseket leginkább jelentési célokra használják. Ha a lekérdezés eredményhalmazt ad vissza, néha lehetséges a visszaadott adatkészlet szerkesztése. Az eredménykészletnek egyetlen tábla rekordjait kell tartalmaznia, és nem használhat semmilyen SQL összesített funkciót. Az ADOQuery által visszaadott adatkészlet szerkesztése megegyezik az ADOTAble adatkészletének szerkesztésével.
Példa
Néhány ADOQuery művelet megtekintéséhez egy kis példát kódolunk. Készítsünk egy lekérdezést, amely felhasználható a sorok lekérésére az adatbázis különböző tábláiból. Az adatbázis összes táblájának megjelenítéséhez használhatjuk a GetTableNamesmódszer ADOConnection összetevő. Az űrlap OnCreate eseményének GetTableNames neve kitölti a ComboBox-ot a táblázatnevekkel, és a gombbal a lekérdezés lezárására és újra létrehozására szolgál, hogy a kiválasztott táblából le lehessen szerezni a rekordokat. A () eseménykezelőknek a következőnek kell kinézniük:
eljárás TForm1.FormCreate (Feladó: TObject);
kezdődik
ADOConnection1.GetTableNames (ComboBox1.Items);
végén;
eljárás TForm1.Button1Click (Feladó: TObject);
var tblname: húr;
kezdődik
ha a ComboBox1.ItemIndex, akkor lépjen ki;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
az ADOQuery1-rel kezdődik
Bezárás;
SQL.Text: = 'SELECT * FROM' + tblname;
Nyisd ki;
végén;
végén;
Vegye figyelembe, hogy mindez az ADOTable és a TableName tulajdonság használatával valósítható meg.