Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Aplicatii cu baze de date in Delphi

Informatica


Aplicatii cu baze de date în Delphi

6.1. Introducere



Utilizând Borland Database Engine (BDE), Delphi ofera capabilitati de comunicare cu lumea SGBD-urilor gen: Paradox, dBase, Access, FoxPro, servere SQL,etc. folosind în acest scop un protocol de lucru unitar.

Realizarea aplicatiilor Delphi care implica utilizarea intensa a bazelor de date presupune învatarea acestui protocol unitar cât si a elementelor suport disponibile în VCL pentru realizarea aplicatiilor cu baze de date.

Pentru cei interesati ar fi de spus faptul ca editia standard a kitt-ului Delphi 5, de exemplu, nu contine capabilitati de tip "database conectivity". Editia profesionala furnizeaza capabilitati de acces la fisiere Paradox, dBase (în mod nativ), Access, FoxPro si fisiere în format text ASCII, la care se adauga deschidere catre surse de date ODBC si Local Interbase.

Delphi Enterprise, consruit peste Delphi Profesional, are deschidere catre Interbase, Microsoft SQL Server, Oracle, Informix Dynamic Server, Sybase Adaptive Server, DB2.

Exista destui specialisti care lauda Delphi pentru abilitatea de a aduce usor în aplicatiile utilizator date provenind din "pestrita" lume a SGBD-urilor. Exista si specialisti care manifesta retinere fata de aceasta "frenezie" a mediilor vizuale de programare de a lua în stapânire, cu pretentii din ce în ce mai mari, universul aplicatiilor puternic marcate de prezenta bazelor de date. Nu avem timp de consideratii pe marginea "suferintelor" niciuneia dintre categoriile de specialisti mai sus mentionate. Ceea ce vom face în continuare va fi un lucru foarte precis:

-învatarea universului conceptual cu care se opereaza în Delphi, în procesul de realizare a aplicatiilor cu baze de date;

-exemplificarea si comentarea elementelor de sintaxa Object Pascal, esentiale pentrru realizarea aplicatiilor cu baze de date;

-Prezentarea, daca este cazul, a componentelor direct implicate în lucrul cu baze de date.

6.2 Concepte în lucrul cu baze de date în Delphi.

Data fiind diversitatea tipurilor de fisiere (deci baze de date) cu care încearca Delphi sa comunice, este de asteptat, pentru a se crea un cadru unitar de lucru cu 414g62e aceste fisiere(baze de date), sa se realizeze o abstractizare convenabila a acestei diversitati. Cea mai înalta abstractizare Delphi a unei coletii de date o reprezinta conceptul de set de date (DataSet).

Fara a exagera cu formalizarea, un set de date este o colectie de linii de date, fiecare linie având mai multe coloane, fiecare coloana fiind omogena din punct de vedere al tipului.

În limbaj de specialitate, o coloana se mai numeste si câmp iar o linie se mai numeste si înregistrare. Putem spune ca setul de date abstractizeaza un procedeu de caracterizare informationala a unei realitati obiectuale sau de alta natura, ca o coletie de date structurate pe linii si coloane.

VCL Delphi încapsuleaza un set de date într-o componenta abstracta numita TDataSet. TDataSet introduce multe dintre proprietatile si metodele necesare pentru manipularea si navigarea într-un set de date. Pentru mai multa rigoare, notiunile de baza cu care se opereaza în lumea aplicatiilor Delphi orientate pe baze de date sunt:

-Setul de date: o colectie de înregistrari; fiecare înregistrare are mai multe câmpuri. Fiecare câmp poate contine un tip diferit de data (numar întreg, sir de caractere, numar zecimal, obiect grafic, etc).

-Tabelul: un tip special de set de date (= un exemplu concret de set de date). Un tabel este, în general, un fisier continând înregistrari care, fizic, sunt pastrate pe un suport de memorie externa. Tabelul este abstractizat functional de clasa TTable a VCL.

-Query: este, de asemenea un tip special de set de date. De fapt, un Query este un tabel pastrat în memorie, generat de comenzi speciale care manipuleaza o anumita tabela sau o colectie de tabele. Obiectele Query sunt abstractizate în VCL de clasa TQuery. O componenta TQuery va permite sa interogati baza de date sau orice alta sursa de date sub forma unei întrebari precise (formalizate SQL - Structured Query Language) si sa primiti ca raspuns numai informatiile de care aveti nevoie (a se analiza ce se întâmpla în maniera clasica de interogare, într-o retea!).

