Lucrul cu baze de date de căutare și filtrare


Lucrul cu baze de date: căutare și filtrare.

Lucrul cu baze de date: căutare și filtrare.

1. Localizați Metoda: Localizați Metoda arată pentru prima înregistrare care se potrivește cu criteriile de căutare, și în cazul în care o astfel de înregistrare este găsit, face curent. În acest caz, ca urmare a se întoarce adevărate. În cazul în care înregistrarea nu este găsit - Fals.

Listă KeyFields indică un câmp sau mai multe domenii în care este efectuat căutarea. În cazul unor câmpuri multiple de căutare, numele lor sunt separate prin punct și virgulă. Criterii de căutare sunt definite în matrice KeyValues ​​variantă, astfel încât i-lea KeyValues ​​valoare este asociat cu câmpul i-lea KeyFields.
Opțiuni vă permite să specificați opționale moduri de valori de căutare:
  • loCaseInsensitive - căutare este litere, și anume insensibil KeyValues ​​ar lua cuvântul „imprimantă“ și „imprimantă“ și „imprimantă“ la fel.
  • loPartialKey - Intrarea este considerată a satisface condiția de căutare, în cazul în care conține o parte a contextului de căutare, de exemplu, pentru a satisface contextul „Ma“ va fi recunoscută prin cuvintele: „Mamă“, „mașină“, etc.
Găsiți căutări pe orice domeniu; regiment sau câmpuri pe care să caute, nu numai că nu pot fi incluse în indexul curent, dar nu fie indexat deloc.

În cazul în care câmpurile incluse în orice indice, de localizare utilizează indexul de căutare. În cazul în care câmpurile obligatorii sunt incluse în mai multe indicii, este greu de spus care dintre ele va fi utilizat. Prin urmare, este dificil de prezis ce recordul de multe înregistrări care îndeplinesc criteriile de căutare vor face curent - mai ales în cazul în care căutarea nu este efectuată la indicele de curent.

Atunci când căutați domenii care nu fac parte din nici un index, utilizat filtru BDE. Aici este un exemplu de utilizare a localiza: În acest exemplu, căutarea se face folosind o singură linie de cod:

Căutare Metoda este găsi elementul dorit, dar nu face curent și returnează valoarea anumitor domenii ale acestei înregistrări. Tip Rezultat - Varianta sau o matrice variantă. Indiferent de succesul de căutare de înregistrare, indicatorul înregistrării curente din tabel nu se schimba. Spre deosebire de Localizați, Căutare va căuta numai pentru criteriile de căutare cu potrivire exactă și valorile câmpurilor de înregistrare. În KeyFields lista de câmpuri pe care doriți să le căutați sunt specificate. În prezența acestei liste de câmpuri adiacente mai multe câmpuri sunt separate prin punct și virgulă. KeyValues ​​indică valorile câmpurilor de căutare, a căror listă este conținută în KeyFields.

Dacă există mai multe câmpuri de căutare, fiecare domeniu i-lea KeyFields este asociat cu valoarea i-lea KeyValues. Dacă există un câmp de căutare valoarea sa poate fi specificat ca KeyValues ​​direct; în cazul mai multor domenii în care trebuie să rezulte într-un tip de variantă matrice folosind VarArrayOf.

Ca câmpul de căutare, puteți specifica un câmp ca aparținând oricărui indice și nu sunt incluse în ea; Tastați indicele curent nu contează. În cazul în care câmpul de căutare sunt incluse în orice indice, utilizarea sa este automat; altfel utilizate filtre BDE.

Dacă intrarea de căutare nu este găsit, metoda returnează Null Lookup, care poate fi verificată de către operator: În caz contrar, se întoarce Lookup din aceste valori câmp de înregistrare, lista care include ResultFields. Dimensiunea rezultatului depinde de cât de mult din domeniile rezultate specificate în ResultFields:
  • un câmp - rezultatul este adecvat tipului sau nuli, în cazul în care câmpul de înregistrare a găsit conține o valoare nulă;
  • mai multe câmpuri - rezultatul este o matrice variantă, în care numărul de elemente mai mici sau egale cu numărul de câmpuri rezultate (câmpuri găsit unele înregistrări pot conține valori nule).
Exemplu: Un exemplu al câmpului rezultat: Câteva dintre câmpurile rezultate Dacă înregistrarea nu este găsit, VarType (LookUpResults) returnează varNull. Dacă căutați pentru orice motiv, nu a fost făcută, VarType (LookUpResults) returnează VarEmpty. Dacă oricare dintre domeniile care sunt returnate într-un rezultat de căutare în matrice varianta care conține o valoare nulă corespunzând unui element de matrice variantă va conține, de asemenea, o valoare nulă (Null). În acest caz, trimiterea la aceasta va conduce la o situație excepțională, astfel încât necesitatea de a verifica in avans.

F IN A L T R A T I O N

Proprietatea Component al filtrului TTable vă permite să specificați criteriile de filtrare. În acest caz, baza de date va fi filtrată imediat ce proprietatea Filtrat este egală cu adevărat. Sintaxa este similară cu descrierea secțiunii de testare a sintaxa SQL-interogare unde, cu excepția faptului că nu pot fi specificate numele variabilelor de program, puteți specifica numele câmpurilor și literali (adică explicit); Puteți utiliza operatori convenționale, relaționale și operatori logici AND, NOT și OR, de exemplu:

