Parametrizarea interogărilor

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).

Articole similare