TADOQuery komponenta pruža Delphi programerima mogućnost dohvaćanja podataka iz jedne ili više tablica iz ADO baza podataka pomoću SQL-a.
Ovi SQL izrazi mogu biti DDL (Jezik definicije podataka) izjave poput CREATE TABLE, ALTER INDEX i sl. Ili to mogu biti DML (jezik upravljanja podacima), kao što su SELECT, UPDATE i IZBRISATI. Najčešća izjava, međutim, je stavka SELECT, koja stvara pogled sličan onome dostupnom korištenjem komponente tablice.
Napomena: iako je izvršenje naredbi pomoću komponente ADOQuery moguće, ADOCommandkomponenta je prikladnija za ovu svrhu. Najčešće se koristi za izvršavanje DDL naredbi ili za izvršavanje pohranjene procedure (iako biste trebali koristitiTADOStoredProc za takve zadatke) koji ne vraća skup rezultata.
SQL koji se koristi u komponenti ADOQuery mora biti prihvatljiv za ADO pogonitelj koji se koristi. Drugim riječima, trebali biste biti upoznati s razlikama u pisanju SQL-a, na primjer, MS Access i MS SQL.
Kao i pri radu s komponentom ADOTable, podacima u bazi podataka pristupa se pomoću veze za pohranu podataka koju uspostavlja komponenta ADOQuery koristeći svoju
ConnectionString svojstva ili preko zasebne komponente ADOConnection navedene u Vezanekretnine.Da biste napravili Delphi obrazac koji može dohvatiti podatke iz Access baze podataka pomoću komponente ADOQuery, jednostavno ispustite sve povezane komponente pristupa i podacima na njima i čine vezu kao što je opisano u prethodnim poglavljima ovog tečaj. Potrebne su komponente za pristup podacima: DataSource, ADOConnection, zajedno s ADOQuery (umjesto ADOTable) i jednom komponentom svjesnom podataka poput DBGrid.
Kao što je već objašnjeno, pomoću inspektora za objekt postavite vezu između tih komponenti na sljedeći način:
DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// izraditi ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = Netačno
Izvođenje SQL upita
TADOQuery komponenta nema a tablenamesvojstvo kao što to čini TADOTable. TADOQuery ima nazvano svojstvo (TStrings) SQL koji se koristi za spremanje SQL izraza. Vrijednost SQL svojstva možete postaviti s Object Inspektorom u vrijeme projektiranja ili putem koda u vrijeme izvođenja.
U vrijeme dizajniranja zazovite uređivač svojstava za SQL svojstvo klikom na gumb elipse u Object Inspectoru. Upišite sljedeću SQL izjavu: "SELECT * FROM Authors".
SQL izjava može se izvršiti na dva načina, ovisno o vrsti izjave. Izjave jezika definicije podataka obično se izvode s ExecSQL metoda. Na primjer, za brisanje određenog zapisa iz određene tablice možete napisati DELETE DDL izjavu i pokrenuti upit metodom ExecSQL.
(Obični) SQL izrazi izvršavaju se postavljanjem TADOQuery. Aktivan vlasništvo Pravi ili pozivom naOtvorena metoda (bitno isto). Ovaj je pristup sličan dohvaćanju podataka tablice s TADOTable komponentom.
U vrijeme izvođenja SQL izraz u SQL svojstvu može se koristiti kao bilo koji objekt StringList:
s ADOQuery1 započinju Close;
SQL.Clear;
SQL.Add: = 'ODABIR * OD autora' SQL.Add: = 'NARUČITE PO autorskom imenu DESC' Otvori;
kraj;
Gornji kôd, u vrijeme izvođenja, zatvara skup podataka, prazni SQL niz u SQL svojstvu, dodjeljuje novu SQL naredbu i aktivira skup podataka pozivom Otvori metodu.
Imajte na umu da stvaranje opornog popisa polja polja za komponentu ADOQuery nema smisla. Sljedeći put kad nazovete metodu Otvori, SQL može biti toliko različit da se može promijeniti cijeli skup imena (i vrsta). Naravno, to nije slučaj ako koristimo ADOQuery za dohvaćanje redaka iz samo jedne tablice s konstantnim setom polja - a rezultirajući skup ovisi o WHERE dijelu SQL izraza.
Dinamički upiti
Jedno od sjajnih svojstava TADOQuery komponenata je parametri nekretnine. Parametrizirani upit je onaj koji dopušta fleksibilan odabir retka / stupca koristeći parametar WHERE u SQL izrazu. Svojstvo Params omogućava zamjenjive parametre u unaprijed definiranom SQL izrazu. Parametar je rezervirano mjesto za vrijednost u rečenici WHERE, definiranu neposredno prije otvaranja upita. Za određivanje parametra u upitu, koristite dvotočku (:) ispred naziva parametra.
Za vrijeme projektiranja koristite Object Inspector za postavljanje SQL svojstva na sljedeći način:
ADOQuery1.SQL: = 'IZBOR * IZ PRIJAVE GDJE tip =: apptype'
Kad zatvorite prozor SQL uređivača otvorite prozor Parameters klikom na gumb elipse u Object Inspectoru.
Ime u parametru u prethodnom SQL izrazu je imenovanoVrsta programa. Vrijednosti parametara u zbirci Params možemo postaviti u vrijeme dizajna putem dijaloškog okvira Parameters, ali većinu vremena mijenjat ćemo parametre tokom izvođenja. Dijalog parametara može se koristiti za određivanje vrsta podataka i zadanih vrijednosti parametara koji se koriste u upitu.
Tijekom izvođenja, parametri se mogu mijenjati i upit ponovno izvršiti za osvježavanje podataka. Da biste izvršili parametrizirani upit, potrebno je unijeti vrijednost za svaki parametar prije izvršenja upita. Za izmjenu vrijednosti parametra koristimo ili svojstvo Params ili ParamByName. Na primjer, s obzirom na SQL izraz kao što je gore, u vrijeme izvođenja mogli bismo koristiti sljedeći kod:
s ADOQuery1 započinju
Zatvoriti;
SQL.Clear;
SQL.Add ('SELECT * FROM Applications WhereERE type =: apptype');
. ParamByName ( 'Vrsta programa') Vrijednost: = 'multimedijalni';
Otvorena;
kraj;
Kao kod rada s ADOTable komponentom, ADOQuery vraća skup ili zapise iz tablice (ili dvije ili više). Kretanje po skupu podataka vrši se istim skupom metoda koje su opisane u poglavlju „Iza podataka u skupovima podataka”.
Kretanje i uređivanje upita
Općenito, komponenta ADOQuery se ne smije koristiti kada se uređivanje vrši. SQL upiti se uglavnom koriste u svrhu izvješćivanja. Ako vaš upit vrati skup rezultata, ponekad je moguće urediti vraćeni skup podataka. Skup rezultata mora sadržavati zapise iz jedne tablice i ne smije koristiti nikakve SQL funkcije objedinjavanja. Uređivanje skupa podataka koji je vratio ADOQuery isto je kao uređivanje skupa podataka ADOTAble.
Primjer
Da bismo vidjeli neke akcije ADOQuery, navest ćemo mali primjer. Napravimo upit pomoću kojeg se mogu dohvatiti redovi iz različitih tablica u bazi podataka. Za prikaz popisa svih tablica u bazi podataka koje možemo koristiti GetTableNamesmetoda ADOConnection komponenta. GetTableNames u OnCreate događaju obrasca ispunjava ComboBox imenima tablice, a gumb se koristi za zatvaranje upita i ponovno uspostavljanje za preuzimanje zapisa iz odabrane tablice. Rukovatelji događaja () trebali bi izgledati ovako:
postupak TForm1.FormCreate (pošiljatelj: TObject);
početi
ADOConnection1.GetTableNames (ComboBox1.Items);
kraj;
postupak TForm1.Button1Click (pošiljalac: TObject);
var tblname: string;
početi
ako ComboBox1.ItemIndex tada Izađi;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
s ADOQuery1 započinju
Zatvoriti;
SQL.Text: = 'SELECT * FROM' + tblname;
Otvorena;
kraj;
kraj;
Imajte na umu da se sve to može učiniti pomoću ADOTable i svojstva TableName.