Obiectele Microsoft Access
O baza de date Microsoft Access este alcatuita din diferite tipuri de obiecte. Unel sunt utilizate pentru a afisa date din baza, altele pentru memorarea si gestionarea datelor iar altele ca ajutor în programare.
Unele obiecte sunt furnizate de Access, altele sunt oferite de diferite componente. În continuare se discuta doar obiectele din Access: forme, rapoarte, controale si module.
Deoarece Microsoft Access include mai multe componente, fiecare cu multimea proprie de obiecte, anumite seturi de obiecte sunt accesibile doar daca se specifica o referinta la biblioteca respectiva, referinta efectuându-se în mod uzual prin marcarea bibliotecii în lista afisata la comanda References din meniul Tools.
Access face referinta, în mod automat, la bibliotecile de obiecte:
Microsoft Access include, de asemenea, biblioteca Microsoft Office 8.0, dar aceasta trebuie sa fie referita pentru a avea acces la obiecte cum ar fi CommandBar, FileSearch sau Assistant.
Alte biblioteci trebuie sa fie referite daca obiectele lor sunt necesare în cadrul procesului de automatizare: de exemplu Microsoft Excel.
Pentru a lucra cu obiectele Microsoft Access din alte aplicatii care suporta automatizarea, în aplicatiile respective se va face referire la biblioteca de obiecte Microsoft Access 8.0.
Biblioteca de obiecte Microsoft Access 8.0 contine obiectele si colectiile enumerate în tabelul urmator. Obiectele si utilizarea lor sunt descrise în continuarea capitolului.
Obiectul sau colectia |
Descriere |
Application |
Reprezinta aplicatia Microsoft Access (obiect) |
Form |
Reprezinta o forma deschisa (obiect) |
Forms |
Contine toate formele deschise. (colectie) |
Report |
Reprezinta un raport deschis (obiect) |
Reports |
Contine toate rapoartele curente deschise (colectie) |
Control |
Reprezinta un control pe o forma, raport sau sectiune sau din alt control (obiect) |
Controls |
Contine toate controalele de pe o forma sau raport (colectie) |
Module |
Reprezinta un modul standard sau un modul clasa (obiect) |
Modules |
Contine toate modulele deschise curent (colectie) |
Reference |
Reprezinta o referinta la o biblioteca de obiecte (obiect) |
References |
Reprezinta toate referintele stabilite în mod curent (colectie) |
DoCmd |
Reprezinta o actiune macro din Visual Basic (obiect) |
Screen |
Reprezinta aranjarea curenta a obiectelor pe ecran. |
Obiectele Access sunt organizate în mod ierarhic, arborele de structura fiind urmatorul
Proprietatile, metodele si evenimentele asociate sunt vizibile, în mod similar tutror obiectelor accesate în VBA, prin Object Browser. Pentru a deschide acest instrument, se deschide un modul si apoi se da comanda Object Browser din meniul View (sau F2).
Obiectul Application reprezinta aplicatia Microsoft Access si este obiectul de nivel cel mai înalt din ierarhia de obiecte Access, continând toate celelalte obiecte si colectii.
Obiectul Application este obiectul implicit din ierarhia de obiecte. Drept urmare, atunci când se lucreaza din interiorul aplicatiei Access, nu este necesara referirea lui explicita când se utilizeaza una dintre proprietatile sau metodele sale, sau când se scrie o referinta la un obiect sau o colectie inclusa. Referirea explicita nu produce, totusi, erori.
Specificare obiectului Application este necesara doar atunci când, prin procedeul de automatizare, se lucreaza cu obiecte din ierarhia Access în interiorul altei aplicatii.
Atunci când se lucreaza cu obiectele Access din alte aplicatii, cum ar fi Excel sau Visual Basic, trebuie sa se introduca o referinta la biblioteca de obiecte si orice referire la un obiect Access trebuie sa înceapa cu Application, care permite intrarea în ierarhie.
Automatizarea trebuie sa înceapa cu etapele:
În Visual Basic Editor, aceste etape se realizeaza prin:
Dupa parcurgerea etapelor descrise, se poate utiliza variabila obiect creata pentru accesul la ierarhia de obiecte Access. Urmatorul exemplu, care lucreaza din Excel pe baza de date standard (furnizata de Microsoft Office si utilizata frecvent pentru exemplificari) Northwind, deschide o forma si lucreaza cu ea. Pentru a vedea functionarea exemplului se va deschide Excel, se va trece codul într-un modul si apoi se va executa.
Sub OpenNorthwindEmployees ()
Prin automatizare se poate lucra cu DAO prin stabilirea prealabila a unei referinte la biblioteca de obiecte Microsoft DAO 3.5 si utilizarea apoi a proprietatii DBEngine a obiectului Application Microsoft Access pentru returnarea unei referinte la obiectul DBEngine DAO. Prin acest din urma obiect se obtine acces la toata ierahia de obiect DAO.
Obiectul Form reprezinta o forma Access deschisa într-unul din modurile de vizualizare Design, Form sau Datasheet. Obiectele Form sunt grupate în colectia Forms, care contine doar formele deschise curent în baza de date.
În tabelul urmator sunt rezumate relatiile obiectelor Form si ale colectiei Forms:
Obiectul sau colectia |
Este continut(a) în |
Contine |
Form (obiect) |
Forms |
Colectia Controls Colectia Properties Obiectul Module |
Forms (colectie) |
Application |
Obiecte Form |
Pentru a lucra cu o forma în Visual Basic, trebuie sa se returneze o referinta la obiectul Form corespunzator, referinta obtinându-se prin intermediul colectiei Forms. O forma poate fi referita doar daca este deschisa iar deschiderea unei forme se realizeaza prin metoda OpenForm a obiectului DoCmd.
Ca orice element dintr-o colectie, o forma poate fi referita prin nume sau prin indexul din cadrul colectiei.
Referinta prin nume se poate face în mod explicit, daca se cunoaste numele formei în momentul proiectarii aplicatiei:
Dim frm As Formsau prin notatia cu paranteze, în cazul în care numele este cunoscut doar la momentul executiei, ca în exemplul urmator:
Function SetFormCaption (strFormName As String)Referinta prin indice este de genul Forms(1), indexarea colectiei Forms începând cu 0 (zero). În acest mod de referire trebuie sa se lucreze cu grija deoarece numerotarea se reface la orice închidere a unei forme, prin urmare o forma anumita poate avea indici diferiti în momente diferite de executie.
Cum colectia Forms cuprinde formele deschise la momentul respectiv, nu se poate adauga si nici nu se poate elimina un membru al colectiei (operatiuni posibile pentru alte colectii din VBA). Deschiderea si închiderea unei forme produce operatiunile de adaugare/eliminare a elementelor din colectie.
Pentru cazuri singulare (cum ar fi un obiect care nu se utilizeaza în mod repetat), referinta la o forma se poate efectua si direct, prin invocarea modulului clasa al formei:
Form_Employees.Visible = TrueDintre proprietatile obiectului Form sunt prezentate doar câteva, considerate mai importante. Pentru celelalte se va studia intrarea corespunzatoare din Help (Form Object).
Returneaza o referinta la forma în care se executa codul curent. Proprietatea poate fi utilizata în procedurile din modulul formei, poate fi utilizata pentru trecerea ca argument a obiectului Form fara a sti numele formei. Utilizarea proprietatii produce un cod independent de numele formei.
Urmatorul exemplu arata cum, la fiecare încarcare (deschidere) a formei, se poate modifica culoarea de fundal a sectiunii detaliu din forma. În acest scop se scrie cod în procedura eveniment respectiva:
' Procedura se adauga la modulul formeiEste de notat ca atunci când se lucreaza cu o forma Access din alta aplicatie, prin automatizare, nu se poate utiliza Me pentru a referi forma din aplicatia gazda.
O forma este divizata în Access în cinci sectiuni: detaliu (detail), antet (header), subsol (footer), antet de pagina (page header) si subsol de pagina (page footer). Proprietatea returneaza o referinta la o sectiune particulara, utilizarea acesteia permite stabilirea proprietatilor sectiunii. Pentru obiectul Form, sectiunile sunt identificate prin
Index |
Nume |
Semnificatie |
acDetail |
Form detail |
|
acHeader |
Form header |
|
acFooter |
Form footer |
|
acPageHeader |
Form page header |
|
acPageFooter |
Form page footer |
Un numar de proprietati se aplica mai degraba unei sectiuni dintr-o forma decât obiectului Form. De exemplu, proprietatea BackColor se aplica unei sectiuni si nu unei forme (a se vedea exemplul precedent). O sectiune are de asemenea o proprietatea Controls, care returneaza o referinta la colectia Controls pentru acea sectiune.
Urmatorul exemplu tipareste, în fereastra Debug, numele tuturor controalelor din sectiunea de detalii:
Sub ControlsBySection (frm As Form)Returneaza o referinta la colectia Properties a obiectului Form. Colectia Properties contine toate proprietatile formei si pot fi enumerate prin instructiunea For Each…Next.
La colectia Properties nu se poate adauga programatic o noua proprietate.
Urmatorul exemplu tipareste toate proprietatile unui obiect Form
Sub EnumerateFormProperties(frm As Form)Aplicata unui obiect Form, proprietatea Module returneaza o referinta la obiectul Module asociat formei. Referinta poate fi asignata unei variabile de tip Module.
Modulul asociat cu o forma nu exista în mod automat din momentul creerii formei. Proprietatea HasModule determina daca o forma are un modul asociat. Daca proprietatea Module este referita în modul proiectare, Access creeaza modulul asociat si stabileste valoarea True pentru HasModule. Referirea la proprietatea Module a unei forme în executie (run-time) pentru care HasModule este False produce eroare.
Prin proprietatea aceasta se leaga o tabela sau o interogare (query) la forma. Dupa ce proprietatii RecordSource i-a fost atribuit numele unei tabele sau interogari sau o instructiune SQL se pot afisa date din tabela, interogare sau SQL pe forma. Un exemplu este
Forms!frmCustomers.RecordSource = "Customers"prin care se leaga forma de o tabela.
Un obiect Form poate avea un modul asociat, care este reprezentat printr-un obiect Module. Cum acest modul nu este creat în mod automat la crearea formei, exista trei cai de creare a modulului asociat:
În lucrul cu module asociate, trebuie retinut ca o forma fara modul asociat se deschide mai repede. Prin urmare nu se vor crea module daca nu exista necesitatea scrierii de cod pentru forma. Eliminarea modulelor inutile reduce si dimensiunea bazelor de date.
Un modul de forma contine toate procedurile eveniment definite pentru forma, ca si alte proceduri specifice formei. De notat ca o procedura care se acceseaza din multiple locuri ale bazei de date trebuie plasata într-un modul standard.
Pentru generarea unei forme în timpul executiei (run-time) se poate utiliza functia CreateForm. Functiile asociate sunt CreateControl si DeleteControl care adauga sau elimina controale de pe o forma.
Se poate, de asemenea, sa se adauge programatic, în timpul executiei, cod în modulul asociat formei prin metodele si proprietatile obiectului Module. De exemplu, metoda CreateEventProc creeaza o procedura eveniment pentru obiectul specificat (aici forma, dar poate fi si raport, control etc.). Metoda InsertLines permite inserarea unor linii de cod, ca si InsertText, AddFromFile, AddFromString etc.
Urmatorul exemplu creeaza o forma si adauga o procedura eveniment modulului asociat formei.
Function CreateFormWithCode () As BooleanO discutie ceva mai ampla se gaseste la sectiunea dedicata colectiei Modules.
Un obiect Report reprezinta un raport microsoft Access care este deschis în Design view, Print Preview sau Layout Preview. Toate obiectele Report sunt membri ai colectiei Reports. De accentuat ca doar rapoartele deschise sunt reprezentate în colectie.
Relatiile în sus si în jos ale colectiei Reports în ierarhia de obiecte sunt date în tabelul urmator:
Obiectul sau colectia |
Este continut(a) în |
Contine |
Report (obiect) |
Reports |
Colectia Controls Colectia Properties Obiectul Module |
Reports (colectie) |
Application |
Obiecte Report |
Obiectele Report au caracteristici similare cu obiectele Form.
Pentru a referi un raport trebuie ca acesta sa fie deschis, operatiune realizata prin metoda OpenReport a obiectului DoCmd.
Referintele se returneaza în mod uzual, dupa unul dintre modelele:
Dim rpt As Report ' defineste variabila obiect rpt de tip ReportCa si un obiect Form, obiectul Report poate avea asociat un modul care este un modul clasa. Modulul de cod asociat nu exista pâna când nu este referit:
Pentru crearea programatica a rapoartelor se utilizeaza functie CreateReport. Controalele se pot adauga sau elimina, în run time, prin functiile CreateReportControl sau DeleteReportControl.
Sintaxa apelurilor este
CreateForm([database[, formtemplate]])
CreateReport([database[, reporttemplate]])
unde
database este un sir, identifica baza de date care contine raportul sau forma creata. Daca este omis, se va utiliza baza curenta (conform returului functiei CurrentDb). Baza de date specificata, daca este diferita de baza curenta, trebuie deschisa ca o baza de date biblioteca (vezi intrarile din Help pentru "library databases").
formtemplate, reporttemplate sunt, respectiv, siruri cu numele sabloanelor utilizate la crearea noului obiect. Daca este omis, se va alege în mod implicit sablonul specificat de fisa Forms/Reports din dialogul Options deschis de comanda Options din meniul Tools.
Functiile deschid un obiect nou, minimizat, în modul de vizualizare Design.
Sabloanele specificate pot fi create anterior ca sabloane sau pot fi orice forma, respectiv raport, din baza de date specificata în argumentul database.
Ambele functii creeaza un control cu atributele specificate pe o forma, respectiv pe un raport. Atât forma cât si raportul trebuie sa fie deschise. Sintaxa este
CreateControl(formname, controltype[, section[, parent[, columnname[, left[, top[, width[, height]]]]]]])
CreateReportControl(reportname, controltype[, section[, parent[, columnname[, left[, top[, width[, height]]]]]]])
unde
formname, reportname reprezinta numele formei sau raportului unde se creeaza controlul.
controltype este o
section este o
|
Semnificatia |
acDetail |
(Default) Detail section |
acHeader |
Form or report header |
acFooter |
Form or report footer |
acPageHeader |
Page header |
acPageFooter |
Page footer |
acGroupLevel1Header |
Group-level 1 header (reports only) |
acGroupLevel1Footer |
Group-level 1 footer (reports only) |
acGroupLevel2Header |
Group-level 2 header (reports only) |
acGroupLevel2Footer |
Group-level 2 footer (reports only) |
Pentru grupuri suplimentare într-un raport, perechile header/footer sunt numerotate consecutiv începând cu 9
parent este un sir care identifica controlul parinte. Pentru controalele care nu sunt copii se utilizeaza sirul vid sau se omite argumentul.
columnname numele câmpului unde este legat controlul, daca este un control legat de date. Daca nu este cazul, se utilizeaza sirul vid.
left, top sunt expresii numerice ale coordonatelor relative la coltul din stânga sus, în twips.
width, height sunt expresii numerice indicând latimea si înaltimea controlului, în twips.
Functiile CreateControl si CreateReportControl pot fi utilizate doar în modul de vizualizare Design (vezi si efectul functiilor CreateForm, CreateReport). În stabilirea relatiilor parinte-copil se va avea în vedere relatia de pe forma/raport. De exemplu, caseta text (control tata) si eticheta asociata (control copil, subordonat). Sau, un grup de optiuni este parinte pentru boxele de control continute etc. Doar controalele label, check box, option button sau toggle button pot avea controale parinte, desi pot fi create si independent.
Controalele care pot fi legate de un câmp de date sunt text box, list box, combo box, option group si bound object frame. În plus, controalele toggle button, option button si check box pot fi legate de un câmp daca nu sunt continute într-un grup de optiuni (option group).
La legarea unui câmp, proprietatile controlului sunt modificate automat pentru a se conforma proprietatilor corespunzatoare ale câmpului.
Pentru a înlatura un control se vor utiliza instructiunile DeleteControl si DeleteReportControl cu sintaxa
DeleteControl formname, controlname
DeleteReportControl reportname, controlname
Semnificatia argumentelor este evidenta.
Folosind automatizarea din Excel, exemplul creeaza o tabela legata într-o baza de date Access si realizeaza un raport pe baza datelor din tabele legata.
Pentru utilizarea exemplului trebuie sa se creeze un caiet Excel cu numele Revenue.xls, sa se completeze datele într-o foaie a caietului si sa se denumeasca un domeniu DataRange care include datele. Dupa aceea, se va trece codul urmator într-un modul din caiet. În proiectul Excel se vor stabili referinte la bibliotecile de obiecte Microsoft Access 8.0 si DAO 3.5.
Este esential ca, înaintea executiei codului, sa fie instalat în sistem driver-ul Microsoft Excel ISAM (Msexcl35.dll). Daca nu este instalat, se va executa Setup pentru a-l instala. Driver-ul Microsoft Excel ISAM permite fisierelor Excel 97 sa lucreze cu motorul de baze de date Microsoft Jet.
' se introduce în sectiunea Declarations a modululuiUn obiect Control reprezinta un control de pe o forma sau dintr-un raport Access. Obiectele Control sunt grupate în colectia Controls. Legaturile în ierarhia de obiecte Access sunt date în tabelul urmator.
Obiectul sau colectia |
Este continut(a) în |
Contine |
Control (obiect) |
Controls |
Colectia Controls când controlul este un grup de optiuni (option group) sau un control tab. Colectia Properties Obiect Hyperlink Obiecte Control |
Controls (colectie) |
Obiecte Form Obiecte Reports Obiecte Control, doar pentru obiectele: option group, tab control, text box, option button, toggle button, check box, combo box, list box, command button, bound object frame, unbound object frame. |
Obiecte Control |
Exista doua tipuri de controale:
Urmatorul tabel contine lista controalelor predefinite. Controalele sunt cu denumirile de clasa, dupa cum apar în Object Browser. Fiecare control este un obiect cu proprietatile, metodele si evenimentele lui. Pentru detalii se vor studia intrarile sinonime din Help.
Controlul |
Descriere |
BoundObjectFrame |
Afiseaza o imagine, diagrama sau obiect OLE memorat într-o tabela Access. |
CheckBox |
Indica selectarea unei optiuni |
ComboBox |
Combina lista ascunsa si o caseta text. |
CommandButton |
Un buton cu rol de pornire a unei operatiuni atunci când se efectueaza click pe el. |
Image |
Afiseaza o imagine. |
Label |
Afiseaza un text explicativ. |
Line |
Afiseaza o linie orizontala, verticala sau diagonala |
ListBox |
Afiseaza o lista de valori. |
ObjectFrame |
Afiseaza o imagine, diagrama sau obiect OLE care nu este memorat într-o tabela. |
OptionButton |
Indica daca o optiune este selectata (buton radio). |
OptionGroup |
Afiseaza un set de optiuni. |
Page |
Afiseaza controale pe o pagina a unui control tab. |
PageBreak |
Marcheaza începutul unui nou ecran sau a unei pagini tiparite. |
Rectangle |
Afiseaza un dreptunghi. |
SubForm/SubReport |
Afiseaza o forma în interiorul altei forme sau un raport în interiorul altui raport. |
TabControl |
Afiseaza pagini multiple, fiecare continând o multime de controale. |
TextBox |
Afiseaza date de tip text. |
ToggleButton |
Indica daca o optiune este selectata sau nu (on/off) prin imaginea unui buton apasat sau nu. |
Un control ActiveX este un obiect care poate fi plasat pe o forma pentru a afisa date sau efectua actiuni. Spre deosebire de controalele preconstruite, codul asociat este memorat în fisiere separate, care trebuiesc instalate pentru a putea utiliza controlul ActiveX.
În Microsoft Access sunt disponibile controalele
Un control poate fi referit repetat prin declararea unei variabile care sa-l reprezinte. Declararea poate fi facuta explicit, daca se cunoaste tipul obiectului:
Dim txt As TextBox
sau, daca nu se stie tipul controlului sau daca variabila contine o referinta la un control ActiveX, ea este declarata de tip generic Control si poate primi referinte la orice tip de control (alternativa utila pentru trecerea unor argumente de tipuri diferite de controale unei proceduri) .
Pentru referinta unui obiect Control individual se pot utiliza mecanismele uzuale pentru colectii:
Set txt = Forms!Employees!LastName ' care se refera la controlul TextBoxDatorita marii varietati de controale, proprietatile sunt foarte numeroase (de exemplu Text Box Control are peste 50 de proprietati) încât aici se discuta doar doua care merita o atentie speciala.
Prin aplicarea proprietatii este returnata o referinta la un obiect Hyperlink, care reprezinta un text sau grafica definind un salt la un fisier, bookmark într-un fisier, pagina HTML pe WWW sau pe intranet.
Controalele care suporta proprietatea Hyperlink sunt combo box, command button, image, label si text box. Fiecare poate afisa o hiperlegatura pe care utilizatorul o poate clicka pentru navigare. Atunci când se dispune de o referinta la un obiect Hyperlink dintr-un control, utilizarea metodei Follow (a obiectului Hyperlink) produce saltul la locatia indicata.
Exemplul urmator contine o functie care returneaza True în cazul în care controlul trecut drept argument contine o hiperlegatura valida.
Function FollowControlHyperlink (ctl As Control) As BooleanAplicata unui obiect Control, proprietatea indica tipul particular de control al obiectului. Utilizarea proprietatii poate duce si la schimbarea tipului de control (de exemplu Text Box în Combo Box) nu numai la aflarea tipului. Valorile proprietatii sunt
acLabel |
acRectangle |
AcLine |
acImage |
acCommandButton |
acOptionButton |
AcCheckBox |
acOptionGroup |
acBoundObjectFrame |
acTextBox |
AcListBox |
acComboBox |
acSubform |
acObjectFrame |
AcPage |
acPageBreak |
acCustomControl |
acToggleButton |
AcTabCtl |
cu interpretari imediate.
Urmatorul exemplu verifica proprietatea ControlType pentru fiecare control de pe o forma si stabileste proprietatea Locked la valoarea True pentru casetele de text si boxele combo.
Function LockTextControls (frm As Form) As BooleanAnumite controale din Microsoft Access pot fi legate de date, ceea ce înseamna ca ele afiseaza date memorate într-o tabela, interogare sau instructiune SQL. Aceasta categorie de controale include: bound object frame, check box, combo box, list box, option button, option group, text box, subform si subreport.
Si unele controale ActiveX (de exemplu Calendar control) pot fi, de asemenea, legate de date.
Controalele legate de date au o proprietate ControlSource prin care se fixeaza numele câmpului tabelei, interogarii sau instructiunii SQL din care se iau datele afisate de control. Este de notat ca mai înainte de stabilirea acestei proprietati trebuie sa se fixeze proprietatea RecordSource a formei/raportului pentru a specifica tabela, interogarea sau instructiunea SQL care furnizeaza date formei/raportului.
Exemplul urmator stabileste proprietatea RecordSource a unei forme si proprietatea ControlSource a unui control text box, numit Text0, în procedura de tratare a evenimentului de încarcare a formei.
Private Sub Form_Load ()Tab control si Option group control au, la rândul lor, o colectie Controls care poate contine mai multe controale.
Colectie Controls apartinând unui grup de optiuni contine controale de tip options button, check box, toggle button sau label.
Controlul Tab contine o colectie Pages reprezentând paginile controlului (vezi figura urmatoare). Colectia Pages contine obiecte Page care sunt controale (au ControlType = acPage).
Fiecare obiect Page are colectia Controls a tuturor controalelor din pagina respectiva.
Celelalte controale (text box, option group, option button, toggle button, check box, combo box, list box, command button, bound object frame si unbound object frame) au o colectie Controls cu cel mult un element: label reprezentând eticheta atasata controlului.
Un obiect Module reprezinta un modul din Microsoft Access. Toate obiectele Module sunt incluse în colectia Modules, membru al obiectului Application. S-a vazut ca un obiect Form sau Report poate sa contina de asemenea un singur obiect Module.
Multimea tuturor modulelor dintr-o baza de date Microsoft Access constituie proiectul Visual Basic al bazei de date. Colectia Modules contine doar modulele deschise curent în proiect. Modulele care nu sunt deschise pentru editare nu sunt incluse în colectia Modules.
Pentru a deschide un modul în Visual Basic se utilizeaza metoda OpenModule a obiectului DoCmd.
Relatiile stabilite de ierarhia de obbiecte sunt
Obiectul sau colectia |
Este continut(a) în |
Contine |
Module (obiect) |
Colectia Modules Obiecte Form Obiecte Report |
(Nimic) |
Modules (colectie) |
Obiectul Application |
Obiecte Module |
Accesul la un modul se obtine prin intermediul colectiei, în mod uzual. Astfel
Dim mdl As ModuleModulele clasa asociate formelor sau rapoartelor care sunt deschise se regasesc în colectia Modules.
Pentru modulele asociate formelor/rapoartelor care nu sunt deschise vezi discutia de la prezentarea obiectelor forme si rapoarte.
Reamintim câteva notiuni prezentate în capitolele introductive.
Microsoft Access contine doua tipuri de module: module standard (standard modules) si module de clasa (class modules). Ambele tipuri sunt disponibile în tab-ul Modules din fereastra Database a mediului Access. O forma sau un raport pot avea de asemenea un modul de clasa asociat.
Codul care trebuie sa fie accesibil din orice procedura se va scrie într-un modul standard. Acestea sunt publice în mod implicit, deci procedurile si variabilele de nivel modul sunt vizibile în mod uzual în tot proiectul. De asemenea, daca proiectul este referit de alt proiect Access, codul dintr-un modul standard poate fi utilizat în proiectul care efectueaza referinta.
Modulele de clasa sunt întotdeauna private. Se pot utiliza modulele clasa pentru a crea obiecte utilizate în proiectul curent, dar ele nu se pot partaja cu alte proiecte. Procedurile Sub si Function definite într-un modul de clasa devin metode ale obiectului definit iar price procedura de tip Property Let, Property Get si Property Set devin proprietatile obiectului.
Se pot utiliza modulele clasa asociate cu o forma sau raport pentru a defini procedurile declansate de evenimente si se pot adauga oricâte proceduri utilizate doar în modulul clasa respectiv.
O descriere sumara a proprietatilor este continuta în tabelul urmator. Explicatii detaliate se obtin din Help.
Proprietatea |
Descriere |
Observatii |
Application |
Returneaza o referinta la obiectul Application. |
Permite obtinerea accesului la ierarhia de obiecte Access. |
CountOfDeclarationLines |
Returneaza numarul de linii de cod din sectiunea Declarations a modulului. |
Long, numaratoarea începe cu 1 |
CountOfLines |
Returneaza numarul de linii de cod din modul |
Long, numaratoarea începe cu 1 |
Lines |
Returneaza textul continut în liniile de cod specificate |
object.Lines(line, numlines) |
Name |
Da numele modulului | |
Parent |
Returneaza o referinta la obiectul sau colectia care contine modulul | |
ProcBodyLine |
Returneaza numarul liniei la care începe definirea procedurii |
object.ProcBodyLine( _ procname, prockind) |
ProcCountLines |
Returneaza numarul de linii dintr-o procedura |
object.ProcCountLines( _ procname, prockind) |
ProcOfLine |
Returneaza numele procedurii care contine o linie specificata |
object.ProcOfLine( _ line, pprockind) |
ProcStartLine |
Returneaza numarul liniei la care începe o procedura |
object.ProcStartLine( _ procname, prockind) |
Type |
Indica tipul modulului |
AcStandardModule sau 0, acClassModule sau 1. |
Liniile unui modul sunt numarate începând cu 1. Numarul ultimei linii dintr-un modul este egal cu valoarea proprietatii CountOfLines. Numarul ultimei linii din sectiunea Declarations a unui modul este egal cu valoarea proprietatii CountOfDeclarationLines.
Numerele de linii nu apar efectiv în modul, ele sunt utilizate doar pentru referinte.
Proprietatile Lines, ProcBodyLine, ProcCountLines, ProcOfLine si ProcStartLine sunt utilizate pentru a obtine informatii despre procedurile unui modul. Procedurile pot fi de tip Sub, Function, Property Get, Property Let sau Property Set. Primele doua tipuri sunt considerate de acelasi tip, ultimele trei privesc crearea de proprietati într-un modul clasa.
Proprietatea ProcBodyLine returneaza numarul liniei la care începe definirea procedurii, adica linia care include o instructiune Sub, Function sau Property Get/Let/Set.
Proprietatea ProcLineStart returneaza numarul liniei care urmeaza dupa separatorul de proceduri, daca sunt selectate optiunile Full Module View si Procedure Separator în fisa Module din dialogul Option (meniul Tools). Acest numar poate fi diferit de cel returnat de ProcBodyLine, deoarece sunt considerate si liniile comentariu, vide etc din fata liniei de definire. ProcStartLine returneaza numarul primei linii a întregii procedurii.
Exemplul urmator utilizeaza proprietatile enumerate pentru a tipari o procedura în fereastra Debug (exemplul modifica usor exemplul din Help).
Function ProcLineInfo(strModuleName As String, _Procedura poate fi apelata, de exemplu, din baza de date exemplificatoare Northwind prin
Sub GetProcInfo()Tabelul urmator contine o sinteza a metodelor obiectului Module.
Metoda |
Descriere |
AddFromFile |
Adauga la modul continutul unui fisier text. |
AddFromString |
Adauga modulului continutul unui sir de caractere. |
CreateEventProc |
Creeaza o procedura eveniment într-un modul clasa. |
DeleteLines |
Elimina din modul liniile specificate. |
Find |
Gaseste, într-un modul, textul specificat. |
InsertLines |
Insereaza o linie sau un grup de linii de cod la o pozitie specificata din modul. |
ReplaceLines |
Inlocuieste o linie dintr-un modul cu textul specificat. |
Pentru a insera text într-un modul, este recomandata metoda InsertLines prin care se poate specifica linia unde are loc inserarea.
Exemplul din Help (intrarea InsertLines Method) creeaza o forma noua, adauga un buton de comanda, creeaza procedura evenimentului Click si insereaza o linie de cod cu metoda InsertLines.
Daca textul care se doreste adaugat trebuie sa fie într-un modul nou, acesta se poate crea prin metoda RunCommand a obiectului Application (comanda Module din meniul Insert trebuie sa fie permisa):
RunCommand acCmdNewObjectModulePentru lista integrala a constantelor permise la aplicarea metodei se va vedea intrarea "RunCommand Method Constants" în Help.
Exemplul urmator utilizeaza metoda AddFromFile pentru a adauga continutul unui fisier text la un modul nou. Modulul creat este salvat cu acelasi nume ca si fisierul text.
Function AddFromTextFile(strFileName) As BooleanObservatie. Daca executia procedurii în linia care executa prima salvare a modulului are loc în modul pas cu pas, atunci focusul este în modulul de unde se executa codul si nu în modulul nou creat. În acest fel, Visual Basic va încerca, mai degraba, salvarea modulului cu focusul si nu a modulului nou creat.
Modulele de clasa, care nu sunt asociate cu o forma sau un raport, au doua evenimente: Initialize si Terminate.
Evenimentul Initialize se declanseaza la crearea unei noi instante a obiectului.
Terminate apare atunci când se elimina un obiect utilizator din memorie.
Pentru a crea procedurile de raspuns la evenimente, se deschide modulul clasa, se selecteaza Class în boxa Object si se alege Initialize sau Terminate în lista Procedure.
Evenimentele pot fi utilizate, de exemplu, pentru a initializa o variabila la nivel de modul o data cu crearea obiectului.
Un obiect Reference reprezinta o referinta din Microsoft Access la alt proiect sau la o biblioteca de obiecte. Obiectele Reference sunt continute în colectia References, fiecare element din colectie corespunzând unei referinte selectate în dialogul References (meniul Tools).
Colectia References si obiectele Reference pot fi utilizate din Visual Basic pentru a adauga referinte, pentru a verifica referintele existente sau pentru a anula referintele care nu mai sunt necesare.
Obiectul sau colectia |
Este continut(a) în |
Contine |
Reference (obiect) |
References |
(nimic) |
References (colectie) |
Application |
Obiecte Reference |
Un obiect Reference este accesat prin intermediul colectiei References. Un obiect referit poate fi atribuit unei variabile obiect în mod uzual:
Dim ref As ReferenceTabelul urmator prezinta pe scurt proprietatile obiectului Reference.
Proprietatea |
Descriere |
BuiltIn |
Indica daca referinta este implicita, necesara bunei functionari a aplicatiei Microsoft Access. |
Collection |
Returneaza o referinta la colectia References. |
FullPath |
Returneaza calea si numele de fisier al proiectului referit sau al bibliotecii de obiecte. |
GUID |
Returneaza identificatorul global unic (GUID – Globally Unique Identifier) al proiectului referit sau al bibliotecii de obiecte. Un GUID este memorat în registry-ul Windows. |
IsBroken |
Indica daca referinta puncteaza catre o referinta valida. |
Kind |
Indica daca obiectul Reference puncteaza la un proiect Visual Basic (valoarea Project sau 1) sau la o biblioteca (TypeLib sau 0). |
Major |
Returneaza valoarea din stânga punctului zecimal din numarul de versiune al fisierului referit. |
Minor |
Returneaza valoarea din dreapta punctului zecimal din numarul de versiune al fisierului referit. |
Name |
Returneaza numele proiectului sau al bibliotecii de obiecte catre care duce referinta. |
Obiectul Reference nu are asociate metode. Metodele colectiei References sunt
Metoda |
Descriere |
AddFromFile |
Creeaza o referinta la un fisier care contine un proiect sau o biblioteca de obiecte. References.AddFromFile(filename) |
AddFromGUID |
Creeaza o referinta la un proiect sau biblioteca de obiecte pornind de GUID-ul fisierului, memorat în registry. Object.AddFromGUID(guid) |
Item |
Returneaza un element particular al colectiei References. |
Remove |
Elimina un obiecte Reference din colectia References. |
Primele doua metode enumerate în tabelul precedent, AddFromFile si AddFromGUID, permit stabilirea unei referinte în mod programatic. Urmatorul exemplu creeaza o referinta în timpul executiei.
Function AddReference (strFilePath As String) As BooleanMetodele obiectului DoCmd sunt utilizate pentru a executa actiuni (macro-uri) Microsoft Access din Visual Basic. De altfel, aceasta este singura utilitate a obiectului DoCmd, acesta neavând proprietati si evenimente.
Sintaxa este
[application.]DoCmd.method [arg1, arg2, ...]
unde
application este obiectul Application, optional
method este una dintre metodele suportate de obiect
arg1, arg2, ... sunt argumentele metodei selectate.
Omiterea argumentelor care sunt optionale este echivalenta cu acceptarea valorilor implicite ale acestora.
Obiectul DoCmd nu suporta metode care corespund cu actiunile
Important! Pentru o lista completa a actiunilor, care coincide, excepând cele enumerate, cu lista metodelor obiectului, se va urma: Help – DoCmd Object – Action Constants (lista alfabetica a actiunilor) sau actions, reference topics (actiuni grupate pe categorii). Pentru explicatii complementare se va urmari atât subiectul privind metoda cât si subiectul privind actiunea sinonima.
Pentru exemplificare prezentam doua metode ale obiectului DoCmd.
Se executa din Visual Basic actiunea OpenForm. Sintaxa este
DoCmd.OpenForm formname[, view][, filtername][, wherecondition][,
datamode]
[, windowmode][, openargs]
unde
formname este un sir cu numele valid al unei forme din baza de date curenta. Daca se executa codul înre-o biblioteca, forma se va cauta mai întâi în baza de date biblioteca si apoi în baza curenta.
view este modul de vizualizare Access si poate avea una din valorile: acDesign, acFormDS, acNormal (default), acPreview. Valoarea implicita deschide forma în Form view.
filtername este un sir care contine numele valid al unei interogari din baza de date curenta. wherecondition este un sir care contine o clauza valida WHERE SQL, fara cuvântul WHERE.
datamode este una dintre constantele: acFormAdd, acFormEdit, acFormPropertySettings (default), acFormReadOnly. Argumentul fixeaza modul de acces la date (adaugare, editare etc.). Argumentele acopera proprietatile AllowEdits, AllowDeletions, AllowAdditions si DataEntry ale formei, proprietatile sunt considerate în modul implicit (acFormPropertySettings).
windowmode stabileste modul de afisare a ferestrei formei. Poate fi o constanta: acDialog (proprietatile Modal si PopUp ale formei sunt Yes), acHidden (forma este ascunsa), acIcon (forma este minimizata), acWindowNormal (valoarea implicita, forma este afisata potrivit proprietatilor sale).
openargs este un sir utilizat pentru stabilirea proprietatii OpenArgs a formei. Aceasta valoare poate fi utilizata ulterior de cod (de exemplu într-o procedura eveniment). Argumentul este valabil doar în Visual Basic (nu exista pentru actiunea sinonima Access).
Prin aceasta metoda, aplicabila obiectului Application sau DoCmd, se executa o comanda dintr-un meniu predefinit sau dintr-o bara de unelte. Sintaxa este
[object.]RunCommand command
unde
object este Application sau DoCmd, optional.
command este o constanta intrinseca specificând comanda care se executa.
Lista tuturor constantelor admise ca argument de comanda se poate vedea în Help (intrarea RunCommand Method Constants) sau în Object Browser (Access în lista Project/Library, AcCommand în lista Classes).
Meniurile si barele de unelte construite de utilizator nu pot fi accesate prin metoda RunCommand.
Obiectul Screen se refera la forma, raportul, foaia de date (datasheet) sau controlul care are focusul. Acest obiect se poate utiliza pentru a lucra cu un obiect particular de pe ecran. De exemplu, se poate utiliza proprietatea ActiveForm pentru a returna o referinta la forma din fereastra activa, fara a sti numele formei.
Obiectul Screen nu poate fi utilizat pentru activarea formei, raportului sau controlului. Acest efect se obtine prin metoda SelectObject a obiectului DoCmd.
Referirea la Screen atunci când nu exista nici o forma activa, raport sau control, produce o eroare de executie.
Tabelul urmator contine proprietatile obiectului Screen.
Proprietatea |
Descriere |
ActiveControl |
Returneaza o referinta la controlul care are focusul. |
ActiveDatasheet |
Returneaza o referinta la foaia de date care are focusul. |
ActiveForm |
Returneaza o referinta la forma care are focusul. |
ActiveReport |
Returneaza o referinta la raportul care are focusul |
Application |
Returneaza o referinta la obiectul Application. |
MousePointer |
Stabileste sau întoarce valoarea tipului de pointer al mouse-ului. |
Parent |
Returneaza o referinta la obiectul care contine obiectul Screen. |
PreviousControl |
Returneaza o referinta la controlul care a avut anterior focusul. |
Tipul de pointer poate fi:
Valoare |
Explicatie |
(Default) Forma pointerului este determinata |
|
Normal Select (Arrow) |
|
Text Select (I-Beam) |
|
Vertical Resize (Size N, S) |
|
Horizontal Resize (Size E, W) |
|
Busy (Hourglass) |
Potrivit celor spuse anterior, utilizarea obiectului Screen trebuie sa implementeze si tratarea erorilor deoarece daca obiectul asteptat nu are focusul, atunci se produce o eroare. Este de preferat sa se utilizeze mai întâi metoda SetFocus pentru a focaliza obiectul dorit si apoi sa se utilizeze Screen. Metoda SetFocus este cea asociata formei, raportului, controlului tinta. Este interzisa utilizarea obiectului Screen cu metoda OutputTo (care produce iesirea unor date pe o forma, raport etc.) a obiectului DoCmd.
Este de notat ca proprietatea ActiveForm si proprietatea Me nu produc în mod necesar aceeasi referinta. Me reprezinta forma în care se executa curent codul, pe când ActiveForm returneaza forma activa pe ecran si care poate fi diferita de cea în care se executa în acel moment cod Visual Basic. De exemplu, un eveniment Timer poate sa apara pe o forma care nu este activa. În acest caz Me este utilizat pentru a referi forma pe care se produce evenimentul Timer iar ActiveForm se refera la forma activa pe ecran când se produce evenimentul Timer.
Urmatorul exemplu utilizeaza evenimentul Timer pentru a interoga forma activa la intervale regulate de timp. Forma în care se declanseaza evenimentul poate fi sau nu forma activa.
Private Sub Form_Load ()Observatie. Intervalul de timp, din proprietatea TimerInterval este în milisecunde, instructiunea Me.TimerInterval = 30000 stabileste prin urmare declansarea evenimentului la fiecare 30 de secunde. Stabilirea intervalului se efectueaza în procedura evenimentului Load.
|