SQL interogări în Delfi, delphisite

Selectați * de la ANGAJAT în cazul în care SALARIALE> 50000


. Faceți clic pe OK.
Selectați obiectul Inspector de proprietate activă și setați-l la TRUE.
Se pune un TDatasource formă de obiect.
Instalați în proprietate Set de date TDatasource în Query1.
Pune pe formularul TDBGrid.
Setați proprietatea sa la Datasource1 Sursa de date.
proprietate SQL este de tip TStrings. TStrings obiect este o listă de siruri de caractere, și este oarecum similar cu matrice. TStrings tip de date are în arsenalul său de siruri de caractere adăuga o comandă, acestea sunt încărcate dintr-un fișier text și schimbul de date cu un alt obiect TStrings. O altă componentă care utilizează TStrings - TMemo. ENTRSQL.DPR proiect demonstrativ (în teorie, ar trebui să fie amplasate pe o singură dischetă, ci pentru a „sovieticilor de pe Delphi“ nu este furnizat - VO), utilizatorul trebuie să intre în SQL-interogare și apăsați „Do It“ buton ( „face l „). Rezultatele căutării sunt afișate într-o grilă. În „Do It“ Listarea 1 afișează codul complet buton handler.
listarea 1

Procedura TForm1. BitBtn1Click # 40; Expeditor: TObject # 41; ;

messageDlg # 40; „Nu a fost introdus SQL-interogare“. mtError, # 91; MBOK # 93;. 0 # 41; ;

proprietate Params
Acest lucru ar trebui să fie suficient pentru utilizator, știind SQL. Cu toate acestea, cei mai mulți utilizatori nu știu această limbă. Deci, treaba ta ca un dezvoltator este de a oferi interfața și crearea SQL-interogare. În Delphi, a pus interogări dinamic, puteți utiliza pentru a crea o interogare SQL pe zbor. interogări dinamice permit utilizarea parametrilor. Pentru a determina interogarea parametru utilizează două puncte (:), urmată de numele parametrului. Mai jos sunt exemple de SQL-interogare utilizând parametrul dinamic:

selectați * de la ANGAJAT

unde DEPT_NO =: Dept_no

Dacă aveți nevoie pentru a testa, sau setați implicit, selectați proprietatea Params Query1 obiectului. Faceți clic pe butonul“. “. Ar trebui să vedeți dialogul de setări. Selectați Dept_no. Apoi, în lista verticală, selectați tipul de date integer. Pentru a seta valoarea implicită, introduceți valoarea dorită în caseta de editare „Value“.
Pentru a schimba SQL-interogare în timpul rulării, parametrii pe care doriți să o asociați (bind). Parametrii pot fi modificate, cererea este re-executat, iar datele sunt actualizate. Pentru a edita direct valoarea parametrului utilizat proprietatea Params sau metoda ParamByName. Params proprietate este un TParams matrice. Prin urmare, pentru a avea acces la parametrul, trebuie să specificați indexul. De exemplu,
Query1.params [0] .asInteger: = 900;
asInteger proprietate prevede tip Integer (numele vorbește de la sine). Acest lucru nu indică în mod necesar, dar acest domeniu este de tip Integer. De exemplu, dacă un tip de câmp VARCHAR (10), Delphi efectuează conversia datelor. Astfel, exemplul de mai sus ar putea să fie scris după cum urmează:
Query1.params [0] .asString: = '900';
sau cam asa:
Query1.params [0] .asString: = edit1.text;
Dacă doriți în loc de un număr de index pentru a utiliza numele parametrului, apoi utilizați metoda ParamByName. Aceasta metoda returneaza TParam obiect cu numele specificat. De exemplu:
. Query1.ParamByName ( 'DEPT_NO') asInteger: = 900;

Listarea 2 arată codul complet pentru exemplul.
listarea 2

Procedura TForm1. BitBtn1Click # 40; Expeditor: TObject # 41; ;

în cazul în care nu Query1. pregătit apoi

Query1. ParamByName # 40; 'DEPT_NO' # 41;. AsString: = edit1. text

Query1. ParamByName # 40; 'DEPT_NO' # 41;. AsInteger: = 0;

Pe e. EDatabaseError do messageDlg # 40; e. mesaj,

Procedura TForm1. DataSource2DataChange # 40; Expeditor: TObject; Domeniul: TField # 41; ;

în cazul în care nu Query1. pregătit

Query1. ParamByName # 40; 'Dept_no' # 41;. asInteger: = Table1Dept_No. asInteger;

Pe e. EDatabaseError do

messageDlg # 40; e. mesaj. mtError, # 91; MBOK # 93;. 0 # 41; ;

