Izmantojot Delphi vaicājumus, izmantojot ADO

click fraud protection

Komponents TADOQuery nodrošina Delfi izstrādātājiem spēja iegūt datus no vienas vai vairākām tabulām no ADO datu bāze izmantojot SQL.

Šie SQL paziņojumi var būt gan DDL (datu definīcijas valodas) paziņojumi, piemēram, CREATE TABLE, ALTER INDEKSS un tā tālāk, vai arī tie var būt DML (datu manipulācijas valodas) paziņojumi, piemēram, SELECT, UPDATE un DZĒST. Visizplatītākais paziņojums tomēr ir SELECT, kas rada skatu, kas ir līdzīgs tam, kas pieejams, izmantojot tabulas komponentu.

Piezīme: kaut arī komandu izpilde, izmantojot komponentu ADOQuery, ir iespējama, ADOCommandkomponents ir piemērotāks šim nolūkam. To visbiežāk izmanto, lai izpildītu DDL komandas vai veiktu saglabātu procedūru (kaut arī jums vajadzētu izmantotTADOStoredProc šādiem uzdevumiem), kas neatdod rezultātu kopu.

SQL, ko izmanto ADOQuery komponentā, ir jābūt pieņemamai izmantotajam ADO draiverim. Citiem vārdiem sakot, jums jāzina SQL rakstīšanas atšķirības starp, piemēram, MS Access un MS SQL.

Tāpat kā strādājot ar ADOTable komponentu, datiem datu bāzē piekļūst, izmantojot datu krātuves savienojumu, ko izveidojis ADOQuery komponents, izmantojot savu

instagram viewer
ConnectionString īpašums vai caur atsevišķu ADOConnection komponentu, kas norādīts Savienojumsīpašums.

Lai izveidotu Delphi formu, kas varētu izgūt datus no piekļuves datu bāzes ar komponentu ADOQuery, vienkārši nometiet visus saistītos datu piekļuves un ar datiem saistītos komponentus un izveidojiet saiti, kā aprakstīts šīs nodaļas iepriekšējās nodaļās protams. Datu piekļuves komponenti: DataSource, ADOConnection kopā ar ADOQuery (nevis ADOTable) un viens ar datu pārzināšanu saistīts komponents, piemēram, DBGrid, ir viss, kas mums vajadzīgs.
Kā jau paskaidrots, izmantojot objektu inspektoru, izveidojiet saikni starp šiem komponentiem šādi:

DBGrid1.DataSource = DataSource1
DataSource1.DataSet = ADOQuery1
ADOQuery1.Connection = ADOConnection1
// izveidojiet ConnectionString
ADOConnection1.ConnectionString = ...
ADOConnection1.LoginPrompt = Viltus

Veicot SQL vaicājumu

TADOQuery komponentam nav TableNameīpašums, kā to dara TADOTable. TADOQuery ir īpašums (TStrings), ko sauc SQL ko izmanto SQL paziņojuma glabāšanai. Jūs varat iestatīt SQL īpašuma vērtību ar Object Inspector projektēšanas laikā vai izmantojot kodu izpildlaikā.

Projektēšanas laikā izsauciet SQL rekvizītu redaktoru, objekta inspektorā noklikšķinot uz elipša pogas. Ierakstiet šo SQL paziņojumu: “SELECT * FROM Authors”.

SQL paziņojumu var izpildīt vienā no diviem veidiem, atkarībā no paziņojuma veida. Datu definīcijas valodas paziņojumi parasti tiek izpildīti ar ExecSQL metode. Piemēram, lai izdzēstu noteiktu ierakstu no konkrētas tabulas, jūs varat uzrakstīt DELETE DDL paziņojumu un palaist vaicājumu ar metodi ExecSQL.
(Parastie) SQL paziņojumi tiek izpildīti, iestatot TADOQuery. Aktīvs īpašums Patiesībā vai zvanot uzAtvērt metode (būtībā tā pati). Šī pieeja ir līdzīga tabulas datu izgūšanai ar komponentu TADOTable.

Izpildes laikā SQL rekvizītu SQL var izmantot kā jebkuru StringList objektu:

ar ADOQuery1 sākas Aizvērt; 
SQL.Clear;
SQL.Add: = 'SELECT * FROM Autors' SQL.Add: = 'ORDER BY autorname DESC' Atvērts;
beigas;

Iepriekš minētais kods izpildes laikā aizver datu kopu, SQL īpašumā iztukšo SQL virkni, piešķir jaunu SQL komandu un aktivizē datu kopu, izsaucot Open metodi.

