Sunteți pe pagina 1din 8

CAP.

XIV OBIECTE I COLECII


14.1.3 OBIECTUL APPLICATION Obiectul Application refer aplicaia Microsoft Access. Metoda CurrentDb returneaz un obiect baz de date care refer baza de date curent. 14.1.4 OBIECTUL DEBUG Obiectul Debug refer fereastra Immediate, care ajut la testarea procedurilor i funciilor. Metodele acestui obiect sunt: Print - afieaz un text n fereastra Immediate; Assert - permite ntreruperea execuiei unei proceduri sau funcii.

14.2 CTEVA

OBIECTE DIN COMPONENTA DAO

Microsoft DAO dispune de obiecte i colecii ce permit conectarea la o baz de date prin motorul de baz de date Microsoft Jet Database Engine, sau prin ODBC. n continuare, vom prezenta cteva colecii i obiecte DAO. Colecia Databases conine toate obiectele Database deschise. Colecia Recordsets conine toate obiectele Recordset deschise din obiectul Database. Colecia TableDefs conine tabelele definite de utilizator n baza de date (obiectele de tip TableDef). Obiectul TableDef memoreaz numai informaiile despre structura tabelului. Colecia QueryDefs conine interogrile definite de utilizator n baza de date (obiectele de tip QueryDef). Colecia Fields conine cmpurile unui obiect de tip TableDef, QueryDef, Index, Relation, Recordset. 14.2.1 OBIECTUL DATABASE Obiectul Database refer o DB deschis. Pentru a crea un obiect Database din baza de date curent se poate folosi metoda CurrentDb a obiectului Application, astfel:
Set obiect_DataBase = CurrentDb

Cteva metode ale obiectului Database: Close - nchide baza de date referit; OpenRecordset - se creeaz un nou obiect recordset (set de nregistrri). 14.2.2 OBIECTUL RECORDSET Obiectul RecordSet este unul dintre cele mai utilizate obiecte n VBA. Un obiect Recordset refer un set de nregistrri dintr-un tabel sau interogare. n tabelul 14.11 prezentm cteva tipuri de seturi de nregistrri.

Tabelul 14. 1

Tipuri de seturi de nregistrri Tip Recordset Descriere (set nregistrri) Table Este obinut dintr-un tabel Dynaset Este obinut dintr-o interogare actualizabil Snapshot Folosete numai pentru a cuta date n el sau pentru un raport. Nu se poate actualiza Forwardonly Este identic cu cel de tip Snapshot, diferena fiind c se poate parcurge numai nainte Principalele metode ale obiectului RecordSet. MoveFirst permite deplasarea la prima nregistrare. MoveLast permite deplasarea la ultima nregistrare. MovePrevious permite deplasarea la nregistrarea precedent. MoveNext permite deplasarea la urmtoarea nregistrare. AddNew adaug o nregistrare nou (vid). Update salveaz o nregistrare nou sau una modificat. Close nchide setul de nregistrri asociat obiectului. OpenRecordset deschide setul de nregistrri asociat obiectului. Se utilizeaz astfel:
Set obiect_Recordset=obiect_Database.OpenRecordset(sursa, tip_set)

unde: sursa tip_set

- ir de caractere ce reprezint numele tabelului, interogrii sau frazei SQL din care se construiete noul set de nregistrri; - constant ce indic tipul setului de nregistrri.
Tabelul 14. 2

Constante pentru tip_set Constanta Descriere dbOpenTable Set de nregistrri obinut dintr-un tabel dbOpenDynaset Set de nregistrri de tip Dynaset dbOpenSnapshot Set de nregistrri de tip Snapshot dbOpenForwardonly Set de nregistrri Delete terge o nregistrare. Edit face posibil modificarea coninutului unei nregistrri. Seek permite cutarea unei nregistrri dup un index. Dac indexul dup care se caut nu este unic, atunci se caut prima nregistrare din set, care satisface criteriul de cutare. Pentru a se putea utiliza metoda Seek, trebuie s se stabileasc n prealabil cmpurile index dup care se face cutarea cu ajutorul proprietii Index. Metoda Seek se poate utiliza ntr-un set de nregistrri asociat unui tabel, astfel:
obiect_Recordset.Seek crit_comparare, cheia1, cheia2,

unde:

