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




Obiectele Microsoft Access

visual basic


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.

Obiectele accesibile în Microsoft Access

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 8.0. Aici sunt obiectele prezentate în acest capitol (Form, Module, Application etc.).
    • Microsoft DAO 3.5. Aici sunt continute obiectele de acces la date (Data Access Objects – DAO) cum ar fi TableDef, QueryDef prin care se determina structura de date si se pot accesa datele prin cod VB. Aceste obiecte sunt discutate într-un capitol separat.
    • Visual Basic for Applications. Aici sunt continute trei obiecte care ajuta la programare: Debug, Err si Collection.

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.

Obiectele Microsoft Access

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

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.

Utilizarea obiectului Application în automatizare

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:

    • stabilirea, aplicatia gazda, a unei referinte la biblioteca de obiecte Microsoft Access
    • declararea unei variabile obiect care sa reprezinte obiectul Application Microsoft Access
    • returnarea unei referinte la obiectul Application su asignarea acestei referinte la variabila obiect.

În Visual Basic Editor, aceste etape se realizeaza prin:

    • deschiderea unui modul, comanda References din Tools, selectarea Microsoft Access 8.0 Object Library în lista Available References. Este evident ca se presupune instalarea prealabila a produsului Microsoft Ac 424h76e cess 97, în caz contrar referinta nu este disponibila.
    • Pentru declararea variabilei obiect este recomandata formularea
Dim appAccess As Access.Application
    • Dupa declararea variabilei, returnarea unei referinte la obiectul Application se poate obtine prin functia CreateObject (daca Microsoft Access nu este lansat) sau GetObject (daca Microsoft Access este deja lansat). Asignarea referintei la variabila obiect definita este de exemplu:
Set appAccess = CreateObject("Access.Application.8")
    • unde numarul versiunii poate lipsi daca exista o singura versiune instalata de Access.
    • Daca aplicatia gazda suporta New se poate utiliza o singura instructiune pentru declararea variabilei si asignarea referintei:
Dim appAccess As New Access.Application
    • diferenta fiind ca în aceasta varianta nu este deschis efectiv Microsoft Access pâna când nu se lucreaza programatic cu variabila obiect, de exemplu
appAccess.NewCurrentDatabase "NewDb.mdb"

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 ()
Dim appAccess As New Access.Application
Const conPath As String = "C:\Program Files\Microsoft Office\Office" _
& "\Samples\Northwind.mdb"
With appAccess
' Deschide baza de date
.OpenCurrentDatabase conPath
' Deschide forma Employees
.DoCmd.OpenForm "Employees"
' Stabileste captarea formei
.Forms!Employees.Caption = "Northwind Employees"
End With
End Sub

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.

Colectia Forms

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

Referirea la un obiect 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 Form
Set frm = Forms!Employees

sau prin notatia cu paranteze, în cazul în care numele este cunoscut doar la momentul executiei, ca în exemplul urmator:

Function SetFormCaption (strFormName As String)
Dim frm As Form
' Se deschide forma
DoCmd.OpenForm strFormName
' Se returneaza o referinta la obiectul Form
Set frm = Forms(strFormName)
' Se schimba captarea formei
frm.Caption = Date
End Function

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 = True

Proprietatile obiectului Form

Dintre proprietatile obiectului Form sunt prezentate doar câteva, considerate mai importante. Pentru celelalte se va studia intrarea corespunzatoare din Help (Form Object).

Proprietatea Me (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 formei
Private Sub Form_Load ()
' Initializarea generatorului de numere aleatoare
Randomize
' Stabilirea culorii de fundal
Me.Section(acDetail).BackColor = RGB(Rnd*256, Rnd*256, Rnd*256)
End Sub

Este 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.

Proprietatea Section (Form Object)

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)
Dim ctl As Control
' Enumerarea controalelor din sectiunea de detalii
For Each ctl In frm.Section(acDetail).Controls
Debug.Print ctl.Name
Next ctl
End Sub

Proprietatea Properties (Form Object)

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)
Dim prp As Property
' enumerarea proprietatile unei forme
For Each prp In frm.Properties
Debug.Print prp.Name, prp.Value
Next prp
End Sub

Proprietatea Module (Form Object)

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.

Proprietatea RecordSource (Form Object)

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.