-Database: desemneaza un director pe disc (daca este vorba de date non-server specifice Paradox, dBaze, etc.) sau o baza de date SQL în cazul în care se lucreaza cu un server SQL. VCL încapsuleaza acest concept cu ajutorul clasei TDataBase.

-Index: defineste regulile care stau la baza ordonarii unei tabele. Clasa TTable contine proprietati ti si metode care folosesc la manipularea indecsilor.

6.3 VCL si lucrul cu baze de date în Delphi

De la o versiune la alta, arhitectura VCL relativa la lucrul cu baze de date a fost îmbunatatita, astfel încât un numar tot mai mare de tipuri de baze de date sa fie usor de folosit în Delphi. În spatele acestui plus de potential, de la o versiune la alta, se afla BDE (Borland Database Engine). Radacina ierarhiei VCL de clase care modeleaza lucrul cu baze de date este ocupata de clasa TDataSet. TDataSet este o componenta care furnizeaza o reprezentare abstracta a înregistrarilor si tipurilor de date. O serie de metode ale clasei TDataSet pot fi redefinite pentru a crea componente care comunica cu formate fizice de date particulare.

Pagina Data Acces a VCL contine componente care pot fi folosite pentru accesul si gestiunea BDE-DataSet-urilor.

VCL reprezinta, la interfata cu programatorul, dataset-urile, folosind 3 componente: TTable, TQuery si TStoredProc. Toate aceste componente sunt derivate direct din componenta TDBDataSet care este, la rândul ei, derivata din TBDEDataSet, având ca stramos direct TDataSet.

Asadar: 


În aceasta ierarhie:

-TDataSet este o componenta abstracta care încapsuleaza capabilitatile de management, navigare si manipulare a dataset-urilor.

-TBDEDataSet este, de asemenea, o componenta abstracta care reprezinta un dataset specific BDE.

-TDBDataSet introduce concepte precum: database si sesiune BDE.

-TTable este o componenta care care reprezinta structura si datele continute într-o tabela a unei baze de date.

-TQuery este o componenta care reprezinta un set de date returnate în urma unei înterogari SQL.

-TStoredProc încapsuleaza o procedura stocata pe un server SQL.

Deschiderea unui DataSet (Tabel)

Înainte de a face orice alta operatie asupra unui tabel, trebuie, mai întâi sa-l deschideti.

Deschiderea unui tabel se poate face cu un simplu apel al metodei Open():

Tabel1.Open;

ceea ce este echivalent cu setarea proprietatii Active a unui tabel la valoarea True.

Tabel1.Active:=True;

Odata ce ati deschis un tabel, sunteti liberi sa îl manipulati. Terminarea lucrului cu un tabel înseamna un apel de tipul:

Tabel1.Close;

sau

Tabel1.Active:=false;

Navigarea într-un tabel

TDataSet furnizeaza o serie de metode simple pentru operatiile fundamentale necesare pentru navigarea într-un tabel.

First() - pozitionare pe prima înregistrare a tabelului.

Last() - pozitionare pe ultima înregistrare a tabelului.

Next() - pozitionare pe urmatoarea înregistrare în tabel, în raport cu pointerul curent;

Prior() - pozitionare pe precedenta înregistrare în tabel, in raport cu pointerul curent.

MoveBy() - deplaseaza pointerul de înregistrare înainte sau înapoi cu un numar de înregistrari, indicat prin parametrul pozitiv sau negativ al metodei.

TDataSet are proprietatile booleene BOF si EOF, care indica daca înregistrarea curenta este prima sau ultima relativ la tabelul asociat. Este plauzibil urmatorul cod:

Table1.First;

while not Table1.EOF do

begin

Tabel1.Next;

end;

Semne de carte

Semnele de carte permit salvarea pozitiei curente din tabel astfel ca, ulterior se poate reveni rapid în aceeasi pozitie. Manevrarea semnelor de carte este doar o problema de setare/consultare a unei proprietati.

var

BM:TbookMarkStr;

Begin

BM:=Table1.BookMark;

Table1.BookMark:=BM;

Lucrul cu câmpurile unui tabel