crit_comparare - poate fi unul dintre operatorii de comparare >,<,>=,<=,= cheia1, - chei de cutare. Metoda Seek returneaz n proprietatea NoMatch valoarea adevrat (TRUE) dac nu a fost gsit nici o nregistrare i valoarea fals (FALSE) dac nregistrarea a fost gsit. n acest ultim caz se realizeaz i poziionarea pe prima nregistrare gsit. FindFirst permite cutarea primei nregistrri care ndeplinete criteriul precizat; aceasta devine nregistrarea curent; cutarea se face de la nceputul setului de nregistrri spre sfrit; FindNext permite cutarea urmtoarei nregistrri care ndeplinete criteriul specificat, pornind de la nregistrarea curent spre sfritul setului de nregistrri; FindPrevious permite cutarea precedentei nregistrri care ndeplinete criteriul specificat, pornind de la nregistrarea curent spre nceputul setului de nregistrri; FindLast permite cutarea unei nregistrri care ndeplinete criteriul specificat, parcurgnd setul de la sfrit spre nceput. Metodele FindFirst, FindNext, FindPrevious i FindLast se utilizeaz astfel:
obiect_Recordset.{FindFirst|FindNext|FindPrevious|FindLast} criteriu_cutare

Rezultatul cutrii se poate testa la fel ca n cazul metodei Seek, folosind proprietatea NoMatch. Aceste patru metode se pot utiliza pe un set de nregistrri de tip dynaset sau snapshot. Principalele proprieti ale obiectului Recordset. BOF indic faptul c pointerul de nregistrare curent se afl sau nu nainte de prima nregistrare. BOF ia valoarea TRUE sau FALSE. EOF indic faptul c pointerul de nregistrare curent se afl sau nu dup ultima nregistrare. EOF ia valoarea TRUE sau FALSE. Index indic numele indexului curent din tabelul referit de obiectul recordset. Name indic numele referit de obiectul recordset. RecordCount indic numrul nregistrrilor din setul de nregistrri. Este valabil numai pentru obiectele recordset care refer tabele. NoMatch indic dac a fost gsit nregistrarea cutat cu metoda Seek sau una din metodele FindFirst, FindNext, FindPrevious i FindLast.

14.3 INSTRUCIUNEA WITH


Pentru a simplifica scrierea unor instruciuni care fac referire la acelai obiect se poate folosi instruciunea With. Sintaxa ei este:
With nume_obiect instuciuni End With

14.4 APLICAII CU OBIECTE


14.4.1 RECORDSET - MODIFICAREA UNUI CMP Tabelul MiFix conine cmpul Den de tip Text. S se scrie o procedur general ce transform n fiecare nregistrare caracterele din cmpul Den n litere mari. Procedura este:
Sub Modif() Dim rc As Recordset Set rc = CurrentDb.OpenRecordset("MiFix", dbOpenTable) Do While Not rc.EOF rc.Edit rc!Den = UCase(rc!Den) rc.Update rc.MoveNext Loop rc.Close End Sub

Explicaii Instruciunea Dim se creeaz o variabil de tip obiect. Cu instruciunea Set se atribuie un obiect variabilei obiect rc, de tip Recordset. Metoda Edit permite modificarea unei nregistrri. Instruciunea
rc!Den = UCase(rc!Den)

modific cmpul Den. Metoda Update salveaz nregistrarea modificat. Dac nu se pune Update, nu se execut modificarea n tabel. Metoda MoveNext realizeaz deplasarea la urmtoarea nregistrare. Metoda Close nchide setul de nregistrri asociat obiectului rc. 14.4.2 RECORDSET - MODIFICAREA UNUI CMP , INSTRUCIUNEA WITH Spre deosebire de aplicaia precedent, se va folosi instruciunea With.
Sub ModifWith() Dim rc As Recordset Set rc = CurrentDb.OpenRecordset("MiFix", dbOpenTable) With rc Do While Not .EOF .Edit !Den = UCase(rc!Den) .Update .MoveNext Loop .Close End With End Sub

14.4.3 RECORDSET - METODA SEEK NTR-O PROCEDUR GENERAL Considerm tabelul MiFix. S se caute i s se afieze denumirea mijlocului fix avnd un anumit numr de inventar. Se va folosi metoda Seek a obiectului Recordset. Numrul de inventar este n cmpul NrI, iar denumirea n cmpul Den. NrI este indexat. Numrul de inventar se va introduce cu InputBox iar rezultatul cutrii se va afia cu MsgBox.
Sub CautSeek() Dim rc As Recordset, x As Long Set rc = CurrentDb.OpenRecordset("MiFix", dbOpenTable) rc.Index = "PrimaryKey" x = InputBox("Dati numarul de inventar") rc.Seek "=", x If rc.NoMatch Then MsgBox "Mijloc fix inexistent" Else MsgBox rc!Den End If rc.Close End Sub

