Preluarea datelor din indexul tabelului - surse delphi faq

Obțineți la momentul executării lista de indexuri asociate tabelului este la fel de simplă ca apelarea metodei GetIndexNames pentru componentele TTable, TQuery sau TStoredProc. Metoda GetIndexNames returnează o listă disponibilă în setul de date pentru componenta TStrignList instalată pe formular (pentru exemplul nostru) sau alte componente vizuale, cum ar fi TListBox, prin intermediul proprietății Items:







Firește, lista de adrese TStrings returnată de metoda GetIndexNames nu ar trebui să fie utilizată de componenta vizuală. Poate fi o serie de nume de index, stocate în memorie și utilizate ca listă sau matrice.

Dar există posibilitatea de a obține informații suplimentare despre indiciile tabelului, și nu doar numele lor. Alte atribute descrise sunt numele fiecărui index, nume de câmp care includ fiecare index și opțiuni index utilizate la crearea acestora. Obținerea acestor valori este puțin mai dificilă decât să folosiți GetIndexNames. Practic, aceste valori pot fi obținute prin simpla iterare a proprietății IndexDefs a componentei TTable, TQuery sau TStoredProc. Proprietatea IndexDefs este în esență o matrice de înregistrări, o intrare pe index a tabelului.

Fiecare înregistrare index conține informații despre index. Procesul de obținere a unei serii de înregistrări care conțin informații despre fiecare index separat este destul de simplu de implementat.

Proprietatea IndexDefs a componentei TTable conține informații despre indexurile de tabelă utilizate de componentele TTable, TQuery sau TStoredProc. Proprietatea IndexDefs are de asemenea diferite proprietăți care conțin informații specifice despre indexurile extrase. Obiectul IndexDefs conține două proprietăți: este disponibil numai la rulare și are un semn de acces numai pentru citire; Indică numărul de elemente din proprietatea Articole (de exemplu numărul de indici din tabel). Acesta este disponibil numai la timpul de execuție și are un semn de acces numai pentru citire; o serie de obiecte TIndexDef, fiecare obiect descrie un index al tabelului.

Proprietatea Count a obiectului IndexDefs este baza pentru crearea unui contor de buclă, în corpul căruia elementele din proprietatea Items recuperează informații despre fiecare index al tabelului. Fiecare obiect IndexDef conținut în proprietatea Items conține un număr de proprietăți care descriu caracteristicile fiecărui index individual. Toate proprietățile obiectului IndexDef sunt disponibile numai la momentul executării și au un steag "numai pentru citire". Iată proprietățile: Înainte de a obține orice informații despre index (Count sau Items), trebuie să apelați metoda Update a obiectului IndexDefs. Aceasta actualizează (sau inițializează) setul indexat pentru obiectele IndexDef.







Iată un exemplu de simplu buclă care folosește proprietatea Count a obiectului IndexDefs ca numărător și extrage numele fiecărui index (dacă există) al tabelului reprezentat de componenta TTable numită Table1:

Mai jos este un exemplu care arată modul în care puteți prelua informații despre indici la momentul executării și îl puteți extrage la componenta TStringGrid (numită SG1).

Când lucrați cu mese de diferite tipuri, este necesar să țineți cont de particularitățile lor. Prin intermediul Delphi, puteți accesa mai multe tipuri de tabele și fiecare are propriile caracteristici specifice asociate cu informațiile extrase despre indexuri.

Atunci când se lucrează cu indici dBASE, proprietăți Domenii și Expression umplute în funcție de tipul de index, care poate fi la fel de simplu ca (bazat pe un domeniu) și un complex (bazat pe mai multe domenii sau dBASE expresii). Dacă indexul este simplu, proprietatea Fields va conține numele câmpului de tabel pe care este construit indexul și proprietatea Expression va fi gol. Dacă indicele este un complex, proprietate Expression este o expresie, pe baza cărora (de exemplu, „+ Câmpul 1 Câmpul 2“) a fost construit index, iar proprietatea Fields va fi gol.

Când lucrați cu indici paradoxali primari, proprietatea Nume va fi goală, proprietatea Fields va conține câmpurile din care a fost creat indicele și proprietatea Options va conține ixPrimary. Când se lucrează cu indexuri secundare, proprietatea Nume va conține numele indexului secundar, proprietatea câmpuri va conține câmpurile din care a fost creat indicele și proprietatea Opțiuni poate să conțină o valoare sau să fie goală.

Proprietatea câmpurilor din indexuri bazate pe mai multe câmpuri conține nume de câmp separate de punct și virgulă. Indicii bazați numai pe un câmp din proprietatea Fields conțin numele acestui câmp.

Pentru ambele tipuri de indici, construite pe unul sau mai multe câmpuri, proprietatea expresie este goală. Pentru indicii construiți pe un singur câmp, proprietatea Fields va conține numele câmpului pe care a fost creat indexul. Proprietatea câmpurilor din indexuri bazate pe mai multe câmpuri conține nume de câmp separate de punct și virgulă.

Indexuri definite în CREATE TABLE ca o sursă primară, în proprietatea Numele va conține valoarea „RDB $ PRIMARYn“, unde n - numărul ordinal de caractere care identifică în mod unic indexul principal în cadrul metadatele bazei de date. Indicii secundari conțin numele real al indexului.

Cheile externe conțin, de asemenea, indici creați de sistem. Astfel de indici vor fi conținute în proprietatea IndexDefs și vor avea numele "RDB $ FOREIGNn", unde n este numărul de serie al caracterului care identifică în mod unic indicele din metadatele bazei de date.

Proprietatea câmpurilor din indexuri bazate pe mai multe câmpuri conține nume de câmp separate de punct și virgulă. Indicii bazați numai pe un câmp din proprietatea Fields conțin numele acestui câmp.







Trimiteți-le prietenilor: