SQL interogări în delphi

au fost create componente Delphi pentru lucrul cu baze de date, bazate pe lucrul cu SQL si arhitectura client / server. Când lucrați cu ei, puteți utiliza caracteristicile de suport extins pentru servere la distanță. Delphi oferă acest sprijin în două moduri. În primul rând, comanda directă a Delphi permite dezvoltatorilor să gestioneze tabele, să stabilească limite, șterge, se introduce și edita intrările existente. A doua modalitate este de a utiliza interogări de limbă SQL în cazul în care șirul de interogare este trecut la server pentru analiza sa, optimizare, execuție și transfer înapoi rezultate.

1. Introducere

2. Componenta TQuery

Dacă în aplicația pe care doriți să utilizați SQL, tu trebuie neaparat sa se familiarizeze cu TQuery componenta. Componentele TQuery și TTable moștenit de la TDataset. TDataset oferă funcționalitatea necesară pentru a avea acces la bazele de date. Ca atare, componentele TQuery și TTable au multe caracteristici comune. Pentru a pregăti date pentru afișarea lor într-o componentă vizuală se utilizează toate același TDatasource. De asemenea, pentru a determina care server și baze de date pe care doriți să îl accesați, trebuie să specificați numele alias-ului. Acest lucru trebuie făcut setarea proprietăților AliasName TQuery obiect.