Această intrare va lăsa filtrul în tabelul de înregistrare în care câmpul Doljnost = „profesor asociat“ si mai mult de 3000 de TabNum criteriu de filtrare șir poate intra în timpul rulării programului sau în etapa de proiectare. De exemplu, utilizarea unui astfel de tratare a evenimentului OnChecked criteriu de filtrare CheckBox1 component citit din câmp și plasat în edit1 proprietăți filtrante componente Tabelul 1: Utilizarea proprietăți suplimentare pot fi definite proprietăți de filtrare câmpuri string:
  • foCaseInsensitive - filtrarea nu ține cont de diferențele sensibile
  • foNoPartialCompare - căutare se realizează pe o potrivire exactă.

eveniment OnFilterRecord are loc atunci când este setat la adevărat în proprietatea Filtrate. Rutina evenimentului are doi parametri: numele setului de date filtrate și variabila Acceptare, în care programul este de a pune Adevărat, în cazul în care înregistrarea curentă îndeplinește condiția de filtrare.

Spre deosebire de criteriul în linia Filtrată, a limitat domeniul de aplicare al sintaxei expresie condițională, criteriul de a fi implementate în tratare a evenimentului OnFilterRecord, definit Object sintaxa Pascal și poate organiza algoritmi complecși de filtrare. Cu toate acestea, trebuie amintit că, în handler OnFilterrecord iterează prin toată baza de date a înregistrărilor, în timp ce SetRange metode, ApplyRange și metodele lor asociate utilizării TTable indexate metoda secvențială, adică Acestea funcționează cu o porțiune de înregistrări în baza de date fizică. Se face uz de OnFilterRecord handler preferat pentru filtrarea volumelor mici de înregistrări, și limitează foarte mult utilizarea sa pentru volume mari de date.

De fiecare dată când aplicația se ocupă de eveniment OnFilterRecord, un set de date este transferat de la stat la starea dsBrowse dsFilter. Acest lucru previne datele de modificare stabilite în timpul filtrării. După finalizarea handler evenimentului curent apel ObFilterRecord stabilit într-un stat dsBrowse de date.

Exemplu: Pentru a crea un set de date din înregistrările de baze de date, în care câmpul „Titlu“ conține valoarea „profesor“, puteți utiliza acest handler: Un alt exemplu: pentru a filtra de bază, „angajați“ cu condiția „Selectați toate care numărul de tabel (câmp „#“) este mai mare decât valoarea introdusă de către utilizator în edit1, iar în câmpul „Nume“ este un subșir de caractere introduse de utilizator în Edit2 „:

În cazul în care handler linia de filtrare și evenimentul OnFilterRecord stabilit criterii diferite de filtrare, ambele.

Metodele de filtrare îmbunătățită

1. Metode de filtrare

În plus față de metodele descrise mai jos, sunt unice pentru TTable, seturi de date au de asemenea proprietăți generale, metode și evenimente pentru filtrare - Filtre Filtrată, OnFilteredRecord, FindFirst, FindLast, FindNext, FindPrior.

Pentru a filtra înregistrările TTable are următoarele metode:
  • SetRangeStart - stabilește limita inferioară a filtrului;
  • EditRangeEnd - utanavlivaet superioară limită de filtru;
  • ApplyRange - filtrează intrările din TTable;
  • SetRange - are același efect ca și metodele SetRangeStart de punere în aplicare coerente, EditRangeEnd și ApplyRange.
Ca parametri sunt utilizati constantele matrici, fiecare dintre care cuprinde valori ale câmpurilor cheie.

Metodele de filtrare ApplyRange, SetRange trebuie efectuată pe implicit cheie polyam.Po este indicele curent, proprietatea TTable.IndexName definită sau TTable.IndexFieldNames. În cazul în care valorile acestor proprietăți nu sunt setate, indicele principal este utilizat în mod implicit. Prin urmare, dacă doriți să utilizați un index, altul decât comandantul, trebuie să resetați în mod explicit valoarea TTable.IndexName de proprietate (denumirea curentă a indicelui) sau TTable.IndexFieldNames (lista de câmpuri ale indicelui curent).

2. Utilizarea SetRange

Metoda arată nu numai câmpurile index de înregistrări care se află în intervalul [StartValues..EndValues].

Exemplu: Să presupunem că toate înregistrările sunt afișate în setul de date Table1. Inclus în setul de structura de înregistrare a datelor din două câmpuri: „număr de grup“ și „Numele elementului“. Să indicele curent construit pe câmpul „Număr grup“.
Să ne scrie acest eveniment handler: CheckBox1.Click: În datele filtrate stabilite doar acele intrări, câmpul index al indicelui în care curentul (în acest caz, „numărul de grup“) are o valoare care se află într-un interval predeterminat. În acest caz, intervalul de variabilă definită GrNumTmp. Prin urmare, GrNumTmp = 3 vor fi afișate intrările aparținând grupurilor 3.

Dacă ne-am dorit în înregistrarea de date CCD filtrate din mai multe grupuri, ar trebui să adăugați sub forma celui de al doilea component Edit2, în care grupul final va introduce un număr în timp ce în edit1 pentru a introduce numărul inițial de grup: Procedura TForm1.CheckBox1Click (Expeditor: TObject);