Componentele IBDataSet, IBQuery și IBSQL pot efectua atât SQL static cât și dinamic. SQL-ul dinamic este diferit de staticul prin prezența parametrilor. Exemplu de SQL static:
selectați * din tabel
unde câmpul> 5
Dacă în loc de numărul 5 se presupune că se folosește valoarea primită ca intrare de către utilizator, atunci ar trebui să utilizați interogarea parametrizată (ParamCheck: = True):
selectați * din tabel
unde câmpul>: param
Un colon sau un caracter "?" înseamnă că cererea implică specificarea unui parametru. Acest lucru se face după cum urmează:
IBQuery.SQL.Clear; // ștergeți textul sql
IBQuery.SQL.Add ('selectați * din tabelul unde câmpul>: param'); // setați textul interogării
IBQuery.Prepare; // trimiteți o solicitare serverului, verificați corectitudinea acestuia etc.
IBQuery.ParamByName (param) AsInteger: = 5; // setați valoarea parametrului
IBQuery.Open; // sau IBQuery.ExecSQL
În cazul interogărilor statice, apelul Prepare este opțional - componenta va executa automat dacă Prepare nu a fost apelat.
Notă. După Pregătire, puteți accesa proprietatea Plan, deoarece este după Pregătiți că serverul raportează planul de executare a interogării.
Pregătirea este foarte utilă pentru repetarea aceleiași interogări, cu diferite valori ale parametrilor. În acest caz, Prepare se numește o dată, iar setarea parametrilor și apelarea ExecQuery se efectuează de câte ori este necesar. Cel mai adesea, această metodă este utilizată pentru interogări Insert și Update.
Numele parametrilor sunt acceptate numai de biblioteca client. Adică serverul înțelege parametrii doar ca un caracter "?". Dacă componentele pot gestiona parametrii numiți, aceștia le "taie" înainte de a trimite o solicitare serverului, trimițând acolo o solicitare a formularului
selectați * din tabel
Este posibil ca unele biblioteci componente să nu accepte sau să gestioneze incorect interogări care utilizează doi sau mai mulți parametri cu același nume.
filtrare
Poate că în BDE sau în alt set de acces la baza de date pe care ați folosit-o înainte de IBX, ați folosit în mod activ filtrarea înregistrărilor. În general, filtrarea în IBX funcționează în același mod ca și în BDE.
Pentru această componentă a proprietății de filtrare ar trebui să fie descrise condițiile de filtrare ca și în cazul în care adăugați o clauză în cazul în care la cererea SQL obișnuită. IBTable construiește o interogare folosind un Nume_tabelă nume de tabel predeterminat, adaugă condiția de filtrare în cazul în care ambele filtru, și se adaugă ORDER structura BY dacă nu se specifică „sortarea“ din setul de rezultate folosind proprietăți sau IndexFieldNames Nume_index. Prin urmare, în textul filtrului trebuie să fie specificat cu toate caracteristicile Interbase sintaxă sau Firelbird. De exemplu
Ca urmare, cererea trimisă către server va avea forma
selectați id, LastName, FirstName.
unde LastName ca "A%"
IbDataSet, ibQuery
Aceste componente execută interogări definite clar în proprietățile SelectSQL sau SQL. Prin urmare, filtrarea suplimentară este posibilă numai prin metoda OnFilterRecord.
OnFilterRecord
Componentele IBTable, IBDataSet și IBQuery permit ca acest eveniment să fie folosit pentru filtrarea înregistrărilor. Spre deosebire de IBTable, unde în proprietatea Filter puteți specifica o condiție de selecție suplimentară pentru interogarea executată pe server, OnFilterRecord determină "vizibilitatea" înregistrării deja recepționate de DataSet de la server. Metoda are doi parametri - DataSet, adică, ce componentă a cerut filtrarea (pentru a obține date din înregistrarea "curentă") și Accept, care determină sau nu să afișeze această înregistrare la DataSource conectat. Pentru a simula filtrarea arătată mai sus pentru IBTable, în OnFilterRecord ar trebui să scrieți ceva asemănător:
Acceptați: = (DataSet.FieldByName ('LastName'). AsString> = 'A') și
(DataSet.FieldByName ('LastName'). AsString <'B');
Amintiți-vă că filtrarea se face în tampon local de înregistrări deja preluate de pe server. Aceasta este, în cazul în care programul se presupune că un număr mic de opțiuni de filtrare, ar putea avea sens pentru a reduce povara de pe partea de client și la schimbarea cererii de proiectare filtru pentru SelectSQL o condiție necesară în cazul în care (la fel cum o face IBTable, doar linia în cazul în care clauza va adăuga la textul interogării propriu-zis).