Module atasate formelor

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:

    • click Code de pe meniul View când forma este în modul de vizualizare Design. Modulul este creat si salvat împreuna cu forma chiar daca nu contine code.
    • Stabilirea proprietatii HasModule la True. Aceasta se poate efectua din foaia de proprietati din Access sau din Visual Basic. Stabilirea proprietatii la False elimina modulul si codul continut.
    • Referirea la proprietatea Module a formei din Visual Basic. Proprietatea returneaza o referinta la obiectul Module asociat formei, creând mai întâi modulul daca el nu exista.

Î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.

Crearea formelor în timpul executiei

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 Boolean
Dim frm As Form, mdl As Module
Dim lngLine As Long, strLine As String

' Permite tratarea erorilor
On Error GoTo Error_CreateFormWithCode
' creeaza noua forma si returneaza o referinta la ea
Set frm = CreateForm
' returneaza o referinta la modul
Set mdl = frm.Module
' creeaza procedura evenimentului Load
lngLine = mdl.CreateEventProc("Load", "Form")
strLine = vbTab & "Me.Caption = " & Date
' stabileste captarea formei în evenimentul Load
mdl.InsertLines lingLine + 1, strLine
' returneaza True daca functia se termina cu succes
CreateFormWithCode = True

Exit_CreateFormWitwCode:
Exit Function

Error_CreateFormWithCode:
MsgBox Err & ": " & Err.Description
CreateFormWithCode = False
Resume Exit_CreateFormWithCode
End Function

O discutie ceva mai ampla se gaseste la sectiunea dedicata colectiei Modules.

Colectia Reports

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.

Referirea obiectelor Report

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 Report
Set rpt = Reports!Invoice ' referinta prin nume cunoscut
Set rpt = Reports("Invoice")    ' referinta prin sirul care contine numele
Set rpt = Reports(0) ' referinta prin indicele din colectie (bazat pe zero)

Module asociate rapoartelor

Ca 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:

    • click Code de pe meniul View când raportul este în modul de vizualizare Design. Modulul este creat si salvat cu raportul chiar daca nu contine code.
    • Stabilirea pentru obiectul Report a proprietatii HasModule la True. Aceasta se poate efectua din foaia de proprietati din Access sau din Visual Basic. Stabilirea proprietatii la False elimina modulul si codul continut.
    • Referirea, din Visual Basic, la proprietatea Module a raportului. Proprietatea returneaza o referinta la obiectul Module asociat raportului, creând mai întâi modulul daca el nu exista.

Crearea rapoartelor în timpul executiei (run time)

Pentru crearea programatica a rapoartelor se utilizeaza functie CreateReport. Controalele se pot adauga sau elimina, în run time, prin functiile CreateReportControl sau DeleteReportControl.

Functiile CreateForm, CreateReport

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.

Functiile CreateControl, CreateReportControl

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 constanta predefinita care reprezinta tipul controlului. Se pot vedea prin Object Browser cu alegerile Access în Project/Library si Constants în Classes si copia în cod. Fara explicatii (denumirile sunt suficient de sugestive): acLabel, acRectangle, acLine, acImage, acCommandButton, acOptionButton, acCheckBox, acOptionGroup, acBoundObjectFrame, acTextBox, acListBox, acComboBox, acSubform, acObjectFrame, acPage, acPageBreak, acCustomControl, acToggleButton, acTabCtl.

section este o constanta identificând sectiunea. Poate fi o constanta dintre

Constanta

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.

Exemplu de creare a unui raport

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 modulului
Dim appAccess As New Access.Application

Sub PrintReport ()
Dim rpt As Access.Report, ctl As Access.TextBox
Dim dbs As DAO.Database, tdf As DAO.TableDef, fld As DAO.Field
Dim strDB As String, intLeft As Integer

' se declara calea catre baza de date Northwind (din Office)
Const conPath As String = "C:\Program Files …"

' Se deschide baza de date
appAccess.OpenCurrentDatabase conPath & "Northwind.mdb"
' se returneaza referinta la baza
Set dbs = appAccess.CurrentDb
' se creeaza un obiect tabela nou
Set tdf = dbs.CreateTableDef("XLData")
' se specifica sirul de conectare la driver-ul Excel ISAM
tdf.Connect = "EXCEL 8.0; Database=C:\My Documents\Revenue.xls"
' se specifica tabela sursa ca un domeniu numit în foaie
tdf.SourceTableName = "DataRange"
' se adauga noua tabela legata la baza
dbs.TableDefs.Append tdf
' se creeaza noul raport
Set rpt = appAccess.CreateReport
' se specifica tabela legata drept sursa de date a raportului
rpt.RecordSource = tdf.Name
' se creeaza un control pe raport pentru fiecare câmp din tabela
For Each fld In tdf.Fields
Set ctl = appAccess.CreateReportControl (rpt.Name, acTextBox, , , _
fld.Name, intLeft)
intLeft = intLeft + ctl.Width
Next fld