14.4.4 RECORDSET - METODA SEEK NTR-O PROCEDUR EVENIMENT Spre deosebire de aplicaia precedent, numrul de inventar se citete dintr-o caset de text. Instruciunile procedurii se ataeaz unui buton de comand. Caseta de text, eticheta corespunztoare ei i butonul de comand se afl pe un formular (Figura 15. 1). Proprietatea Name a casetei de text se schimb n txtNrI. Proprietatea Caption pentru eticheta din stnga casetei de text este Numar inventar. Seek in procedura eveniment, este o etichet. Proprietatea Caption pentru buton este Seek.

Figura 15. 1 Rezultatul cutrii se va afia cu MsgBox. Instruciunile procedurii eveniment sunt prezentate n continuare.
Private Sub Command0_Click() Dim rc As Recordset Set rc = CurrentDb.OpenRecordset("MiFix", dbOpenTable) rc.Index = "PrimaryKey" rc.Seek "=", txtNrI.Value If rc.NoMatch Then MsgBox "Mijloc fix inexistent"

Else MsgBox rc!Den End If rc.Close End Sub

Schimbarea proprietii Name pentru o caset de text se face astfel: - clic dreapta pe caset Properties tab-ul Other; - se tasteaz n caseta Name noul nume; - se nchide fereastra cu proprieti a casetei de text 14.4.5 DOCMD - AFIAREA INTEROGRILOR Interogrile Query1, Query7 i Query8 realizeaz calculul amortizrii mijloacelor fixe, calculul valorii de intrare totale i calculul valorii de intrare totale pe fiecare secie. Se cere procedura eveniment pentru obinerea acestor liste. Alegerea unei liste se face prin cte o caset de validare. Se va folosi obiectul DoCmd. Formularul este prezentat n Figura 15. 2.

Figura 15. 2 Instruciunile procedurii


Private Sub Command6_Click() If chkAmort.Value Then DoCmd.OpenQuery "Query1", acViewNormal, acEdit If chkVal.Value Then DoCmd.OpenQuery "Query7", acViewNormal, acEdit If chkValS.Value Then DoCmd.OpenQuery "Query8", acViewNormal, acEdit End Sub

Proprietatea Name a casetelor de validare este: chkAmort, chkVal, chkValS. Schimbarea proprietii Name pentru o caset de validare: - clic dreapta pe caset Properties tab-ul Other; - se tasteaz n caseta Name noul nume; - se nchide fereastra cu proprieti a casetei de validare.

14.4.6 DOCMD - ADUGAREA NREGISTRRILOR UTILIZND UN FORMULAR Scriei o procedur eveniment pentru adugarea nregistrrilor n tabelul Sectii prin intermediul unui formular de introducere, numit ActSectii, ce se deschide cu obiectul DoCmd. Crearea procedurii - Creai formularul ActSectii - Creai un formular gol, numit ActualizariSectii - Desenai un buton de comand i schimbai proprietatea Caption n Adaugare i proprietatea Name n Adaug (Figura 15. 3).

Figura 15. 3 - Deschidei fereastra de cod pentru butonul Adaugare i introducei instruciunea DoCmd, ntre Private i End Sub.
Private Sub Adaug_Click() DoCmd.OpenForm "ActSectii", acNormal End Sub

- nchidei fereastra de cod - Salvai i nchidei formularul Rularea procedurii - Dublu clic pe formularul ce conine butonul de comand Adaugare - Clic pe butonul Adaugare i apare formularul de introducere (Figura 15. 4) - Se introduc nregistrri - La terminare, se nchid formularele

Figura 15. 4 14.4.7 DOCMD - CREAREA UNUI TABEL I ADUGAREA UNOR NREGISTRRI Scriei o procedur eveniment pentru crearea tabelului MiFixN, pornind de la tabelul MiFix. Tabelul creat va conine cmpurile NrI, Sectie, Den i nregistrrile corespunztoare seciei cu codul 10. Crearea procedurii - Creai un formular gol - Desenai un buton de comand i schimbai proprietatea Caption n Adaugare - Deschidei fereastra de cod pentru butonul Adaugare - Introducei instruciunea
DoCmd.RunSQL SELECT NrI, Sectie, Den INTO MiFixN FROM MiFix WHERE Sectie=10

- nchidei fereastra de cod - Salvai i nchidei formularul Rularea procedurii - Dublu clic pe formularul ce conine butonul de comand Adaugare - Clic pe butonul Adaugare - Rspundei cu Yes la mesajele ce apar - La terminare, nchidei formularul.

S-ar putea să vă placă și