Ņemiet vērā, ka acīmredzami pastāvīga lauka objektu saraksta izveidošanai ADOQuery komponentam nav jēgas. Nākamreiz izsaucot metodi Open, SQL var būt tik atšķirīgs, ka var mainīties viss iesniegto vārdu (un tipu) kopums. Protams, tas nav gadījums, ja mēs izmantojam ADOQuery, lai atnest rindas tikai no vienas tabulas ar nemainīgu lauku kopu - un iegūtā kopa ir atkarīga no SQL paziņojuma WHERE daļas.

Dinamiski vaicājumi

Viena no TADOQuery sastāvdaļu lieliskajām īpašībām ir Params īpašums. Parametrizēts vaicājums ļauj elastīgi izvēlēties rindu / kolonnu, izmantojot parametru SQL WHERE klauzulā WHERE. Īpašums Params ļauj aizstāt parametrus iepriekš definētajā SQL. Parametrs ir vietas rezervists vērtībai WHERE klauzulā, kas definēta tieši pirms vaicājuma atvēršanas. Lai vaicājumā norādītu parametru, pirms parametra nosaukuma izmantojiet kolu (:).
Projektēšanas laikā izmantojiet objektu inspektoru, lai iestatītu SQL rekvizītus šādi:

ADOQuery1.SQL: = 'SELECT * FROM Applications WHERE type =: apptype'

Aizverot SQL redaktora logu, atveriet logu Parametri, objekta inspektorā noklikšķinot uz pogas Elipsis.

Parametrs iepriekšējā SQL paziņojumā ir nosauktsapptype. Mēs varam iestatīt parametru vērtības kolekcijā Params projektēšanas laikā, izmantojot dialoglodziņu Parametri, taču lielākoties parametri tiks mainīti izpildlaikā. Dialoglodziņu Parametri var izmantot, lai norādītu vaicājumā izmantoto parametru datu tipus un noklusējuma vērtības.

Darbības laikā parametrus var mainīt un vaicājumu atkārtoti izpildīt, lai atsvaidzinātu datus. Lai izpildītu parametrētu vaicājumu, pirms vaicājuma izpildes ir jānorāda katra parametra vērtība. Lai mainītu parametra vērtību, mēs izmantojam vai nu Params rekvizītu, vai ParamByName metodi. Piemēram, ņemot vērā iepriekš aprakstīto SQL paziņojumu, izpildes laikā mēs varētu izmantot šādu kodu:

ar ADOQuery1 sākas
Aizvērt;
SQL.Clear;
SQL.Add ('SELECT * FROM Applications WHERE type =: apptype');
ParamByName ('apptype'). Vērtība: = 'multimedijs';
Atvērts;
beigas;

Tāpat kā strādājot ar ADOTable komponentu, ADOQuery atgriež kopu vai ierakstus no tabulas (vai divām vai vairāk). Navigācija pa datu kopu tiek veikta ar tām pašām metodēm, kas aprakstītas nodaļā "Aiz dati datu kopās".

Navigācija un rediģēšana vaicājumā

Parasti ADOQuery komponentu nevajadzētu izmantot, kad notiek rediģēšana. Vaicājumi, kas balstīti uz SQL, galvenokārt tiek izmantoti ziņošanas vajadzībām. Ja jūsu vaicājums atgriež rezultātu kopu, dažreiz ir iespējams rediģēt atgriezto datu kopu. Rezultātu kopai jāsatur ieraksti no vienas tabulas, un tajā nedrīkst izmantot nekādas SQL apkopotās funkcijas. ADOQuery atdotās datu kopas rediģēšana ir tāda pati kā ADOTAble datu kopas rediģēšana.

Piemērs

Lai redzētu dažas ADOQuery darbības, mēs kodēsim nelielu piemēru. Izgatavosim vaicājumu, kuru var izmantot, lai no datu bāzēm atnestas rindas no dažādām tabulām. Lai parādītu visu datu bāzē esošo tabulu sarakstu, mēs varam izmantot GetTableNamesmetode ADOCsavienojums komponents. Formas OnCreate notikumā iegūtais GetTableNames piepilda ComboBox ar tabulas nosaukumiem, un poga tiek izmantota, lai aizvērtu vaicājumu un atjaunotu to, lai izgūtu ierakstus no atlasītās tabulas. () Pasākumu apstrādātājiem vajadzētu izskatīties šādi:

procedūra TForm1.FormCreate (Sūtītājs: TObject);
sākt
ADOConnection1.GetTableNames (ComboBox1.Items);
beigas;
procedūra TForm1.Button1Click (Sūtītājs: TObject);
var tblname: virkne;
sākt
ja ComboBox1.ItemIndex, tad iziet;
tblname: = ComboBox1.Items [ComboBox1.ItemIndex];
ar ADOQuery1 sākas
Aizvērt;
SQL.Text: = 'SELECT * FROM' + tblname;
Atvērts;
beigas;
beigas;

Ņemiet vērā, ka to visu var izdarīt, izmantojot ADOTable un tā TableName īpašību.

instagram story viewer