' deschiderea raportului în Print Preview
appAccess.DoCmd.OpenReport rpt.Name, acViewPreview
' restaurarea raportului
app.Access.DoCmd.Restore
' afisarea Access-ului ca aplicatia activa
AppActivate "Microsoft Access"
End Sub

Colectia Controls

Un 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:

    • preconstruite, în biblioteca de obiecte Microsoft Access 8.0, accesibile printr-o cutie de unelte,
    • controale ActiveX (denumite si controale OLE sau custom controls).

Controale Microsoft Access

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.

Controale ActiveX

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

    • Calendar, care permite afisarea si actualizarea unui calendar pe o forma. Instalarea controlului se cere la instalarea Microsoft Access.
    • WebBrowser, care permite afisarea paginilor Web si alte documente într-o forma Access. Acest control este instalat separat (din folderul ValuPack al CD-ului Office sau direct prin instalarea browserului Microsoft Internet Explorer).

Referirea obiectelor Control

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 TextBox
' cu numele LastName de pe forma Employees
Set txt = Me!LastName ' similar exemplului precedent, dar referinta este
' în forma care se executa curent
Set txt = Me![Last Name] 'daca numele contine spatii
Set ctl = Me.Controls(0) ' prin indice, bazat pe zero
Set ctl = Me.Controls("LastName")

Proprietatile obiectului Control

Datorita 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.

Proprietatea Hyperlink (Control Object)

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 Boolean
Const conNoHyperlink As Integer = 7976

' permiterea controlului erorilor
On Error GoTo Error_FollowControlHyperlink
' urmarirea adresei indicate
ctl.Hyperlink.Follow
' returneaza True daca saltul este corect
FollowControlHyperlink = True

Exit_ FollowControlHyperlink:
Exit Function

Error_ FollowControlHyperlink:
If Err = conNoHyperlink Then
FollowControlHyperlink = False
End If
Resume Exit_ FollowControlHyperlink
End Function

Proprietatea ControlType (Control Object)

Aplicata 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 Boolean
Dim ctl As Control

' tratarea erorilor
On Error GoTo Error_LockTextControls

' parcurgerea controalelor
For Each ctl In frm.Controls
' se prelucreaza doar controalele Text Box si Combo Box
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
ctl.Locked = True
End If
Next ctl
' returneaza True pentru succes
LockTextControls = True

Exit_LockTextControls:
Exit Function

Error_LockTextControls:
MsgBox Err & ": " & Err.Description
LockTextControls = False
Resume Exit_ LockTextControls
End Function

Controale legate de date (Data-Bound Controls)

Anumite 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 ()
' sursa de înregistrari a formei
Me.RecordSource = "Employees"
' sursa de date a controlului
Me!Text0.ControlSource = "LastName"
End Sub

Controale care au o colectie Controls

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.

Colectia Modules

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

Referirea la obiecte Module

Accesul la un modul se obtine prin intermediul colectiei, în mod uzual. Astfel

Dim mdl As Module
Set mdl = Modules![ Utility Functions]    ' returneaza o referinta
'la modulul cu numele dat

Set mdl = Modules(" Utility Functions")    ' - idem-
Set mdl = Modules(0) ' returneaza o referinta
' la primul modul al colectiei

Modulele 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.

Module standard si module clasa

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.

Proprietatile obiectului Module

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.

Determinarea numarului de linii dintr-un modul

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.

Lucrul cu procedurile

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, _
strProcName As String) As Boolean
Dim mdl As Module
Dim lngStartLine As Long, lngBodyLine As Long
Dim lngCount As Long, lngEndProc As Long

On Error GoTo Error_ProcLineInfo
' Se deschide modulul specificat
DoCmd.OpenModule strModuleName
' Returneaza o referinta la obiectul Module
Set mdl = Modules(strModuleName)

' se numara liniile din procedura
lngCount = mdl.ProcCountLines(strProcName, vbext_pk_Proc)
' Determina linia de start
lngStartLine = mdl.ProcStartLine(strProcName, vbext_pk_Proc)

' se determina linia de definire
lngBodyLine = mdl.ProcBodyLine(strProcName, vbext_pk_Proc)
Debug.Print

' se tiparesc liniile de început
Debug.Print "Lines preceding procedure " & strProcName & ": "
Debug.Print mdl.Lines(lngStartLine, lngBodyLine - lngStartLine)