Delphi permite accesul la câmpurile unui tabel cu ajutorul obiectelor de tip TField si al descendentilor acestui tip. Programatorul poate citi si seta valoarea unui cîmp al înregistrarii curente, dar poate si sa modifice comportamentul câmpului prin modificarea proprietatilor lui.

Valorile unui câmp

În Delphi, se pot accesa foarte usor câmpurile unui tabel. TDataSet are o proprietate array implicita, numita FieldValues[ ] care returneaza valoarea unui câmp particular ca o valoare de tip Variant. Deoarece FieldValues[ ] este o proprietate array implicita, nu este necesar sa specificati numele proprietatii pentru a accesa array-ul. De exemplu, în codul:



var

S:string;

S:=Table1['Nume Client'];

valoarea câmpului 'Nume Client' al înregistrarii curente este asignata variabilei S.

O consecinta imediata a mecanismului ilustrat de codul de mai sus este posibilitatea de a pastra valorile mai multor câmpuri într-un tablou variant. În Delphi, unit-ul System declara mai multe functii cu ajutorul carora pot fi manipulate tablourile Variant.

Astfel avem:

function VarArrayCreate (const Bounds: array of integer; varType: integer): variant;

Functia creeaza un tablou variant ale carui limite sunt specificate de Bounds iar tipul elementelor este specificat de paramatrul varType. Constanta Bounds este un vector care trebuie sa aiba un numar par de elemente, deoarece pentru fiecare dimensiune trebuie specificata limita inferioara si limita superioara. VarType este una din valorile asociate tipurilor recunoscute ca variant mai putin varArray, varByRef, varString. Pentru a crea un vector de string-uri se poate folosi codul de tip varOleStr. Daca varType este varVariant atunci elementele vectorului sunt variant care pot contine la rândul lor alte tipuri variant.

function VarArrayOf (const Values:array of variant):variant;

Functia este folosita pentru a crea un vector unidimensional având tipul de baza variant iar valorile care populeaza vectorul sunt specificate în Values.

function VarArrayDimCount (const A:variant):integer;

Returneaza numarul de dimensiuni ale unui tablou variant. În cazul în care A nu este un tablou variant se returneaza 0.

function VarArrayHighBound (const A:variant;Dim:integer):integer;

Returneaza limita superioara a dimensiunii Dim a unui tablou variant. Prima dimensiune este 1, a doua dimensiune este 2, etc.

function VarArrayLowBound (const A:variant;Dim:integer):integer;

Returneaza limita inferioara a unei dimensiuni. Utilizând potentialul unui tablou variant, este plauzibil urmatorul cod:

const

Sir=' %s are functia %s si are salariul %f ';

var

VarArr:variant;

F:double;

begin

VarArr:=VarArrayCreate([0,2],var Variant);

VarArr:=Table1['Nume;Functia;Salariul '];

F:=VarArr[2];

