Documente Academic
Documente Profesional
Documente Cultură
14.2 CTEVA
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)
- 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.
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"
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.
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.