' determinarea numarului ultimei linii
lngEndProc = (lngBodyLine + lngCount - 1) - Abs(lngBodyLine - lngStartLine)

' tiparirea liniilor din corpul procedurii

Debug.Print "Body lines: "
Debug.Print mdl.Lines(lngBodyLine, (lngEndProc - lngBodyLine) + 1)

Exit_ProcLineInfo:
Exit Function

Error_ProcLineInfo:
MsgBox Err & " :" & Err.Description
ProcLineInfo = False
Resume Exit_ProcLineInfo
End Function

Procedura poate fi apelata, de exemplu, din baza de date exemplificatoare Northwind prin

Sub GetProcInfo()
ProcLineInfo "Utility Functions", "IsLoaded"
End Sub

Metodele obiectului Module

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.

Adaugare de text la un modul

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 acCmdNewObjectModule

Pentru 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 Boolean
Dim strModuleName As String, intPosition As Integer
Dim intLength As Integer
Dim mdl As Module

' memorarea numelui de fisier într-o variabila
strModuleName = strFileName

' eliminarea caii din numele fisierului
Do
' gasirea caracterului \
intPosition = InStr(strModuleName, "\")
If intPosition = 0 Then
Exit Do
Else
intLength = Len(strModuleName)
' eliminare cale din sir
strModuleName = Right (strModuleName, Abs(intLength – intPosition))
End If
Loop

' eliminarea extensiei
intPosition = InStr(strModuleName, ".")
If intPosition > 0 Then
intLength = Len(strModuleName)
strModuleName = Left(strModuleName, intPosition –1)
End If

' Crearea modulului nou
RunCommand acCmdNewObjectModule
' salvarea modulului
DoCmd.Save , strModuleName
' returnarea referintei la obiectul Module
Set mdl = Modules(strModuleName)
' adaugarea fisierului text
mdl.AddFromFile strFileName
' salvarea modulului modificat
DoCmd.Save
End Function

Observatie. 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.

Evenimentele unui modul clasa

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.

Colectia References

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

Referirea obiectelor 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 Reference
Set ref = References!VBA
Set ref = References("VBA")
Set ref = References(1) ' de remarcat ca numerotarea
colectiei References începe cu 1

Proprietatile obiectului Reference

Tabelul 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.

Metodele colectiei References

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.

Stabilirea unei referinte în Visual Basic

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 Boolean
Dim ref As Reference

Const conReferenceExists As Long = 32813
On Error GoTo Error_AddReference
' Adauga o referinta la un proiect sau biblioteca de obiecte
Set ref = References.AddFromFile(strFilePath)
AddReference = True

Exit_AddReference:
Exit Function

Error_AddReference:
If Err <> conReferenceExists Then
MsgBox Err & ": " & Err.Description
End If
AddReference = False
Resume Exit_AddReference
End Function
Apelul acestei functii poate fi efectuat dupa modelul

Sub SetSolutionsReferences ()
Const strRefPath As String = "C:\Program Files\Microsoft Office" _
& "\Office\Samples\Solutions.mdb"
If AddReference (strRefPath) = True Then
MsgBox "Reference set successfully."
Else
MsgBox "Reference not set successfully."
End If
End Sub

Obiectul DoCmd

Metodele 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

  • AddMenu.
  • MsgBox. Se utilizeaza functia MsgBox.
  • RunApp. Se utilizeaza functia Shell pentru a executa alta aplicatie.
  • RunCode. Se executa functia direct în Visual Basic (instructiunea Call).
  • SendKeys. Se utilizeaza instructiunea SendKeys.
  • SetValue. Se stabileste valoarea direct în Visual Basic (instructiunea Let).
  • StopAllMacros. Se utilizeaza instructiunile Stop sau End.
  • StopMacro. Se utilizeaza instructiunile Exit Sub sau Exit Function.

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.

Metoda OpenForm

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).

Metoda RunCommand

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

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.

Proprietatile obiectului Screen

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
de Microsoft Access

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 ()
Me.TimerInterval = 30000
End Sub

Private Sub Form_Timer ()
Const conFormNotActive As Integer = 2475
Const conFormInDesignView As Integer = 2478

On Error GoTo Error_Timer
' reconsulta sursa de date pentru forma activa
Screen.ActiveForm.Requery

Exit_Timer:
Exit Sub

Error_Timer:
If Err = conFormNotActive Or Err = conFormInDesignView Then
Resume Exit_Timer
Else
MsgBox Err & ": " & Err.Description
End If
End Sub

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.


Document Info


Accesari: 4352
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. 2024 )