ShowMessage(Format(Sir,[VarArr[0],VarArr[1],F));

end;

Delphi 1 a introdus o tehnica de acces la valorile câmpului unui tabel, bazata pe proprietatea array Fields[], sau pe functia FieldsByName() si pe asocierea unui obiect TField cu un tabel.

Fields[] este un tablou zero-bazat, ceea ce înseamna ca Fields[0] returneaza un obiect reprezentând primul câmp logic al înregistrarii curente si asa mai departe.

FieldsByName() accepta un parametru string care specifica numele unui câmp al unei tabele.

Dat un obiect TField, puteti regasi sau asigna valoarea unui câmp folosind una din proprietatile TField.

Proprietate

Valoare returnata

AsBoolean

AsFloat

AsInteger

AsString

AsDataTime

Value

Boolean

Double

Longint

String

TDataTime

Variant

Deci este plauzibil codul:

var

S:string;

S:=Table1.Fields[0].AsString;

Tipuri de date câmp

Daca doriti sa cunoasteti tipul unui câmp, consultati proprietatea DataType a obiectului TField, care indica tipul de date raportat la tabela bazei de date (indiferent de tipul Object Pascal corespunzator). Proprietatea DataType este de tip TFieldType iar TFieldType are definitie de genul:

type

TFieldType=(ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD,ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFirstMemo, ftParadoxOLE, ftDBazeOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString,...)

Numele si numarul unui câmp

Pentru a gasi numele unui câmp se poate folosi proprietatea FieldName a unui obiect TField. Astfel, putem avea:

var

S:string;

begin

S:=Table1.Fields[0].FieldName;

end;

De asemenea, se poate obtine numarul unui câmp al carui nume se cunoaste cu ajutorul proprietatii FieldNo, astfel:

var

I:integer;

begin

I:=Table1.FieldsByName('Name').FieldNo;

end;

Manipularea câmpurilor de date

Exista trei pasi în editarea unuia sau a mai multor câmpuri ale înregistrarii curente:

Apelarea metodei Edit() a unui DataSet pentru a trece un DataSet în modul Edit.

Asignarea noilor valori câmpurilor alese printr-o astfel de operatie.

Validarea schimbarilor efectuate asupra DataSet-ului, sau prin apelul metodei Post() sau prin trecerea la o noua înregistrare, ceea ce valideaza automat rezultatul editarii.

Table1.Edit;

Table1['Nume']:= 'Corneliu Vadim';

Table1.Post;

De remarcat si proprietatea CanModify, care returneaza True daca DataSet-ul poate fi editat.

Unui DataSet i se pot insera sau adauga înregistrari si astfel:

1.Apelati una din metodele Insert() sau Append() ale DataSet-ului pentru a comuta în modul insert sau append.

2.Atribuiti valori câmpurilor.

3.Validarea unei înregistrari în DataSet prin apelul metodei Post() sau prin trecerea la o noua înregistrare, care forteaza validarea.

Daca dintr-un anume motiv, adaugarile sau modificarile facute, dar nevalidate, trebuie abandonate, acest lucru este posibil prin apelul metodei Cancel(), ca mai jos:

Table1.Edit;

Table1['Nume']:= 'Corneliu Vadim';

Table1.Cancel;

Apelul metodei Cancel invalideaza schimbarile operate asupra ultimei înregistrari, scoate DataSet-ul din modul Edit, Append sau Insert si îl aduce înapoi la modul Browse. Pentru a sterge o înregistrare a unui dataset, se foloseste metoda Delete() astfel:

Table1.Last;

Table1.Delete;

pentru a sterge ultima înregistrare din dataset.



Editorul de câmpuri

Delphi ofera un mare grad de control si flexibilitate asupra câmpurilor unui DataSet, prin intermediul Editorului de câmpuri.

Cu ajutorul editorului de câmpuri, care poate fi activat din meniul derulant asociat unui DataSet (de cele mai multe ori tabel) se pot efectua urmatoarele operatii:

1.Adaugarea unui câmp nou (prin stergerea unui câmp existent, pastrarea numelui lui si schimbarea tipului).

2.Definirea unui câmp calculat (calculated field).

3.Definirea unui câmp de tip lookup, ale carui valori se obtin prin relationarea tabelei la care se adauga câmpul lookup cu o alta tabela.

Adaugarea unui câmp de tip data nou

Pasii de parcurs pentru adaugarea unui astfel de câmp sunt:

1.Activare editor câmpuri.

2.Selectare câmpuri DataSet.

3.stergerea câmpului al carui tip dorim sa-l modificam

4.Activare fereastra de dialog new fields din meniul derulant asociat editorului de

câmpuri.

5.Completare nume câmp în caseta de editare Name asociata. Acest nume trebuie

sa coincida cu numele câmpului sters.

6.Selectare tip si, eventual completarea informatiei de lungime.

7.Activare buton Data în grupul de radio butoane Field Type.

8.OK. în fereastra New fields.

Efectele sunt imediate daca DataSet-ul este asociat cu o componenta browser

Definirea unui câmp calculat

Cu ajutorul editorului de câmpuri puteti adauga câmpuri calculate unui dataset. Protocolul de adaugare a unui astfel de câmp este urmatorul:

1.Activare fereastra de dialog New Field.

2.Introducerea unui nume pentru câmpul calculat în caseta de editare Name. Se

va evita introducerea unui nume de câmp deja existent în DataSet-ul contextual.

3.Selectare tip din caseta combo box asociata tipului.

4.Introducere informatie de lungime, daca este cazul.

5.Activati butonul Calculated în grupul de radio butoane Field Type.

6.Selectati OK.

Noul câmp este automat adaugat în lista câmpurilor persistente ale editorului de

câmpuri.

7.Adaugati codul care calculeaza valorile pentru câmpul calculat. Acest cod se

asociaza evenimentului OnCalcFields al DataSet-ului.

De remarcat, totodata, ca pentru a edita proprietatile sau evenimentele asociate unui câmp, selectati numele câmpului în lista editorului de câmpuri si, va puteti folosi de inspectorul de obiecte, ca de obicei.

Definirea unui câmp lookup

Adaugarea la lista de câmpuri a unui dataset a unui câmp lookup echivaleaza cu adaugarea unui câmp ale carui valori sunt obtinute prin relationare cu un alt dataset.

Lucrul cu câmpuri BLOB

Un câmp BLOB (Binary Large Object) este un câmp capabil sa contina o cantitate nedeteminata de date. Cel mai adesea, câmpurile BLOB sunt utile pentru pastrarea unei cantitati mari de text, imagini grafice sau fluxuri de date, precum obiectele OLE.

VCL Delphi include un descendent al tipului TField, numit TBlobField, care încapsuleaza un câmp BLOB.

TBlobField are o proprietate BlobType de tip TBlobType, care indica ce tip de data este pastrat în câmpul BLOB. TBlobType este definit în unit-ul DB astfel:

TBlobType=ftBlob..ftOraClob;

Toate tipurile de câmpuri asociate definitiei de mai sus sunt:

Tip câmp

Tipul de data

ftBlob

ftMemo

ftGraphic

ftFmtMemo

ftParadoxOle

ftDbase Ole

ftTypedBinary

Data fara tip sau definita de utilizator

Text

Bitmap Windows

memo formatat Paradox

object OLE Paradox

object OLE DBase

Reîmprospatare Dataset 

DataSet-ul abstractizeaza de cele mai multe ori un tabel. În momentul în care un dataset se cupleaza la o tabela (în urma unei operatii de tip Open(), DataSet-ul se comporta ca un flux în care adaugam înregistrari, din care stergem înregistrari sau în care modificam înregistrari. Din diverse motive, continutul DataSet-ului trebuie pus de acord, din când în când cu continutul tabelei asociate.

În acest scop se foloseste metoda Refresh().

Proprietatea State a unui DataSet

De multe ori este necesar sa stim daca un tabel este în unul dintre modurile Edit, Append, Insert, sau chiar daca este activat. Astfel de informatii se pot obtine consultând proprietatea State a DateSet-ului.

Proprietatea State este de tip TDataSetState si poate avea una din valorile:

dsBrowse  Dataset-ul este în mod Browse (normal).

dsCalcFields A fost apelat evenimentul OnCalcFields si un calcul de valoare

înregistrare este în derulare.

dsEdit  DataSet-ul este în Edit mod. Acesta înseamna ca metoda Edit a

fost apelata, dar înregistrarea editata nu a fost înca operata efectiv (ceea ce se

întâmpla la aplicarea metodei Post sau la trecerea la o noua înregistrare.).

dsInactive DataSet-ul este închis.

dsInsert DataSet-ul este în modul Insert

dsSetKey DataSet-ul este în SetKey mod, ceea ce înseamna ca a fost

apelata metoda SetKey, dar înca nu s-a facut un apel de tip GotoKey().

dsNewValue DataSet-ul este într-o stare temporara, caracterizata prin faptul ca



este accesata proprietatea NewValue a DataSet-ului.

dsOldValue DataSet-ul este într-o stare temporara, caracterizata prin faptul ca

este accesata proprietatea OldValue.

dsCurValue DataSet-ul este într-o stare temporara, ca la dsOldValue

dsFilter DataSet-ul este asociat, în stare curenta, cu procesarea unui

filtru.

Filtre

Filtrele permit programatorilor sa efectueze cautari sau filtrari asociate cu un DataSet, utilizând numai cod Object Pascal. Principalul avantaj al utilizarii filtrelor consta în faptul ca nu sunt necesare fisiere index sau alte pregatiri ale DataSet-urilor de acest gen.

Filtrele pot fi mai lente decât cautarea bazata pe indexare, dar sunt înca mult folosite în o serie de aplicatii, fie si numai din motive de simplificare a portarii unei aplicatii.

Filtrarea unui DataSet

Una dintre cele mai obisnuite utilizari ale mecanismului Delphi de filtrare este de a limita vizibilitatea DataSet-ului la un numar de înregistrari care îndeplinesc o anumita conditie. Aceasta filtrare se obtine, relativ simplu astfel:

Asignarea unei proceduri evenimentului OnFilterRecord al DataSet-ului. Înauntrul acestei proceduri trebuie scris cod care accepta înregistrari pe baza valorilor unuia sau mai multor câmpuri.

Setarea proprietatii Filtered la valoarea True.

Exemplu de procedura asignata evenimentului OnFilterRecord:

procedure TForm1.Table1Filterrecord(DataSet:TDataSet; var Accept:Boolean);

var

FieldVal:String;

begin

FieldVal:=DataSet['Compania'];

Accept:=FieldVal[1]='S';

end;

In acest cod s-a definit un filtru care permite prelucrarea doar a înregistrarilor din tabela pentru care câmpul "Compania" începe cu "S".

Find First / Find Next

TDataSet dispune de metodele FindFirst(), FindNext(), FindPrior() si FindLast() care întrebuinteaza handlerul evenimentului OnFilterRecord al unui DataSet pentru a permite pozitionarea pe prima înregistrare, urmatoarea înregistrare, precedenta înregistrare, respectiv, ultima înregistrare care îndeplineste o conditie specificata în termeni de filtre.

Pozitionarea pe o înregistrare (Cautarea unei înregistrari)

Filtrele nu sunt folositoare doar pentru a specifica o anumita perspectiva asupra unui DataSet; ele sunt folosite si pentru a cauta înregistrari ale unui DataSet utilizând valori ale unuia sau mai multor câmpuri. Metoda furnizata de DataSet în acest scop este Locate().

Definitia metodei este:

function Locate(const KeyFields:string; const KeyValue:Variant;  Options: TLocateOptions): boolean;

-KeyFields- indica numele câmpului(câmpurilor) dupa care se face cautarea;

-KeyValues- indica valoarea(valorile) câmpului(câmpurilor) cautate;

-Options- permite personnalizarea tipului de cautare;

TLocateOptions este un tip set definit în unit-ul DB astfel:

.

.

type

TLocateOption = (loCaseInsensitive, loPartialKey);

TLocateOptions = set of TLocateOption;

.

.

loCaseInsensitive  - cautarea nu este sensibila la case.

loPartialKey  - valoarea continuta în KeyValues este valida chiar si în calitate de

subsir al unei valori de tip câmp.

Locate() returneaza True daca a gasit o înregistrare. De exemplu, pentru a gasi prima aparitie a valorii 'Corneliu' în câmpul Nume al tabelei Table1, folosim sintaxa:

.

.

Table1.Locate('Nume','Corneliu',[lopartialKey]);

.

.

Utilizarea tipului Ttable

Prezentam, în continuare, proprietatile si metodele comune ale tipului TTable si modul de utilizare a acestora.

Cautarea înregistrarilor

Daca aveti nevoie sa cautati înregistrari într-un tabel, VCL furnizeaza câteva metode de ajutor în acest caz

Daca lucrati cu tabele dBase sau Paradox, Delphi presupune ca tabelele sunt indexate dupa câmpurile implicate în procesul de cautare. În deosebi în cazul tabelelor SQL, performanta procesului de cautare va avea de suferit daca fisierele în care cautam nu sunt indexate.

Pentru cautare putem folosi:

tehnica FindKey()

sau

tehnica SetKey()..GotoKey().

Metoda FindKey() permite cautarea unei înregistrari dupa unul sau mai multe câmpuri cheie. FindKey() accepta ca parametru un vector de constante (reprezentând criteriul de cautare) si returneaza True în caz de reusita a procesului de cautare. Exemplu:

if not Table1.FindKey([123,'Ionescu Victor'])

then MessageBeep(0);

.

.

Codul de mai sus determina pozitionarea în DataSet pe înregistrarea pentru care primul câmp-index are valoarea 123 iar al doilea câmp-index are valoarea 'Ionescu Victor'.

SetKey()..GotoKey()

Apelarea metodei SetKey() trece tabelul într-un mod care pregateste câmpurile lui pentru a fi încarcate cu valori reprezentând criterii de cautare. Odata ce criteriul de cautare a fost stabilit se foloseste metoda GotoKey() pentrua face o cautare top-down a unei înregistrari specificate în criteriul de cautare. În varianta SetKey()..GotoKey() exemplul precedent se scrie:

.

.

with Table1 do

begin

SetKey;

Fields[0].AsInteger:=123;

Fields[1].AsString:='Ionescu Victor';

if not GotoKey then MessageBeep(0);

end;

.

.




Document Info


Accesari: 4290
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )