SQL (strukturiran jezik poizvedb) je standardiziran jezik za definiranje in manipuliranje s podatki v relacijski podatkovni bazi. Skladno z relacijskim modelom podatkov se baza dojema kot niz tabel, odnosi so predstavljeni z vrednostmi v tabelah, podatki pa so pridobljeni z navedbo tabele rezultatov, ki jo lahko izpeljemo iz ene ali več osnovne mize. Poizvedbe imajo obliko ukazovnega jezika, ki vam omogoča izberite, vstavite, posodobite, poiščite lokacijo podatkov itd.
V Delfih: TQuery
Če boste SQL uporabljali v svojih aplikacijah, se boste z njim zelo dobro seznanili TQuery sestavni del. Delphi vašim aplikacijam omogoča neposredno uporabo sintakse SQL, vendar komponenta TQuery za dostop do podatkov iz tabel Paradox in dBase (z uporabo lokalnega SQL - podvrsta standardnega SQL za ANSI), baze podatkov na lokalnem strežniku InterBase in baze podatkov na oddaljeni bazi podatkov strežniki.
Delphi podpira tudi raznolike poizvedbe glede več kot enega tipa strežnika ali tabele (na primer podatki iz tabele Oracle in tabele Paradox) .TQuery ima lastnost, imenovano
TQuery enkapsulira enega ali več stavkov SQL, jih izvrši in zagotovi metode, s katerimi lahko manipuliramo z rezultati. Poizvedbe lahko razdelimo v dve kategoriji: tiste, ki ustvarjajo nabore rezultatov (na primer a IZBERI izjavo) in tiste, ki ne (na primer NADGRADNJAali VSTAVI izjava). Uporabite TQuery. Odprto za izvedbo poizvedbe, ki ustvari niz rezultatov; uporabite TQuery. ExecSQL za izvajanje poizvedb, ki ne proizvajajo nizov rezultatov.
Stavki SQL so lahko kateri koli statična ali dinamičen, to je, da jih je mogoče nastaviti v času načrtovanja ali vključiti parametre (TQuery. Parame), ki se med časom izvajanja razlikujejo. Uporaba parametriziranih poizvedb je zelo prilagodljiva, saj lahko med izvajanjem spremenite uporabnikov pogled in dostop do podatkov med letenjem.
Pred izvedbo morajo biti vsi izvedljivi stavki SQL pripravljeni. Rezultat priprave je izvršljiva ali operativna oblika izjave. Način priprave stavka SQL in obstojnost njegove operativne oblike ločita statični SQL od dinamičnega SQL. V času načrtovanja se poizvedba samodejno pripravi in izvede samodejno, ko nastavite poizvedba Aktivna lastnost komponente na True. V času izvajanja se pripravi poizvedba s klicem Pripravite in izvedite, ko aplikacija pokliče metode Open ali ExecSQL komponente.
TQuery lahko vrne dve vrsti rezultatov: "v živo"tako kot pri komponenti TTable (uporabniki lahko urejajo podatke s krmilniki podatkov, in ko pride do klica Objavi, se v bazo pošljejo spremembe),"le za branje"samo za prikaz. Če želite zahtevati niz rezultatov v živo, nastavite lastnost RequestLive komponente poizvedbe na True in zavedajte se, da mora izjava SQL izpolnjevati nekatere posebne zahteve (brez ORDER BY, SUM, AVG itd.)
Poizvedba se v marsičem obnaša kot tabelski filter, na nek način pa je poizvedba še močnejša od filtra, saj omogoča dostop:
- več tabel hkrati ("pridruži se" v SQL)
- določeno podmnožico vrstic in stolpcev iz njene osnovne tabele, ne da bi jih vedno vrnili
Preprost primer
Zdaj pa si oglejmo nekaj SQL v akciji. Čeprav bi lahko uporabili čarovnika obrazca baze podatkov za ustvarjanje nekaterih primerov SQL za ta primer, bomo to storili ročno, korak za korakom:
1. Na glavni obrazec postavite komponente TQuery, TDataSource, TDBGrid, TEdit in TButton.
2. Nastavite lastnost DataSet komponente TDataSource na Query1.
3. Nastavite lastnost DataSource komponente TDBGrid na DataSource1.
4. Nastavite lastnost DatabaseName komponente TQuery na DBDEMOS.
5. Dvokliknite lastnost SQL v TQuery in ji dodelite stavek SQL.
6. Če želite omrežje prikazati podatke v času načrtovanja, spremenite aktivno lastnost komponente TQuery v True.
Omrežje prikazuje podatke iz tabele Employee.db v treh stolpcih (FirstName, LastName, Plača), tudi če Employee.db ima 7 polj, nabor rezultatov pa je omejen na tiste zapise, kjer se začne FirstName z 'R'.
7. Zdaj dodelite naslednjo kodo dogodku OnClick gumba1.
postopek TForm1.Button1Click (Pošiljatelj: TObject); začeti Poizvedba1.Zaprite;{zaprite poizvedbo}// dodeli nov izraz SQL Query1.SQL.Clear; Query1.SQL.Add ('Izberi EmpNo, FirstName, LastName'); Query1.SQL.Add ('FROM Employee.db'); Query1.SQL.Add ('WHERE plača>' + Edit1.Text); Poizvedba1.RequestLive: = res; Poizvedo1.Odpri; {odprta poizvedba + prikaz podatkov}konec;
8. Zaženite aplikacijo. Ko kliknete gumb (če ima Edit 1 v sebi veljavno vrednost valute), bo na zaslonu prikazano polje Polja EmpNo, FirstName in LastName za vse zapise, kjer je plača večja od navedene valute vrednost.
V tem primeru smo ustvarili preprost statični stavek SQL z nizom rezultatov v živo (nismo prikazali nobenega od prikazanih zapisov) samo za prikaz.