Tehnica folosind OnDataChange este foarte flexibil, dar sunt mult mai ușor de a se conecta la tabela de interogare. componenta TQuery tinde Sursa de date. Definirea TDatasource Sursa de date de proprietate, TQuery obiect compară numele parametrilor din SQL-interogare cu numele câmpurilor din TDatasource. În cazul denumirilor comune astfel de parametri sunt completate automat. Acest lucru permite dezvoltatorilor să evite scrierea de cod in listingul 3 (*** *** citată mai sus).
De fapt, tehnica de utilizare nu necesită Sursa de date nici o codificare suplimentară. Pentru a solicita conectarea la tabelul DEPT_NO procedura descrisă în exemplul 4.
Listarea 4 - Legarea TQuery c TTable prin DataSource
Selectați din proprietatea Query1 SQL și tipul:

selectați * de la ANGAJAT

unde DEPT_NO =: dept_no

Selectați DataSource și atribuiți sursa de date asociate cu Table1 (Datasource2 în exemplul nostru)
Selectați proprietatea activă și setați-l la True
Asta e tot, dacă doriți să creați acest tip de relație. Cu toate acestea, există unele restricții privind interogări parametrizate. Parametrii sunt limitate la valori. De exemplu, nu puteți utiliza o coloană parametru numit, sau tabel. Pentru a crea o interogare, modifica dinamic numele de masă, ai putea folosi tehnica de concatenare șir. O altă tehnică este de a utiliza comanda Format.
Format comandă
Format comandă înlocuiește opțiunile de formatare (% s,.,% N, etc.), valorile transmise. De exemplu,
Format ( 'Select * de la% s', [ 'ANGAJAT'])
Rezultatul comenzii de mai sus va „Select * de la ANGAJAT“. Funcția face literalmente schimbarea valorilor matrice de formatare. Atunci când se utilizează mai multe opțiuni de formatare, schimba de la stânga la dreapta. De exemplu,

format # 40; 'Selectați * de la% s% în cazul în care s =.'. # 91; tblName, fldName, fldValue # 93; # 41;

Comenzile de formatare va avea ca rezultat „* Selectați din ANGAJAT în cazul în care emp_id = 3“. Această funcționalitate oferă o flexibilitate extraordinară pentru interogari dinamică. Exemplul de mai jos, în Listarea 5 permite ca rezultatele să se deducă un salariu câmp. utilizatorul poate specifica criteriile pentru salariul de teren.
Listarea 5 - Folosirea comenzii de formatare pentru a crea o interogare SQL-

Procedura TForm1. BitBtn1Click # 40; Expeditor: TObject # 41; ;

sqlString: = 'Selectați EMP_NO% s de la angajat în cazul în care SALARIU% s';

dacă showSalaryChkBox. verificat apoi

fmtStr2: = salaryEdit. text

Query1. SQL. adăuga # 40; format # 40; sqlString, # 91; fmtStr1, fmtStr2 # 93; # 41; # 41; ;

messageDlg # 40; e. mesaj. mtError, # 91; MBOK # 93;. 0 # 41; ;

În acest exemplu, vom folosi metoda Clear și adăuga proprietăți SQL. Deoarece cererea „pregătit“ pentru acces la server, și nu există nici o garanție că noua cerere va utiliza aceleași tabele și coloane, Delphi, de fiecare dată când schimbați proprietatea SQL, efectuează o operațiune inversă a „preparat“ (unprepare). Dacă TQuery nu a fost preparat (de exemplu, proprietatea preparată este setată la False), Delphi pregătește în mod automat pentru fiecare execuție. Prin urmare, în acest caz, chiar dacă aceasta a fost cauzată de metoda Pregătirea, aplicarea prezentei nu va fi de nici un folos.
Deschideți vs. ExecSQL
În exemplele anterioare efectuate TQuerie Selectați-cereri. Delphi consideră rezultatele Selectați interogare ca un set de date, cum ar fi tabele. Aceasta este doar o clasă de SQL-interogări valide. De exemplu, de Actualizare comandă actualizează conținutul înregistrărilor, dar nu returnează înregistrări, sau orice valoare. Dacă doriți să utilizați o interogare care nu returnează un set de date, în loc de a folosi ExecSQL Deschideți. ExecSQL transmite o cerere de execuție pe un server. În general, dacă vă așteptați că veți obține din datele de interogare, apoi utilizați Open. În caz contrar utilizați ExecSQL permis, deși utilizarea sa cu Select nu va fi constructiv. Listarea 6 prezintă codul pentru a explica exemplul de mai sus.
listarea 6

Procedura TForm1. BitBtnClick # 40; expeditor: TObject # 41;

Query1. SQL. adăuga # 40; „Actualizarea SALARIUL de la ANGAJAT“ +

„În cazul în care SALARIALE<:salary values (SALARY*(1+:raise)' ) ;

Query1. paramByName # 40; „Salariu“ # 41;. asString: = edit1. text;

Query1. paramByName # 40; 'Raise' # 41;. asString: = edit2. text;

pe e: EDatabaseError do

messageDlg # 40; e. mesaj. mtError, # 91; MBOK # 93;. 0 # 41; ;

Toate exemplele de mai sus presupun utilizarea în cererea aplicației. Ele pot oferi o bază solidă pentru a începe să utilizați aplicațiile TQuery. Cu toate acestea, este imposibil de prezis sfârșitul utilizării SQL în aplicații. Serverele tipice vă pot oferi alte caracteristici, cum ar fi procedurile și tranzacții stocate. Următoarele două secțiuni oferă o scurtă trecere în revistă a acestor fonduri.
3. Componenta TStoredProc
O procedură stocată este o listă de comenzi (SQL sau server special), stocate și executate pe partea de server. Procedurile stocate nu au diferențele conceptuale cu alte tipuri de proceduri. TStoredProc moștenește de la TDataset, deci are multe caracteristici cu TTable și TQuery. Deosebit de asemănare notabilă la TQuery. Deoarece procedurile stocate nu necesită o revenire la valorile, aceleași reguli se aplică pentru metodele ExecProc și deschise. Fiecare server implementeaza operarea procedurilor stocate, cu mici diferențe. De exemplu, în cazul în care serverul pe care îl utilizați Interbase, proceduri stocate sunt efectuate într-o Selectați-interogări. De exemplu, să se uite la rezultatele procedurii stocate, ORG_CHART, în baza de date ANGAJAT bazate pe demo, utilizați următoarea interogare SQL:

Selectați * de la ORG_CHART

Atunci când se lucrează cu alte servere, de exemplu, Sybase, puteți utiliza componenta TStoredProc. Această componentă are proprietățile unei baze de date de nume și proceduri stocate. În cazul în care procedura impune la intrarea unor parametri, utilizați proprietatea Params de intrare a acestora.
4. TDatabase
componenta TDatabase oferă funcționalități care lipsesc TQuery și TStoredProc. În special, un TDatabase vă permite să creați un alias de BDE locale, astfel încât aplicația nu necesită alias-uri conținute în BDE fișierul de configurare. Aceste alias-uri locale în aplicația poate profita de toate TTable, TQuery și TStoredProc. TDatabase permite, de asemenea dezvoltator pentru a configura procesul de conectare prin suprimarea dialogului numele de utilizator și parola, și completați parametrii necesari. Și, în sfârșit, cel mai important, un TDatabase poate oferi o singură conexiune la o bază de date care rezumă toate operațiunile de bază de date printr-o singură componentă. Acest lucru permite controalele pentru a lucra cu baza de date pentru a putea tranzacție de gestionare.
Tranzacția poate fi considerată ca transferul de informații în pachet. Un exemplu clasic al unei tranzacții este transferul de bani în contul bancar. Tranzacția trebuie să cuprindă funcționarea plată a noului cont și eliminarea aceeași sumă din contul curent. În cazul în care unul dintre acești pași pentru un motiv oarecare, a fost neîmplinită, tranzacția este considerată, de asemenea, remarcabil. În cazul unei astfel de erori, SQL Server vă permite să efectuați o comandă de derulare înapoi (derulare înapoi), fără a face orice modificări în baza de date. Transaction Management depinde de componenta TDatabase. Deoarece tranzacția este de obicei compus din mai multe cereri, ar trebui să marcheze începutul unei tranzacții și sfârșitul acesteia. Pentru a evidenția începutul tranzacției folosind TDatabase.BeginTransaction. Odată ce tranzacția va fi executat, toate comenzile executate înaintea apelului sau TDatabase.Commit TDatabase.Rollback convertit într-un mod temporar. Când apelați commit toate datele schimbat este trimis la server. Când apelați rollback toate modificările expiră. Mai jos, în Listarea 7 este un exemplu care utilizează o tabelă numită conturi. Arată modul în care încercările de a transfera suma dintr-un cont în altul.
listarea 7

Procedura TForm1. BitBtn1Click # 40; Expeditor: TObject # 41; ;

o situație în care suma deductibilă depășește soldul. Dacă este așa, UPDATE

query1. SQL. Clear;

query1. SQL. adăuga # 40; format # 40; „Actualizarea conturilor“ +

'Set BALANCE = ECHILIBRU -% s)' +