Cu toate acestea, TQuery are unele funcționalitate unică. De exemplu, TQuery are o proprietate numită SQL. proprietate SQL este folosit pentru a stoca SQL-interogare. Aici sunt pașii de bază pentru pregătirea cererii, în cazul în care toți angajații au un salariu de mai mult de 50.000 $.

  1. Crearea unui obiect TQuery
  • Setați proprietatea databasename alias-ului. (Acest exemplu foloseste alias IBLOCAL, asociat bazei de date employee.gdb demonstrație).
  • Enter: Selectați * de la ANGAJAT în cazul în care SALARIUL> 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ă, dar la „Sfaturi pentru Delphi“ nu este furnizat - VO), utilizatorul trebuie să intre în SQL-interogare și faceți clic pe „Do It“ butonul ( „face l „). Rezultatele căutării sunt afișate într-o grilă. În „Do It“ Listarea 1 afișează codul complet buton handler.

    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 este un exemplu de SQL-interogare folosind parametrul dinamic:

    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,

    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ă:

    Fii atent la proces, primul pas pregătește cererea. Când apelați metoda de a pregăti, Delphi trimite o interogare SQL la un server de la distanță. Serverul parses și optimizare interogare. Avantajul cererii de formare este în pre-parsarea și optimizare. O alternativă este aici pentru a servi pregătirea cererilor de server de fiecare dată când este executat. Odată ce solicitarea a fost pregătit, noii parametrii necesari sunt substituite, iar interogarea este executată.

    În exemplul anterior, utilizatorul poate introduce numărul de card, și apoi executați afișajul de interogare o listă de angajați ai acestui departament. Dar despre utilizarea tabelului DEPARTAMENTUL care permite utilizatorului să navigheze cu ușurință între utilizatori și departamente?

    Notă: Următorul exemplu folosește un TTable numit Table1. Tabel1 pentru numele bazei de date IBLOCAL, numele de masă - DEPARTAMENTUL. DataSource2 TDatasource asociate cu Table1. Tabelul prezintă, de asemenea, activ și de înregistrare în TDBGrid.

    Metoda de conectare TQuery la TTable - prin TDatasource. Există două moduri principale de a face acest lucru. În primul rând, plasați codul în tratare a evenimentului TDatasource OnDataChange. De exemplu, în Listarea 3 prezintă această tehnică.

    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 o solicitare de conectare 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 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ă înlocuiește opțiunile de formatare (% s,.,% N, etc.), valorile transmise. De exemplu,

    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,

    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-

    Î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, 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.

    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:

    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, nu a fost executată, tranzacția este, de asemenea, considerată a fi remarcabile. Î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.

    Și ultimul lucru pe care să ia în considerare la conectarea la baza de date. In exemplul de mai sus, TDatabase folosit ca un singur canal de comunicare cu baza de date, astfel încât a fost posibil doar pentru a efectua o singură tranzacție. Pentru a realiza acest lucru, sa determinat numele alias (AliasName). Alias ​​păstrează informațiile referitoare la conexiunea, cum ar fi tipul de driver (tip de conducător auto), Nume server (nume de server), numele de utilizator (nume de utilizator) și alte. Această informație este utilizată pentru a crea o linie de conexiune (șir de conectare). Pentru a crea un alias, puteți utiliza configurația BDE de utilitate, sau, așa cum se arată în exemplul de mai jos, completați parametrii în timpul rulării.

    Params TDatabase are o proprietate în care sunt stocate informațiile de conectare. Fiecare linie este un parametru separat Params. În exemplul următor, utilizatorul setează parametrul în numele de utilizator câmpul de editare edit1, și parametrul parolă în câmpul Edit2. Codul din Listarea 8 arată procesul de conectare la o bază de date:

    Acest exemplu arată modul în care este posibil să se conecteze la un server fără a crea un alias. Cheia aici este de a identifica și de a umple DriverName Params informațiile necesare pentru conexiunea. Nu trebuie să definiți toți parametrii trebuie să specificați numai cele care nu sunt stabilite în configurația BDE definiți driver-ul bazei de date. Introdus în proprietatea de date params acoperă toată configurația de instalare BDE. Prin parametrii de înregistrare, Delphi umple valorile rămase ale parametrilor pentru driverul BDE Config. Exemplul de mai sus introduce, de asemenea, concepte, cum ar fi metoda de sesiune și GetTableNames. Este dincolo de domeniul de aplicare al subiectului, este suficient pentru a menționa doar faptul că variabila de sesiune este un motor de baze de date descriptor. În exemplul acesta se adaugă numai pentru „dressing fereastră“.

    Un alt subiect este utilizarea SQLPASSTHRU MODE. Acest parametru de bază de date este responsabil pentru modul nativ comenzi baza de date, cum ar fi TTable.Append sau TTable.Insert vor interacționa cu TQuery, conectat la aceeași bază de date. Există trei valori posibile: Individuala, PARTAJAT NOAUTOCOMMIT si impartasite AUTOCOMMIT. Înseamnă că nu se perm comenzile native folosesc o singură conexiune la server, în timp ce solicitările - mai mult. Pe partea de server este văzută ca activitatea a doi utilizatori diferiți. La un moment dat, în timp ce tranzacția este activă, comenzile native nu vor fi executate (angajat) până la momentul până când tranzacția este finalizată. Daca aveti si voi TQuery, atunci orice modificări trimise la baza de date, executați separat de tranzacție.

    Celelalte două moduri, PARTAJAT NOAUTOCOMMIT si impartasite AUTOCOMMIT, face pentru comenzile native și interoghează o conexiune comună la server. Diferența dintre cele două moduri sunt executate în transferul comanda nativ la server. Când modul selectat PARTAJAT AUTOCOMMIT inutil pentru a crea o tranzacție care utilizează comenzi native pentru a șterge intrarea și încercarea ulterioară de a pune în aplicare derulare înapoi (Rollback). Intrarea trebuie să fie eliminată, iar modificările trebuie făcute (angajat) comanda Rollback pentru a apela. Dacă aveți nevoie să transferați comenzile native într-o tranzacție, sau să includă aceste comenzi în tranzacția în sine, asigurați-vă că SQLPASSTHRU MODE este setat la PARTAJAT NOAUTOCOMMIT sau nu se perm.

    Delphi suportă o varietate de caracteristici, prin utilizarea limbajului SQL pentru serverele de baze de date. Pe această notă, permiteți-mi să spun la revedere și vă doresc utilizați frecvent SQL în aplicații.

    articole similare