Obiecte DAO (de accesare a datelor)
Colectia Recordsets (seturi de īnregistrari)
Obiectele de tip Recordset (set de īnregistrari) sunt cel mai des folosite si deci, poate, cele mai importante obiecte DAO. Ele permit manipularea directa a datelor dintr-o baza de date. Aceste obiecte sunt temporare (nu sunt salvate pe disc), fiind folosite pentru a reprezenta īnregistrarile dintr-o tabela sau īnregistrarile returnate de o interogare, punānd la dispozitia programatorului posibilitati de adaugare, editare, stergere si mutare a datelor solicitate de aplicatie.
Access 2000 recunoaste cinci tipuri de obiecte Recordset
Obiecte Recordset de tip tabel;
Obiecte Recordset de tip dynaset;
Obiecte Recordset de tip instantaneu (snapshoot);
Obiecte Recordset cu deplasare numai īnainte (forward-only);
Obiecte Recordset de tip dinamic.
Alegerea se face īn functie de mai multi factori, cum ar fi:
numarul de īnregistrari existente īn setul de īntegistrari;
daca se doreste actualizarea īnregistrarilor sau numai afisarea lor;
daca tabelele sunt stocate īntr-o baza de date creata cu Access sau īn alt tip de baza de date.
Obiectele Recordset de tip tabel sunt utilizate pentru a manipula tabele Access locale sau atasate. Principalul avantaj este ca permit folosirea indecsilor, care maresc viteza de cautare a unor īnregistrari.
Obiectele Recordset de tip dynaset pot fi utilizate pentru a manipula rezultatele unei interogari, pentru actualizari si extrageri din mai multe tabele, chiar din tabele apartinānd altei baze de date. De obicei, sunt folosite īn cazul īn care obiectul Recordset este prea mare sau cānd contine obiecte OLE.
Au doua caracteristici principale:
permit editare īnregistrarilor, rezultatele reflectāndu-se īn tabelele de baza;
atāta timp cāt un obiect de tip dynaset este deschis, Access actualizeaza īnregistrarile acestuia ca raspuns la modificarile pe care le efectueaza alti utilizatori īn tabela de baza.
Pentru obiectele Recordset de tip instantaneu, datele incluse sunt fixate la momentul crearii, deci nu pot fi modificate ulterior. Avantajele sunt dimensiunea redusa a obiectelor Recordset si faptul ca pot fi create mai rapid decāt cele de tip dynaset.
Metode:
AddNew - creeaza o noua īnregistrare pentru un obiect Recordset actualizabil;
Delete - sterge īnregistrarea curenta dintr-un obiect Recordset actualizabil;
Edit - copiaza īnregistrarea curenta dintr-un obiect Recordset actualizabil īntr-un buffer pentru editare;
Requery - reactualizeaza īnregistrarile din setul pe care īl refera obiectul curent;
Update - salveaza continutul buffer-ului copie īntr-un obiect Recordset actualizabil;
Find First - localizeaza īntr-un obiect Recordset prima īnregistrare care satisface anumite criterii;
Find Next - localizeaza īntr-un obiect Recordset urmatoarea īnregistrare care satisface anumite criterii;
Find Previous - localizeaza īntr-un obiect Recordset īnregistrarea anterioara care satisface anumite criterii;
Find Last - localizeaza īntr-un obiect Recordset ultima īnregistrare care satisface anumite criterii;
MoveFirst - īntr-un obiect Recordset, prima īnregistrare devine īnregistrarea curenta;
MoveNext - permite deplasarea pe urmatoarea īnregistrare;
MovePrevious - permite īntoarcerea la īnregistrarea precedenta;
MoveLast - īntr-un obiect Recordset, ultima īnregistrare devine īnregistrarea curenta;
Seek - īntr-un obiect Recordset de tip tabel indexat, localizeaza o īnregistrare care satisface criteriile specificate pentru indexul curent;
OpenRecordset - deschide setul de īnregistrari asociat obiectului;
Close - īnchide setul de īnregistrari asociat obiectului;
Proprietati:
BOF - indica faptul ca pointerul de īnregistrare curenta se afla sau nu īnainte de prima īnregistrare (True);
EOF - indica faptul ca pointerul de īnregistrare curenta se afla sau nu īnainte de ultima īnregistrare (True);
Index - indica numele indexului curent din tabela referita de obiectul Recordset;
NoMatch - indica faptul ca īntr-un set de īnregistrari a fost gasita sau nu īnregistrarea cautata; daca s-a terminat cu succes cautarea, primeste valoarea True; altfel primeste valoarea False;
RecordCount - indica numarul de īnregistrari din setul de īnregistrari;
ValidationRule - este un sir de caractere prin care se stabilesc regulile ce trebuiesc īndeplinite pentru ca o īnregistrare sa fie considerata valabila;
ValidationText - este mesajul de eroare afisat pe ecran īn cazul īn care regulile din ValidatinRule nu sunt īndeplinite.
Colectia Relation (relatii)
Fiecare relatie dintre doua sau mai multe tabele ale unei baze de date Access e reprezentata printr-un obiect de tip Relation. Colectia Relations a unui obiect de tip Database contine toate relatiile definite īn baza de date respectiva.
Metode:
Append - adauga relatia la colectia Relations;
CreateField - creeaza cāmpurile de legatura;
Proprietati:
Name - indica numele relatiei;
Attributes - indica atributele relatiei (dbRelationLeft, dbRelation DeleteCascade, etc);
Table - indica numele primei tabele;
ForeignTable - indica numele celei de-a doua tabele.
Colectia Parameters (parametri)
Ati vazut ca īn Access puteti crea interogari cu parametri. Parametrii declarati cu ajutorul cuvāntului cheie PARAMETERS īn instructiunea SQL a unei interogari se numesc parametri formali. Colectia Parameters a unui obiect de tip QueryDef e formata din toti parametri formali definiti pentru interogarea respectiva. Nu puteti sterge sau adauga obiecte la colectia Parameters.
Colectia Properties (proprietati)
Un obiect de tip Property reprezinta o caracteristica a unui obiect. Fiecare obiect DAO are o colectie Properties. Un obiect de tip Property poate fi o proprietate predefinita sau una definita de utilizator.
Proprietatile predefinite ale unui obiect reprezinta caracteristicile de baza ale acestuia. Ele exista īnca de la crearea obiectului si sunt disponibile pentru orice aplicatie ce foloseste motorul Jet. De exemplu, pentru un obiect de tip Field (cāmp), proprietatile Name (nume) si Type (tip) sunt predefinite.
Proprietatile definite de utilizator nu exista pāna cānd nu sunt adaugate la colectia Properties a obiectului. De exemplu, proprietatea Description (descriere) a unui cāmp nu este predefinita si nu exista pāna cānd nu introducesi descrierea. Daca īncercati sa regasiti proprietatea Description a unui obiect ce īnca nu o are, veti obtine o eroare.
Programatorul poate adauga proprietati (cu ajutorul metodei CreateaProperty) unui anumit obiect si este responsabil pentru stabilirea si modificarea valorilor acestor proprietati. Proprietatile definite pot fi sterse din colectia Properties a unui obiect; proprietatile predefinite nu pot fi sterse.
Pentru a regasi o proprietate predefinita a unui obiect, puteti folosi sintaxa:
obiect.proprietate
Pe de alta parte, nu puteti regasi o proprietate definita de utilizator decāt prin intermediul colectiei Properties a obiectului:
obiect.Properties("proprietate") sau
obiect.Properties!proprietate
Aceasta din urma functioneaza si pentru proprietati predefinite.
Cu ajutorul instructiunii With puteti stabili mai multe proprietati ale unui obiect, fara a mai fi necesar sa specificati obiectul pentru fiecare proprietate īn parte:
Private Sub Set_Form_Prop()
With txtCtl
.Text = "Acesta este un control de tip text"
.ForeColor = RGB(0,255,0) verde
.BackColor = 0
End With
End Sub
Containere si documente
Un container este o colectie de obiecte salvate īn Access: baze de date, formulare, rapoarte, module, tabele, relatii. Termenul "document" este o descriere generica pentru un obiect stocat īntr-un container. Pentru a īntelege mai bine ce reprezinta containerele si documentele, gānditi-va la fereastra Database. Fiecare pagina a acestei ferestre reprezinta un container, iar fiecare obiect dintr-o pagina este un document.
Pentru a examina containerele si documentele unei bazei de date vom scrie urmatoarea subrutina care le va afisa pe ecran:
Sub Containere_documente()
Dim dbCrt As Database
Dim conCrt As Container
Dim docCrt As Document
Set dbCrt = DBEngine.Workspaces(0).Databases(0)
For Each conCrt In dbCrt.Containers
Debug.Print "Container:" & conCrt.Name
For Each docCrt In conCrt.Documents
Debug.Print " Document:" & docCrt.Name
Next
Next
End Sub
Īntāi am definit trei variabile: una de tip Database, care indica baza de date curenta, una de tip Container care indica fiecare element din colectia Containers si una de tip Document, ce indica fiecare document dintr-un container.
Pentru a atribui valori obiectelor am folosit cuvāntul cheie Set.
Apoi, pentru a itera printre elementele colectiilor Containers, am folosit instructiunea For Each, ce se aseamana cu instructiunea For...Next, cu deosebirea ca este creata special pentru parcurgerea colectiilor.
Rezultate:
Fig
Lucrul cu variabile de tip obiect
La declararea unei variabile de tip obiect, Access creeaza numai un pointer la un obiect. De exemplu, nici una dintre declaratiile de mai jos nu stocheaza informatii si, deocamdata, nu indica vreun obiect existent:
Dim dbCrt As Database
Dim form As Form
Dim ctl As Control
Pentru a le face sa indice un obiect, trebuie sa folosim cuvāntul cheie Set, ca mai jos:
Set dbCrt = DBEngine.Workspaces(0).Databases(0)
Set frm = dbCrt.Forms!Agenti
Set ctl = frm.Controls!Nume
Legatura dintre o variabila si obiectul spre care aceasta indica este distrusa (si memoria necesara este eliberata) odata cu expirarea duratei de viata a variabilei. Pentru a elibera, īn mod explicit, o variabila, putem folosi valoarea predefinita Nothing:
Set frm = Nothing
Īn tabelul de mai jos sunt enumerate metodele prin care se poate accesa un element al unei colectii:
Sintaxa |
Exemplu |
Explicatii |
colectie ("nume") |
DBEngine.Workspaces(0).Databases(Agenti) | |
colectie (var) |
strbd="Agenti" DBEngine.Workspaces(0).Databases(strbd) |
var tip sir de caractere sau Variant |
colectie(indice) |
DBEngine.Workspaces(0).Databases(0) |
indice reprezinta pozitia obiectului īn cadrul obiectului |
colectie!nume sau colectie![nume] |
DBEngine.Workspaces(0).Databases!Agenti |
Parantezele drepte dunt necesare numai daca numele colectiei contine caractere speciale (de exemplu, spatii) |
Atāt operatorul " ! ", cīt si operatorul " . " sunt folositi pentru a descrie relatiile de apartenenta dintre colectii, obiecte si proprietati.
Īn general, dupa " ! " urmeaza numele unui obiect creat de dumneavoastra: un formular, un raport sau un control (deci un element al unei colectii). Astfel, operatorul " ! " separa un obiect de colectia din care face parte. Operatorul " . " este folosit, an general, pentru a separa un obiect de o colectie, proprietate sau metoda a sa.
Ati putut observa din exemplele de pāna acum ca adesea, pentru a obtine un pointer la un obiect, trebuie sa scrieti o linie de cod destul de lunga. Īn Access īnsa, aproape orice tip de obiect are o colectie implicita, care va fi luata īn considerare daca nu specificati nici o colectie. De aceea:
DBEngine.Workspaces(0).Databases(0).TableDefs(0)
se mai poate scrie prescurtat ca:
DBEngine (0) (0) (0)
Aceasta pentru ca, dupa cum puteti vedea si īn urmatorul tabel, TableDefs este colectia implicita a unui obiect de tip Database, Databases este colectia implicita a unui obiect de tip Workspace, iar Workspaces e colectia implicita a obiectului DBEngine.
Obiect |
Colectia implicita |
Container |
Documents |
Database |
TableDefs |
DBEngine |
Workspaces |
Group |
Users |
Index |
Fields |
QueryDef |
Parameters |
Recordset |
Fields |
Relation |
Fields |
TableDef |
Fields |
User |
Groups |
Workspace |
Databases |
Crearea si manipularea obiectelor DAO
Pentru a crea un obiect nou, procedati astfel:
Folositi una dintre metodele Create ... (Createable, CreateIndex, etc) pentru a crea obiectul dorit (tabela, index, etc).
Stabiliti proprietatile obiectului creat. Unele proprietati (cum ar fi numele) sunt esentiale si trebuie specificate la crearea obiectului. Altele pot fi stabilite si ulterior.
Adaugati obiectul la colectia corespunzatoare, pentru ca el sa faca parte din baza de date.
Daca obiectul nou creat contine alte obiecte (asa cum o tabela contine cāmpuri), trebuie sa creati īntāi obiectul principal si pe urma pe cele subordonate, pe care le adaugati la colectiile corespunzatoare ale obiectului principal. Apoi, īl adaugati si pe acesta la colectia sa. Īn tabelul de mai jos sunt prezentate īn detaliu metodele Create... cu argumentele acestora si cu descrierile de rigoare.
Obiect |
Metoda |
Argumente |
Tip de date |
Descriere |
Tabela |
CreateTableDef |
Name |
String |
Numele tabelei |
Attributes |
Integer |
Stabilire valori pentru tabele atasate, sistem sau ascunse |
||
Source |
String |
Informatii despre tipul tabelei de baza a unei tabele atasate |
||
Connect |
String |
Calea si numele fisierului unui tabele atasate |
||
Cāmp |
CreateField |
Name |
String |
Numele cāmpului |
Type |
Integer |
Tipul de date |
||
Size |
Integer |
Dimensiunea (pentru cāmpuri de tip text) |
||
Index |
CreateIndex |
Name |
String |
Numele indexului |
|