Download - Programarea în VISUAL BASIC for Application2

Transcript
  • erban CRICOT

    Programarea n VISUAL BASIC for Application

    Editura CARMINIS Piteti, 2003

  • II-2

  • II-3

    NOT INTRODUCTIV

    "Programarea n Visual Basic for Application" este o lucrare destinat n special utilizatorilor de baze de date Access.

    Lucrarea este structurat n dou pri: n prima parte, "Elementele de baz ale limbajului de programare VBA - Visual Basic for

    Application" sunt prezentate: principiile de baz ale programrii; elementele de baz ale limbajului de programare Visual Basic; bibliotecile de proceduri i funcii din Access; interfaa de dezvoltare i depanere a VBA;

    n a doua parte, "Utilizarea obiectelor n limbajul de programare VBA" sunt prezentate: principiile definirii i utilizrii obiectelor n VBA; modelul ierarhic-arborescent Access; modelul ierarhic-arborescent Data Access Object; tehnologiile OLE i Automation-OLE; utilizarea n aplicaiile Access a ActiveX-urilor; utilizarea n aplicaiile Access a obiectelor Word i Excel; crearea i utilizarea claselor de obiecte n VBA;

    Pentru nsuirea elementelor de baz ale programrii n Visual Basic sunt necesare numai cunotine minime despre sistemele de operare Windows. Totui, pentru a nelege partea a doua a lucrrii referitoare la programarea prin obiecte, noiunile despre baze de date relaionale i despre interfaa Access sunt obligatorii.

    n decursul lucrrii sunt prezentate exemple comentate de cod VBA. Acestea mpreun cu alte exerciii specifice grupate pe categorii i mpreun cu alte dou aplicaii demonstrative comentate, se gsesc n format Mdb, pe suportul ataat la carte.

    "Programarea n Visual Basic for Application" face parte dintr-un ciclu de lucrri referitoare la informatica de gestiune, care mai conine:

    "Funcionarea i utilizarea calculatoarelor PC" "Utilizarea bazelor de date relaionale Access n realizarea aplicaiilor economice" "Reele de calculatoare interconectate" "Proiectarea aplicaiilor Web" "Principiile proiectrii sistemelor informatice de gestiune"

  • II-4

    Modul de utilizare a CD-ROM-ului inclus n carte La sfritul acestei cri vei gsi un CD-ROM ce conine urmtoarele fiiere: DAO.MDB - conine toate fragmentele de cod VBA prezentate n carte, mpreun cu toate

    formularele, cererile i tabelele necesare executrii lor. n modulul general de cod, vei gsi sursele grupate dup natura lor, n module distincte de cod. Pentru transferurile prin tehnica AUTOMATION, se va folosi fiierul Excel, FOAIE.XLS

    PROBLEME.MDB - este o aplicaie ACCESS, care conine un set de exerciii rezolvate n VBA. Aplicaia permite vizualizarea tuturor problemelor grupate pe categorii i accesarea printr-o simpl apsare pe un buton, a modulului de cod sau a formularului ce va conine codul surs.

    CURS.MDB - este o aplicaie demonstrativ cu un grad de dificultate mai ridicat i n care codul surs VBA este comentat n detaliu. Aceast aplicaie permite prezentatea grafic a unor analize asupra dinamicii cursului valutelor USD i EURO. Pentru grafice s-a folosit ActiveX-ul, Microsoft Graph, iar pentru introducerea datelor calendaristice controlul MS Calendar Control. n modulul general de cod, se gsesc dou colecii de rutine parametrizate, foarte utile n realizarea de aplicaii.

    AGENDA.MDB - este o aplicaie mai simpl, cu codul surs VBA comentat, care permite stocarea i regsirea informaiilor referitoare la o baz de date relaionale de persoane.

    Deoarece execuia aplicaiilor ACCESS nu se poate efectua direct de pe CD-ROM, se va copia n prealabil pe hard disck directorul cu acestea: EXEMPLE_VBA.

    Aplicaiile sunt realizate n ACCESS 97. Pentru execuia lor n versiuni superioare este necesar ca mai nti s se efectueze conversia lor.

  • II-5

    C U P R I N S

    II.1. Obiecte .......................................................................................................................................... II-8 II.1.1. Obiecte, clase de obiecte i colecii de obiecte......................................................................... II-8 II.1.2. Proveniena obiectelor utilizate ntr-o aplicaie Access ........................................... II-9 II.1.3. Ierarhia obiectelor dintr-o aplicaie .......................................................................................... II-9 II.1.4. Utilizarea n VBA a proprietilor i metodelor obiectelor ....................................... II-11 II.1.5. Exemple de referire a obiectelor din modelul Access ............................................................ II-11 II.1.6. Instruciunea With .................................................................................................................. II-12 II.1.7. Variabile obiect ...................................................................................................................... II-13

    II.1.7.1. Tipuri de variabile obiect .................................................................................................................II-13 II.1.7.2. SET Instruciunea de atribuire pentru variabile obiect ....................................................II-14 II.1.7.3. Eliberarea resurselor folosite de o variabil obiect. Cuvntul cheie NOTHING. ...........................II-15 II.1.7.4. Crearea unei instane noi pentru o clas de obiecte. Cuvntul cheie NEW.....................................II-15

    II.1.8. Parcurgerea coleciilor de obiecte. Instruciunea ForEach............................................. II-16 II.2. Modelul Access-Application...................................................................................................... II-17

    II.2.1. Obiectul Application .............................................................................................................. II-17 II.2.2. Colecia Forms ....................................................................................................................... II-18

    II.2.2.1. Obiectul Form ..................................................................................................................................II-19 II.2.2.1.a) Cuvntul cheie ME....................................................................................................................II-19 II.2.2.1.b) Proprietile formularului ..........................................................................................................II-20 II.2.2.1.c) Evenimentele formularului ........................................................................................................II-22 II.2.2.1.d) Metodele formularului...............................................................................................................II-24 II.2.2.1.e) Obiectele seciunilor formularului: Detail, Form_Header, Form_Footer..................................II-25 II.2.2.1.f) Referirea Subformularelor i a controalelor sale ........................................................................II-25

    II.2.2.2. Obiectul Control Text_Box (caseta de text) ..................................................................................II-26 II.2.2.2.a) Proprietile controlului Text Box.............................................................................................II-26 II.2.2.2.b) Proprietile dinamice ale controlului Text Box........................................................................II-29 II.2.2.2.c) Evenimentele controlului Text Box...........................................................................................II-29 II.2.2.2.d) Metodele controlului Text Box .................................................................................................II-30

    II.2.2.3. Obiectul Control Combo_Box (lista ascuns)...............................................................................II-31 II.2.2.3.a) Proprietile specifice controlului Combo Box .........................................................................II-31 II.2.2.3.b) Evenimentul specific controlului Combo Box. .........................................................................II-33

    II.2.2.4. Obiectul Control List_Box (list derulant)..................................................................................II-33 II.2.2.5. Obiectul Control boolean Option_Button, Check_Box, Toggle_Button........................................II-33 II.2.2.6. Obiectul Control Option_Group ...................................................................................................II-33 II.2.2.7. Obiectul Control Label (etichet) .................................................................................................II-34 II.2.2.8. Obiectul Control grafic Line, Rectangle, Picture..........................................................................II-34 II.2.2.9. Obiectul Control Command_Button..............................................................................................II-34

    II.2.3. Obiectul DoCmd .................................................................................................................... II-34 II.2.4. Obiectul Screen ...................................................................................................................... II-35

    II.3. Modelul DAO Data Access Objects....................................................................................... II-37 II.3.1. Modelul DAO Structura ierarhic arborescent.................................................................... II-37 II.3.2. Obiectul DBEngine ................................................................................................................ II-38 II.3.3. Colecia Workspaces Spaiul (mediul) de lucru .................................................................. II-38 II.3.4. Tratarea erorilor de execuie n VBA..................................................................................... II-40

    II.3.4.1. Tratarea standard a erorilor de execuie produse n VBA ...............................................................II-40 II.3.4.2. Tratarea erorilor de execuie prin module specializate ...................................................................II-40

    II.3.4.2.a) Instruciunea: On Error..............................................................................................................II-41 II.3.4.2.b) Instruciunea: Resume ...............................................................................................................II-41 II.3.4.2.c) Obiectul: Err ..............................................................................................................................II-41 II.3.4.2.d) Structura unei rut ine care are modul de Errorhandling ........................................II-42 II.3.4.2.e) Colecia Errors i obiecte Error .................................................................................................II-43

    II.3.5. Colecia Databases ................................................................................................................. II-44 II.3.6. Colecia Containers ................................................................................................................ II-45 II.3.7. Colecia TableDefs................................................................................................................. II-49 II.3.8. Colecia QueryDefs ................................................................................................................ II-51 II.3.9. Colecia Relations .................................................................................................................. II-54 II.3.10. Colecia Recordsets Set de nregistrri.............................................................................. II-54

    II.3.10.1. Funcionarea unui set de nregistrri.............................................................................................II-54 II.3.10.2. Tipuri de seturi de nregistrri .......................................................................................................II-55

  • II-6

    II.3.10.3. Deschiderea unui set de nregistrri Metoda OpenRecordset ...........................................II-56 II.3.10.4. Proprietile unui set de nregistrri..............................................................................................II-56 II.3.10.5. Accesarea secvenial a unui set de nregistrri............................................................................II-58 II.3.10.6. Accesul direct ntr-un set de nregistrri........................................................................................II-58

    II.3.10.6.a) Metoda Seek............................................................................................................................II-58 II.3.10.6.b) Metodele FindFirst, FindLast, FindNext, FindPrevious..........................................................II-59

    II.3.10.7. Prelucrarea datelor dintr-un Recordset.........................................................................................II-61 II.3.10.7.a) Citirea datelor din cmpurile unui Recordset ..........................................................................II-61 II.3.10.7.b) Actualizarea datelor din cmpurile unui Recordset.................................................................II-62

    II.3.11. Recordseturi definite pe cereri ............................................................................................. II-65 II.3.12. Recordseturi definite pe alte Recordseturi ........................................................................... II-66 II.3.13. Accesul la obiecte externe de date ....................................................................................... II-67

  • II-7

  • II-8

    Cap.II Utilizarea obiectelor n limbajul de programare VBA II.1. Obiecte

    II.1.1. Obiecte, clase de obiecte i colecii de obiecte Din cele prezentate pn acum, referitor la noiunea de obiect, putem sintetiza astfel: Obiectul este o entitate bine definit (adic exist), care are o anumit structur, anumite

    caracteristici i anumite funcii (realizeaz una sau mai multe aciuni). Un obiect se caracterizeaz prin:

    proprieti structura i atributele sale; metode aciunile pe care poate s le efectueze; evenimente condiiile care determin momentul cnd se lanseaz o anumit aciune (de exemplu Click pe un obiect).

    Exemplu. ntr-o aplicaie Access, ntr-un formular, exist un obiect cu numele Cmd. Acesta este un control buton de comand, cu anumite proprieti (culoare, dimensiuni, poziia n formular, textul afiat etc.), care are ataat evenimentului Click o aciune (metod), materializat printr-o procedur eveniment, prin care se nchide formularul respectiv.

    Clasa de obiecte conine toate definiiile unui obiect, adic tipurile de proprieti, metode i evenimente care vor determina structura unui obiect. Prin setarea caracteristicilor unei clase de obiecte (de exemplu atribuirea de valori proprietilor) se obine un obiect nou.

    Prin definirea unei clase de obiecte se creeaz practic un format, o structur pe care o vor avea toate obiectele ce se vor crea din aceasta.

    Relaia dintre o clas de obiecte i obiectele care provin din ea este asemntoare cu aceea dintre tipurile de date i variabile de tipul respectiv. Aa cum tipul de date este un concept, iar o variabil este materializarea (n memoria calculatorului) acestuia, tot aa clasa de obiecte este un concept, iar obiectele ce provin din ea reprezint materializarea acesteia.

    Crearea unui nou obiect al unei clase se numete instan a clasei respective. n Access exist definite diferite clase de obiecte. De exemplu clasa Form stabilete care este

    structura unui obiect formular, adic proprietile (nume, culoare, dimensiuni, caption etc.), evenimentele (open, close, click etc.) i metode (refresh, requery etc.). Un formular creat este o materializare (o instan) a clasei Form, avnd setate proprietile cu anumite valori i ataate la anumite evenimente metode specifice prin scrierea unui cod de program n VBA.

    Colecia de obiecte este constituit din totalitatea obiectelor care provin din aceeai clas de obiecte i care au din aceast cauz aceleai tipuri de proprieti i metode. Aceste obiecte constituie deci instane ale aceleiai clase de obiecte.

    Obiectele dintr-o colecie pot fi privite i folosite ca un tablou de obiecte. Ele vor crea o structur de tip tablou, la care este posibil referirea la un anumit obiect prin indexul acestuia, deci printr-un numr care reprezint poziia acestuia n tablou. Astfel, la crearea primului obiect, acesta va primi indexul 0, la crearea celui de-al doilea indexul va fi 1, etc.

    O colecie de obiecte reprezint la rndul ei o entitate, cu propriile sale proprieti. Din aceast cauz ea constituie, n totalitatea ei, un obiect specific.

    Astfel o colecie de obiecte va avea printre altele urmtoarele dou proprieti: Count care conine numrul de obiecte din colecie; Parent care conine obiectul superior din ierarhie de care aparine colecia.

    Numele obiectului colecie este format din numele clasei de unde provin obiectele la care se adaug sufixul "s".

    Exemplu. ntr-o aplicaie Access, n formularul F_CDialogContainer, colecia de obiecte Controls conine toate obiectele control din formular. Procedura urmtoare, lansat de evenimentul DblClick al seciunii "Header" a formularului trateaz colecia Controls, ca pe un tablou, afind elementele componente ale acesteia (numrul acestora se gsete n proprietatea Count) ct i obiectul de care aparine (proprietatea Parent).

    Private Sub FormHeader_DblClick(Cancel As Integer)

  • II-9

    ' Afieaz numele obiectelor ce se afl n _ colecia de controale a formularului Dim ST As String Dim i As Integer Dim N As Integer ST = "" ' Proprietatea Count a coleciei conine _ numrul de obiecte din colecie N = Me.Controls.Count - 1 For i = 0 To N 'Primul element dintr-o colecie are indexul 0 ST = ST & i & ": " & Me.Controls(i).NAME & vbCr Next i ' Propritatea Parent a coleciei conine obiectul _ de care aparine colecia MsgBox " Controalele din formularul parinte:" _ & vbCr & """ " & Me.Controls.Parent.NAME & _ " "", sunt n ordine:" & vbCr & vbCr & ST ' vbCr este o constant care determin saltul de rnd nou _ la afiare vbCr = Chr(10) & Chr(13) End Sub

    II.1.2. Proveniena obiectelor utilizate ntr-o aplicaie Access Un obiect, aa cum am artat, este format att din date (proprieti) ct i din cod de program

    (metode). Realizarea unei aplicaii prin crearea i utilizarea unor obiecte reprezint o metod modern de programare, denumit programarea la nivel de obiect.

    Cel mai important avantaj al acestei metode este acela al utilizrii obiectelor create n mai multe aplicaii, ceea ce duce, n afar de o cretere semnificativ a productivitii, la standardizarea aplicaiilor realizate.

    n Access obiectele din care se realizeaz o aplicaie pot proveni din mai multe surse: instane ale claselor de obiecte aflate n bibliotecile standard ale pachetului Access: DAO, Access

    Application i VBA; instane ale claselor de obiecte proprii (utilizator), create special de proiectant (prin modulele de

    clase de obiecte); instane ale unor clase de obiecte externe, realizate de aplicaii server sub forma unor controale

    sau biblioteci ActiveX realizate cu tehnologia (standardul industrial) Automation. Utilizarea acestor clase de obiecte externe implic n prealabil, aa cum se va arta, crearea n aplicaia client (care folosete obiectele produse de clasa respectiv) a unei referine ctre acestea.

    II.1.3. Ierarhia obiectelor dintr-o aplicaie Obiectele folosite ntr-o aplicaie se gsesc ntr-o structur ierarhic-arborescent. Fiecare element al acestei structuri aparine unei structuri superioare i la rndul su conine unul

    sau mai multe elemente de nivel inferior. De asemenea un element al acestei structuri poate fi constituit dintr-un obiect individual sau dintr-o

    colecie de obiecte. O aplicaie Access este realizat n cea mai mare parte din obiectele i coleciile de obiecte care

    provin din clasele de obiecte ale urmtoarelor biblioteci standard (modele): DAO privind structurile de date; Access (Application) privind interfaa utilizator;

    i respectnd ierarhiile create n acestea. Obiectele, ca i proprietile sau metodele lor, au un nume, care poate fi implicit (adic stabilit de

    sistem) sau dat de utilizator. n decursul acestui capitol termenul model va referi realizarea unei structuri ierarhice de obiecte i colecii de obiecte ce provin dintr-o bibliotec standard ce conine clase de obiecte.

  • II-10

    Referirea la un obiect. Deoarece exist posibilitatea ca mai multe obiecte s aib acelai nume, atunci cnd se refer un

    obiect (sau proprietile i metodele sale), este necesar calificarea numelui cu ntreaga structur ascendent a obiectelor de care acesta este dependent (asemntor cu descrierea cii unui fiier sau folder de pe un disc). Acest lucru nu este ns obligatoriu dac nu se creeaz ambiguiti.

    Semnele de calificare folosite n toate obiectele unei aplicaii Access (deci i n VBA) sunt punctul (.) sau semnul exclamrii-bang (!), specificul utilizrii lor fiind urmtorul:

    punctul (.): se folosete cnd n faza de scriere a structurii ierarhice, aceasta este deja cunoscut de sistem; semnul exclamrii (!): se folosete cnd se dorete ca descrierea structurii respective s se analizeze de abia n faza de execuie, deoarece n faza de scriere ea nu este nc cunoscut de sistem;

    Explicaie. Se tie c ntr-o aplicaie Access execuia unui formular (sau raport) care are introdus cod VBA n modulul su de cod, se va face numai dup ce se compileaz fr eroare acesta. n faza de compilare a modulelor de cod, sistemul va analiza numai structurile ierarhice care au ca semn de calificare punctul (.) i ignor pe cele care au ca semn de calificare semnul exclamrii (!), urmnd ca acestea din urm s fie analizate abia n faza de execuie. Deci pentru ca operaia de compilare s se termine cu succes este necesar ca toate structurile ierarhice care nu sunt cunoscute n momentul respectiv s fie introduse cu semnul de calificare semnul exclamrii (!) pentru a nu fi analizate (structurile ierarhice cunoscute n faza de compilare pot fi introduse cu semnul de calificare punct). Exemplu. Astfel, dac n codul din spatele unui formular legat la un tabel se folosete numele unui cmp al acestuia, atunci, deoarece n faza de compilare obiectul respectiv, tabelul, este deja cunoscut de sistem, semnul de calificare folosit poate fi punctul (.); dac ns formularul nu este legat iniial la o tabel, urmnd a se efectua aceast operaie printr-o instruciune VBA (deci n faza de execuie), atunci referirea la cmpurile acesteia trebuie fcut cu semnul de calificare semnul exclamrii (!), pentru ca analiza acesteia s nu se mai fac n momentul compilrii (cnd nu este cunoscut) ci n momentul execuiei instruciunii care folosete structura respectiv. Se poate nlocui oricnd semnul de calificare punct (.) cu semnul de calificare semnul exclamrii (!), dar nu i invers. Folosirea structurilor ierarhice descrise cu semnul de calificare semnul exclamrii (!) ncetinete execuia codului VBA, deoarece analiza acestora nu se mai face n faza de compilare. Referirea unei colecii se face folosind acelai sistem, deoarece colecia este, aa cum am vzut, la rndul ei, un obiect.

    Referirea la un obiect dintr-o colecie se poate face n 3 feluri: Fie folosind tot metoda prezentat, utiliznd calificarea obiectului cu colecia din care face parte:

    Exemplu. Me.Controls!CForm

    Fie folosind indexarea coleciei cu un numr care reprezint poziia n colecie a obiectului respectiv (asemntor cu referirea unui element dintr-un tabel).

    Numerotarea elementelor unei colecii de obiecte se pornete de la 0 (zero). Exemplu. Me.Controls(0)

    Fie la fel ca mai sus dar folosind ca pe un ir de caractere numele obiectului n loc de index. Exemplu. Me.Controls("CForm") Dac se dorete s se fac referire n codul VBA la formularul sau raportul "printe", fr a se mai face descrierea structurii ierarhice superioare, se poate folosi cuvntul cheie ME. Semnele care se pot folosi pentru a se specifica un obiect sunt parantezele drepte . Ele sunt folosite obligatoriu atunci cnd n numele obiectului se gsesc spaii.

  • II-11

    II.1.4. Utilizarea n VBA a proprietilor i metodelor obiectelor Referirea la proprietile sau metodele unui obiect se face prin: metoda descris la punctul precedent pentru referirea obiectului; urmat de numele proprietii sau metodei, folosind semnul de calificare punct. Utilizarea proprietii unui obiect, n codul VBA, se face la fel ca i cum s-ar lucra cu o variabil

    obinuit, n citire sau scriere. Dac se dorete atribuirea unei valori proprietii unui obiect, atunci aceasta se introduce n partea din dreapta a unei instruciuni de atribuire.

    Exemplu de scriere a proprietii Caption a unui formular: Me.Caption="Nume Nou Form" sau a proprietii Index, a unui Recordset: Rs.Index="PrimaryKay"

    Dac se dorete citirea proprietii unui obiect, atunci aceasta va face parte dintr-o expresie obinuit.

    Exemplu de citire a proprietii Caption a unui formular: MsgBox "Numele formularului este: " & Me.Caption

    La utilizarea proprietilor unui obiect trebuie s se in cont de urmtoarele trei restricii: Nu toate proprietile au posibilitatea s li se schimbe valoarea. Aceste proprieti se numesc Read Only, i se folosesc numai n citire; Ca i o variabil, o proprietate este de un anumit tip de date, de care trebuie inut cont n utilizarea ei; Modificarea proprietilor unui obiect prin cod dureaz numai n timpul fazei respective de execuie, urmnd ca la terminarea acesteia s se refac proprietatea iniial;

    Utilizarea metodelor unui obiect n codul VBA se face la fel ca i cum s-ar lucra cu o procedur, folosindu-se metoda de apelare fr Call, prin scrierea sub forma unei instruciuni a metodei, urmat, dac este cazul, de parametrii acesteia (fr a fi introdui ntre paranteze) separai prin virgul.

    Exemplu de apelare a unei metode cu doi parametri de tip string: Rs.Seek "=", "unu". II.1.5. Exemple de referire a obiectelor din modelul Access

    Pentru nelegerea acestor exemple este necesar urmrirea structurii ierarhice a modelului Access Application ce se gsete tot n cadrul acestui capitol.

    Forms!Date se face referire la formularul deschis cu numele Date. Forms![date de bilant] se refer formularul deschis date de bilant. Observai parantezele

    drepte folosite pentru c numele formularului conine spaii. Forms![vinzari].RecordSource se face referire la proprietatea Record Source al formularului

    deschis vinzari. Parantezele drepte pot fi scoase. Observai punctul, semnul de calificare pentru o proprietate sau metod.

    Forms![vinzari]!valoare se refer controlul cu numele valoare din formularul deschis vinzari. Forms!("vinzari")!valoare identic cu mai sus, dar se folosete alt posibilitate de precizare a

    unui obiect dintr-o colecie i anume printr-un string care reprezint numele obiectului. Forms!(0)!valoare identic cu mai sus, dar se folosete precizarea unui obiect dintr-o colecie

    prin folosirea numrului de ordine al obiectului n cadrul coleciei (am presupus c formularul vinzari a fost primul deschis, primind indexul 0 in cadrul coleciei Forms).

    Me.FilterOn se refer proprietatea FilterOn a formularului n care se gsete codul VBA. Me!Altul.Visible se refer proprietatea Visible a controlului Altul a formularului n care se

    gsete codul VBA. Exemplul prezentat anterior este reluat, dar el nu se mai gsete n codul din spatele formularului, ci

    extern n modulul de cod al aplicaiei. Din el se observ n special cum funcioneaz colecia Forms, a formularelor deschise.

    Public Sub Col_Form_Controale() ' Afieaz obiectele ce se afl n colecia de controale a primului formular deschis Dim ST As String Dim i As Integer Dim N As Integer ST = "" ' Proprietatea Count a coleciei conine numrul de obiecte din colecie

  • II-12

    On Error GoTo Fis ' Dac nu este nici un formular deschis se produce _ eroare controlabil de ctre utilizator N = Forms(0).Controls.Count ' Numrul de obiecte din colecia de _ controale a primului formular deschis On Error GoTo 0 n continuare, dac se produce o eroare aceasta _ va fi tratat de sistemul standard de erori. For i = 0 To N -1 'Primul element dintr-o colecie are indexul 0 ST = ST & i & ": " & Forms(0).Controls(i).NAME & vbCr Next i ' Propritatea Parent a coleciei conine obiectul de care aparine colecia MsgBox " Controalele din formularul parinte:" & vbCr & _ """ " & Forms(0).Controls.Parent.NAME & _ " "", sunt n ordine:" & vbCr & vbCr & ST Sfirsit: Exit Sub Fis: MsgBox "Nu exista nici un formular deschis", vbCritical Resume Sfirsit End Sub

    II.1.6. Instruc iunea With Instruciunea With este folosit pentru a scrie diferite instruciuni ce se refer la prorietile sau

    metodele unui obiect, fr a le mai califica cu numele obiectului. Forma lui With este: With object [instruciuni] End With

    n care instruciunile plasate n interiorul acesteia vor referi proprietile sau metodele obiectului object, direct, fr calificarea acestora cu obiectul respectiv. n object se poate folosi numele unui obiect sau o variabil obiect. Exemplu. Urmtoarea secven modific cteva dintre proprietile formularului deschis cu numele Datt.

    With Forms!Datt .RecordSource = "Tabela_A" .Caption = "Formularul Datt" .ScrollBars = 0 .NavigationButtons = True

    End With Instruciunea With se poate folosi i pentru tipurile de date definite de utilizator cu instruciunea Type. Exemplu. Urmtoarea secven introduce date n variabila vPersoana, declarat ca tip de date tPrs, definit de utilizator.

    Type tPers Nume As String Virsta As Integer DataNastere As Date End Type Dim vPersoana as tPers ..

    With vPersoana .Nume=InputBox("Introduceti numele:") .Virsta=30 .DataNastere=InputBox("Introduceti data nasterii:") End With

  • II-13

    II.1.7. Variabile obiect n programare variabilele sunt elementele prin care se fac referiri la date. Deoarece n programarea

    la nivel de obiect, exist o entitate specific, obiectul, care ncapsuleaz att date ct i prelucrri, este necesar definirea unei variabile specifice, variabila obiect, prin care s se poat manipula mai eficient acesta.

    O variabil obiect este asemntoare unei variabile obinuite ce conine un anumit tip de date. Declararea ei se face cu aceleai instruciuni (Dim, Public, Private sau Static) ca i la celelalte variabile.

    Variabilele obiect ocup o zon de memorie de 32 bii (4 octei). Dei lucrul cu variabile obiect nu este deosebit de cel cu variabilele obinuite, totui ele au o

    caracteristic specific i anume: ntr-o variabil obiect nu se va gsi efectiv obiectul respectiv, ci o referire (adres) la acesta.

    Astfel, dac avem o variabil de tip integer AI i executm AI=3, atunci n AI vom avea efectiv, pe 16 bii, numrul 3. Dac mai declarm o variabil de acelai tip, BI i o facem egal cu AI, vom avea i n aceasta numrul 3. Acum, executnd AI=5, se va schimba valoarea din AI, dar cea din BI va rmne neschimbat. AI i BI au deci existene separate, independente.

    Nu acelai lucru se ntmpl i n cazul variabilelor obiect. Dac (vezi urmtorul exemplu) avem o variabil obiect FM1 i introducem n ea un obiect, formularul F_CDialogContainer, atunci n FM1 nu vom avea formularul respectiv, ci o referire (adres) la acesta. Tot aa, dac mai declarm o variabil obiect, FM2 i introducem n ea ce se gsete n FM1, atunci vom avea acum dou variabile obiect care vor referi acelai obiect. S modificm acum o proprietate a lui FM1. Dac vom citi aceeai proprietate din FM2, vom observa c modificarea este efectuat i n acesta. Deci, cele dou variabile obiect nu au existene independente, ele referind practic acelai obiect.

    Evident, n anumite prelucrri, acest lucru are importan (ca n exemplu). Totui n majoritatea prelucrrilor manifestarea variabilelor obiect este similar cu a celor clasice. II.1.7.1. Tipuri de variabile obiect

    O variabil obiect se poate declara n mai multe feluri i anume ca: Variabil obiect generic: Dim nume_var As Object

    Variabila declarat n acest fel este o variabil obiect generic, deoarece n ea se poate introduce orice obiect. Variabil obiect specific

    Pentru fiecare obiect care se obine dintr-o clas vizibil n aplicaie, indiferent c aceasta provine din bibliotecile standard, prin referine la obiecte externe sau este creat de utilizator, exist tipuri specifice de variabile obiect, cu acelai nume ca al clasei respective. De asemenea, acelai lucru se ntmpl i pentru coleciile de obiecte, existnd tipuri specifice de variabile obiect cu numele acestora.

    Astfel, pentru obiectele provenite din biblioteca Access Application, exist urmtoarele tipuri de variabile obiect:

    Forms colecia formularelor deschise; Form pentru un obiect formular; Reports colecia rapoartelor deschise; Report pentru un obiect raport; Controls pentru colecia tuturor controalelor dintr-un formular sau raport; Control pentru un control dintr-un formular sau raport etc.

    Deoarece controalele, la rndul lor, provin din clase diferite de obiecte, exist pentru fiecare tip din acestea variabile obiect specifice. Astfel mai sunt pentru controale urmtoarele tipuri specifice de variabile obiect:

    TextBox pentru controlul caset de text; ComboBox pentru controlul list ascuns;

  • II-14

    ListBox pentru controlul list derulant; CheckBox pentru controlul boolean caset de validare; Button pentru controlul boolean buton radio; ToggleButton pentru controlul boolean de tip tast; CommandButton pentru controlul buton de comand; Label pentru controlul etichet etc.

    Declararea unei variabile obiect specifice se face folosind numele clasei sau coleciei care va fi referit de variabila respectiv.

    Dim nume_var As tip_obiect Diferena dintre utilizarea unei variabile obiect specifice sau generice se refer la urmtorul aspect: La declararea unei variabile obiect generice, sistemul nu tie ce fel de obiect va fi n aceasta. Acest

    lucru se va cunoate la prima ncrcare cu un obiect al variabilei. n acest moment, se va configura variabila obiect cu proprietile i metodele specifice tipului de obiect respectiv. Deci aceast configurare este realizat n partea de execuie a aplicaiei.

    La declararea unei variabile obiect specifice, sistemul tie de la nceput care sunt proprietile i metodele tipului de obiect respectiv. Deci configurarea variabilei este realizat n partea de compilare a aplicaiei i nu n cea de execuie. Din aceast cauz, execuia cu acest tip de variabile este mai rapid. Un alt avantaj, determinat de utilizarea variabilelor obiect specifice, se refer la momentul n care este folosit, n partea de editare a programului, variabila obiect respectiv.

    Editorul de VBA este dotat cu instrumente puternice de recunoatere i marcare a diferitelor cuvinte rezervate, a instruciunilor, a variabilelor, a obiectelor, a procedurilor i funciilor vizibile din locul unde sunt folosite.

    Astfel, dac se introduce n text o funcie (reamintesc c m refer la partea de editare, de introducere a sursei unui modul de cod n VBA), atunci, dup scrierea ei, automat se afieaz o list cu parametrii acesteia, ceea ce reprezint un instrument foarte util al asistrii activitii de programare.

    Similar, la introducerea n codul VBA a denumirii unui obiect (sau colecii de obiecte), editorul afieaz o list ce conine att proprietile i metodele acestuia ct i obiectele (sau coleciile de obiecte) pe care acesta le conine. Acelai lucru se va ntmpla i dac programatorul va introduce numele unei variabile obiect specifice.

    Dac se lucreaz ns cu variabile obiect generice, aceast facilitate nu poate fi activat n momentul respectiv (al editrii programului), deoarece sistemul nu cunoate nc nimic despre structura obiectului pe care l refer variabila respectiv. Nu toate obiectele sau coleciile utilizate n Access au asociate i declaraiile de tipul respectiv pentru definirea variabilelor. n acest caz, evident se vor declara generic, variabilele care refer aceste obiecte.

    De exemplu, pentru controalele folosite ntr-un formular sau raport, exist tipurile de variabile obiect specifice:

    "Controls" care se refer la colecia controalelor din formularul sau raportul respectiv; "Control" care se refer la un obiect control din formularul sau raportul respectiv;

    dar pentru toate controalele de un anumit tip (de exemplu TextBox) sunt definite numai tipurile pentru acest obiect (TextBox), dar nu i pentru colecia format din aceste controale (nu exist tipul TextBoxs).

    Din cele prezentate se deduce c este indicat ca atunci cnd este posibil, s se foloseasc numai variabile obiect specifice. Dei nu s-a folosit n prezentare, pentru declararea variabilelor obiect, dect forma instruciunii Dim, celelalte forme i anume Public, Private sau Static, sunt valabile i funcioneaz la fel ca la variabilele clasice. II.1.7.2. SET Instruciunea de atribuire pentru variabile obiect

    Dei am folosit mereu forma de mai jos pentru instruciunea de atribuire pentru variabilele clasice: var = expresie

    totui forma complet a acesteia este: Let var = expresie

  • II-15

    n care cuvntul cheie Let, introdus implicit, arta c este atribuit o valoare unei variabile clasice. Pentru variabilele obiect, la care atribuirea const practic n crearea unei referine ctre un obiect,

    este obligatorie folosirea la instruciunea respectiv a cuvntului cheie SET. Deci pentru variabilele obiect instruciunea de atribuire este: Set var_obiect = expresie_obiect n care expresie obiect este o expresie al crui rezultat este un obiect. Efectul instruciunii de atribuire este introducerea n variabila obiect a adresei obiectului (referirea

    la acesta) care rezult din expresia din dreapta i nu realizarea unei copii a obiectului respectiv. Din aceast cauz dac mai multe variabile refer acelai obiect, orice modificare a acestuia

    (cauzat eventual prin una din variabile) va fi reflectat imediat de toate aceste variabile care refer obiectul respectiv (vezi exemplul care va urma). II.1.7.3. Eliberarea resurselor folosite de o variabil obiect. Cuvntul cheie

    NOTHING. O variabil obiect are nevoie de un spaiu (memorie) de lucru pentru a funciona. Acesta este

    eliberat automat, ca la orice variabil, la terminarea modulului n care a fost declarat variabila obiect. Dac totui se dorete eliberarea imediat a spaiului ocupat de o variabil obiect se folosete

    instruciunea: Set var_obiect = Nothing

    Public Sub Var_Obiect() ' Demonstreaz c o variabil obiect reprezint referina ctre un obiect Dim ST As String Dim FM1 As Form Dim FM2 As Form On Error GoTo Fis 'Lipsa unui formular deschis produce o eroare Set FM1 = Forms(0) ' Var. obiect FM1, va conine referina ctre _ primul formular deschis MsgBox "Primul formular deschis este: " & FM1.NAME On Error GoTo 0 Set FM2 = Forms(0) ' Var. obiect FM2, va conine aceeai referin ca _ variabila FM1 ST = FM1.Caption ' Proprietatea Caption a variabilei obiect FM1 _ este salvat n ST FM1.Caption = "TEST Variabile Obiect" ' Se schimb proprietatea _ Caption n FM1 MsgBox FM2.Caption ' Schimbarea se face practic n obiectul referit. _ Deci i n FM2 prop. Caption va fi: "TEST Variabile Obiect" FM1.Caption = ST ' Se reface proprietatea Caption. MsgBox FM2.Caption ' Aceast schimbare se produce i n FM2 Set FM1 = Nothing ' Se elibereaz spaiul ocupat de FM1 Sfirsit: Exit Sub ' La terminarea rutinei, se elibereaz spaiul ocupat de toate variabilele _ obiect declarate n ea. Deci spaiul ocupat de FM2 se elibereaz i el. Fis: MsgBox "Nu exista nici un formular deschis", vbCritical Resume Sfirsit End Sub

    II.1.7.4. Crearea unei instane noi pentru o clas de obiecte. Cuvntul cheie NEW Cuvntul cheie New se poate folosi att la declararea unei variabile obiect ct i la instruciunea de

    atribuire Set. Dim nume_var As New tip_obiect Set var_obiect = New expresie_obiect

  • II-16

    Efectul acestuia se manifest numai la clasele de obiecte create prin modulele de cod ale aplicaiei. El produce crearea unei noi instane pentru clasa respectiv, adic practic al unui spaiu separat de existen pentru variabila respectiv.

    Nu trebuie confundat folosirea acestui cuvnt cheie cu aceea de creare a unor obiecte noi n modelele standard ale Access (de exemplu nu se poate crea prin New un control nou ntr-un formular). II.1.8. Parcurgerea coleciilor de obiecte. Instruciunea ForEach

    n primul exemplu din acest capitol s-a artat cum pot fi parcurse cu o instruciune FOR obinuit obiectele unei colecii, folosindu-se proprietatea Count a coleciei pentru stabilirea numrului de cicluri necesar.

    Acelai lucru se poate face mai eficient cu forma special a instruciunii ForEach: For Each var_obiect In colecie_obiecte

    [instruciuni] [Exit For] [instruciuni]

    Next [var_obiect] Variabila obiect folosit trebuie s fie compatibil cu tipul coleciei specificate dup cuvntul cheie IN.

    Funcionarea buclei For const n faptul c la fiecare iteraie, variabilei obiect, var_obiect, i se va atribui pe rnd cte un element al coleciei specificate.

    Deci instruciunea ForEach va avea attea cicluri cte obiecte conine colecia specificat n instruciune. Exemplu.

    Public Sub Afis_Forms() 'Afieaz toate formularele deschise Dim FM As Form Dim ST As String ST = "" For Each FM In Forms ' FM refer la fiecare ciclu un formular deschis ST = ST & " " & FM.NAME & vbCr Next If Len(ST) > 0 Then MsgBox "Formulare deschise: " & vbCr & vbCr & ST Else ' Nu s-a executat nici un ciclu din For...Each MsgBox "Nici un formular nu eeste deschis" End If End Sub

    Instruciunea For ... Each se poate folosi i pentru variabile de tip tablou (Array). n acest caz, variabila contor trebuie s fie declarat de tip variant.

  • II-17

    II.2. Modelul Access-Application Modelul ierarhic arborescent Application, prin

    care se realizeaz instanele obiectelor i coleciilor care constituie interfaa utilizator a unei aplicaii i care provin din clasele de obiecte coninute n biblioteca standard Access, este artat succint n figura alturat. n figura prezentat nu s-au detaliat coleciile. De exemplu, dac la un moment dat exist dou formulare deschise, FM_1 i FM_2, care conin controalele Cbox_1, Cbox_2 i Cmd (FM_1), respectiv Comb1 i Cbox_1 (FM_2), atunci colecia Forms va arta ca n figur.

    ------------------

    II.2.1. Obiectul Application Obiectul Application se refer la aplicaia

    Microsoft Access activ i are dou funcii de baz: 1) Conine urmtoarele obiecte i colecii: colecia Forms a formularelor deschise; colecia Reports a rapoartelor deschise (cu

    aceiai structur ca Forms); colecia Modules a modulelor de cod; colecia References a referinelor ctre alte obiecte ActiveX (obiecte sau biblioteci); obiectul Screen conine proprieti i metode ce se refer la formularul, raportul sau controlul

    care la un moment dat are focusul; obiectul DoCmd care conine metode prin care se pot executa din codul VBA aproape toate

    comenzile care se pot folosi n aplicaiile Access. 2) Prin metodele i proprietile sale, obiectul Application poate accesa oricare dintre

    componentele (colecii, obiecte, proceduri, funcii, clase etc.) aplicaiei Microsoft Access. De asemenea exist posibilitatea referirii acestui obiect i dintr-o aplicaie extern prin tehnica Automation. Oricare obiect Access are o proprietate special-Application, prin care se poate accesa obiectul Application.

    ------------------

    Dintre metodele obiectului Application prezentm cteva: Metoda SetOption a obiectului Application este folosit pentru a seta opiunile generale ale

    bazei de date (o parte din acestea se gsesc definite n meniul Tools|Options). Astfel opiunea Status Bar, care permite sau nu vizualizarea barei de stare, se poate activa prin

    urmtoarea metod: Application.SetOption "Show Status Bar", True Aa cum se observ, metoda SetOption are doi parametri:

    primul este un string care conine numele opiunii ce se va seta; al doilea este de un tip de dat specific opiunii (boolean n cazul prezentat) i este folosit pentru a da o valoare opiunii;

    Metoda GetOption ntoarce valoarea unei opiuni generale a bazei de date; Metoda Quit determin terminarea aplicaiei Access; Metoda Echo determin blocarea refacerii ecranului.

    .

    Application.Echo False,"Ecranul este blocat" DoCmd.Hourglass True ' prelucrri n cursul crora ecranul nu se va mai modifica _

    Stringul introdus n al doilea argument este afiat pe bara de stare Application.Echo True

    Forms

    Application

    Legend Obiecte Colecii

    Reports Controls

    Controls Modules

    Screen

    DoCmd

    formularele deschise rapoartele deschise

    Forms colecia formularelor deschise

    Controls FM_1

    Cbox_1

    Cbox_2

    Cmd

    Controls FM_1 Cbox_1 Comb1

  • II-18

    DoCmd.Hourglass False ' Se reface starea normal a ecranului

    CreateForm i CreateReport Funcii ce permit crearea unui formular sau raport n aplicaia Access, din codul VBA, ca n

    exemplul urmtor: Sub NewForm() Dim fm As Form Set fm = Application.CreateForm ' Creaz un formular nou a crei _ referin se introduce n variabila obiect specific de tip Form, fm With fm ' Seteaz cteva proprieti ale formularului

    .RecordSource = "Tabela_A" .Caption = "Numele Formularului" .AllowAdditions = False .AllowDeletions = False

    End With DoCmd.Restore ' afieaz formularul creat End Sub

    O aplicaie Access este un ActiveX. Aceasta nseamn c ea poate fi accesat i din alte aplicaii care folosesc tehnologia OLE Automation, ca MS Visual Basic, MS Excel sau alt aplicaie Access. Pentru aceasta trebuie creat o nou instan a obiectului Application, n care se poate deschide o baz de date.

    n exemplul urmtor se deschide dintr-o aplicaie Access o baz de date cu numele DAO.mdb, ce se afl n directorul Teste a discului C:

    Sub ExempluAccess() Dim appAccess As Object Dim strDB As String strDB = "C:\Teste\DAO.mdb" ' introduce adresa bazei de date Set appAccess = New Access.Application ' creeaz o nou instan a _ obiectului Application, a crei referin se introduce n variabila obiect _ appAccess, n scopul folosirii acesteia ' Deschide n instana creat n MS Access baza de date DAO.mdb appAccess.OpenCurrentDatabase strDB appAccess.DoCmd ' efectueaz diferite aciuni n DAO.mdb appAccess.CloseCurrentDatabase ' nchide baza de date DAO.mdb Set appAccess = Nothing ' anuleaz instana creat End Sub

    n descrierea structurii ierarhic arborescente a modelului Access-Application din aplicaia Access, folosirea obiectului Application este opional, el fiind considerat implicit. II.2.2. Colecia Forms

    Colecia Forms conine toate formularele deschise la un moment dat. Indexarea coleciei ncepe de la 0 Forms(0) reprezentnd primul formular deschis. n continuare, fiecare nou formular deschis va avea indexul urmtor din secven, iar nchiderea unui formular va determina o renumerotare a formularelor deschise, n aa fel ca mulimea indecilor s fie mereu continu i n ordinea deschiderii formularelor.

    Membrii coleciei Forms a formularelor deschise sunt obiecte Form. Pentru colecia Forms i obiectele Form, exist definite tipuri de date obiect specifice.

    Formularele deschise pot fi i n proiectare (design). Exemplu. Procedura urmtoare, ce se gsete n modulul general de cod, afieaz numrul formularelor deschise n momentul execuiei sale. Ea va folosi proprietatea Count a unei colecii de obiecte, care conine, aa cum s-a mai artat, numrul de obiecte ce se gsesc n aceasta.

    Sub TestForms Dim N as Integer Dim FS as Forms Set FS = Application.Forms

  • II-19

    N = FS.Count If N = 1 Then MsgBox "Exist un formular deschis" ElseIf N>1 Then MsgBox "Exist " & N & " formulare deschise" Else MsgBox "Nu exist nici un formular deschis" End If End Sub

    II.2.2.1. Obiectul Form Un obiect Form reprezint un formular deschis. El are proprieti, metode i evenimente (la care se

    pot ataa metode) descrise tot n cadrul acestui capitol. Un obiect Form conine o colecie de controale numit Controls, format din obiecte Control. Fiecare obiect Control va fi de un anumit tip i va avea proprietile, metodele i evenimentele

    specifice acestuia. Pentru colecia Controls i obiecte Control, exist tipuri de date obiect specifice, definite. De asemenea, pentru diferite tipuri de controale sunt definite tipuri de date obiect specifice (dar nu

    i colecii) ca de exemplu: TextBox pentru controlul caset de text; ComboBox pentru controlul list ascuns; ListBox pentru controlul list derulant; CheckBox pentru controlul boolean caset de validare; Button pentru controlul boolean buton radio; ToggleButton pentru controlul boolean de tip tast; CommandButton pentru controlul buton de comand; Label pentru controlul etichet.

    II.2.2.1.a) Cuvntul cheie ME Me este folosit pentru a face referire direct, din modulul de cod din spatele unui formular, la

    obiectul (formular) al crui cod este executat. n acest fel Me se comport asemntor cu o variabil obiect de tip Form, declarat implicit. Me este utilizat n general n dou scopuri: Pentru a referi direct obiectele din formularul al crui cod se execut (opional). De exemplu:

    Me.Cbox_1, se refer la un control din formularul n execuie. Me.RecordSource="Tabela_A" ' se leag formularul la _ tabela Tabela_A; aceasta are un cmp A

    MsgBox Me!A ' se observ semnul de calificare folosit; la _ compilare, formularul nefiind legat de Tabela_A, cmpul A nu era _ cunoscut de sistem.

    Pentru a trimite ntr-o rutin aflat n alt modul de cod, ca parametru, instana al crui cod este executat. Exemplu. n formularele unei aplicaii exist un buton de comand, BC, care la evenimentul click, va nchide toate formularele deschise cu excepia celui care este activ (cel n care s-a apsat BC).

    n modulul de cod din spatele unui formular la evenimentul Click al butonului ce comand BC, va fi urmtoarea procedur eveniment:

    Private Sub BC_Click() ' proc. Evenimentului Click al controlului BC ' nchide toate formularele deschise din aplicaie CloseForms Me ' parametrul va fi o referin la un obiect de tip form _ i anume chiar formularul n al crui cod ne gsim End Sub

    n modulul general de cod va fi urmtoarea procedur public: Public Sub CloseForms(pF As Form) Dim vF As Form Dim cF As Forms Dim NrClose As Integer Dim Afis As String

  • II-20

    Dim NF As Integer Dim i As Integer Set cF = Application.Forms ' colecia Formularelor deschise NF = cF.Count MsgBox "Formulare deschise=" & NF For i = NF - 1 To 0 Step -1 Set vF = cF(i) ' un obiect Formular If vF.NAME = pF.NAME Then MsgBox "Formularul activ este:" & pF.NAME Else Application.DoCmd.Close acForm, vF.NAME ' Metod a obiectului DoCmd prin care se nchide _ obiectul de tip formular (constanta acForm) _ i cu numele coninut n al doilea parametru. NrClose = NrClose + 1 End If Next Afis = IIf(NrClose = 0, "Nu s-au inchis formulare", "Formulare inchise=" & NrClose) MsgBox Afis End Sub

    Se observ c s-a parcurs colecia formularelor deschise (Forms) de la ultimul formular deschis ctre primul. Acest lucru se datoreaz faptului c nchiderea unui formular va produce modificri n colecia formularelor deschise, att asupra numrului de membri ai coleciei ct i asupra numrului de ordine (de indexare) n cadrul coleciei unui formular dac a fost nchis un formular cu un index mai mic; de exemplu dac exist 3 formulare deschise, cu indecii: 0, 1, 2 nchiderea formularului 1 va face ca formularul cu indexul 2 s ia indexul 1. II.2.2.1.b) Proprietile formularului

    Majoritatea proprietilor formularului se pot accesa att static (prin cele 3 pagini ale controlului TAB al formularului) ct i dinamic, prin cod VBA. Numele formularului

    Stabilirea numelui formularului se face n fereastra Database la fel ca la tabele sau cereri. Acesta este foarte important deoarece se va folosi pentru a se face referire la acest obiect de oriunde, dar evident calificat dac este necesar. Pagina FORMAT

    Cele mai utilizate proprieti din aceast pagin, referitoare la forma de prezentare a formularului, sunt:

    Caption Titlul formularului. Apare n bara de titlu a acestuia. Nu trebuie confundat cu numele formularului. Implicit, dac proprietatea nu este completat, numele formularului se va folosi i ca titlu.

    Default View Tipul formularului, care poate fi Continous sau Single.

    Scroll Bars Specific dac exist sau nu bare de derulare, orizontale i/sau verticale.

    Record Selectors Specific dac exist sau nu n stnga nregistrrii, buton de selecie a acesteia.

    Navigation Buttons Specific dac exist sau nu n partea de jos a formularului butoane pentru accesarea anumitor nregistrri. Prin acesta se poate ajunge la prima sau la ultima nregistrare a formularului se consider ordinea de afiare i nu aceea a plasrii fizice a nregistrrilor n tabelele legate la nregistrarea precedent sau urmtoare sau la o nou nregistrare n

  • II-21

    vederea adugrii. De asemenea se afieaz numrul curent al nregistrrii, cte nregistrri sunt n formular i dac formularului i se aplic un filtru de selecie.

    Dividing Lines Specific dac exist sau nu linii de separare a nregistrrilor. Auto Resize Specific dac formularul i modific forma, prin tragere, dac se recalculeaz

    sau nu dimensiunile obiectelor care sunt cuprinse n acesta. Auto Center Specific dac se poziioneaz sau nu formularul la mijlocul ecranului. Border Style exist urmtoarele posibiliti:

    Sizable Formularul poate fi maximizat, minimizat sau i se poate schimba forma prin tragere de margini. None Nici una din facilitile de mai sus nu este valabil, i de asemenea nu are nici buton X de nchidere. Thin E ca Sizable, dar nu are margini de tragere. Dialog E ca None, dar are buton X de nchidere.

    Control Box Specific dac exist sau nu caseta de butoane din stnga barei de titlu. Min Max Button - Specific dac exist sau nu butoanele de maximizare/ minimizare n

    Control Box. Close Button Specific dac exist sau nu buton X de nchidere. Width Limea efectiv a formularului (nu a ferestrei de vizualizare a acestuia), n unitatea de

    msur stabilit n Windows | Control Panel | Regional Settings. Whats This Button Se poate seta pe Yes numai dac Min Max Button este No, i

    duce la introducerea n Control Box a butonului specific de Help assistant din MS Office. Picture Formularele pot avea eventual, o imagine de fundal, Background. Adresa fiierului

    care conine imaginea (sunt acceptate mai multe tipuri: bmp, ico, wmf, emf, dib) se introduce n aceast proprietate.

    Picture Type Se stabilete dac fiierul respectiv este ncapsulat (embedded) sau legat (linked). ncapsularea n mai multe formulare a aceluiai fiier grafic duce totui la ocuparea spaiului pentru fiecare fiier n parte.

    Picture Size Mode exist urmtoarele posibiliti: Clip imaginea este preluat la dimensiunile ei reale; Zoom imaginea va fi mrit pn la dimensiunea ferestrei formularului dar i pstreaz proporiile; Stretch Imaginea va fi mrit pentru a ocupa ntreaga fereastr dar nu i pstreaz proporiile.

    Picture Alignement Se stabilete unde se plaseaz n fereastra formularului imaginea grafic. Picture Tiling Setat pe Yes, duce la repetarea imaginii grafice pentru a ocupa ntreaga

    fereastr a formularului. Grid X, Grid Y Distana dintre liniile grilei de proiectare, n pixeli. Afiarea grilei de

    proiectare se face din View | Grid. Alinierea controalelor la aceast gril se face din Format | Snap To Grid. Pagina DATA, conine proprietile referitoare la datele formularului.

    Record Source Tabela sau cererea, de care este legat formularul. Filter Se poate introduce o expresie folosind regulile prezentate la cereri - care are rolul de a

    face o selecie a nregistrrilor din surs. Dac se creeaz un filtru prin meniul Records, atunci cnd formularul este n execuie, atunci acesta va fi introdus automat n aceast proprietate.

    Order By Se introduc cmpurile dup care se sorteaz nregistrrile din formular (aranjarea tuturor nregistrrilor din formular dup ordinea ascendent sau descendent a unuia sau mai multor cmpuri). Dac se dorete sortare descendent se introduce dup numele cmpului respectiv un spaiu i DESC. Implicit se consider sortarea ascendent. Dac sunt mai multe cmpuri de sortare, acestea se separ prin virgul. Ca i la filtre, dac se stabilete un cmp de sortare prin meniul Records, atunci cnd formularul este n execuie, acesta va fi introdus automat n aceast proprietate. Crearea unui filtru sau al unui criteriu de sortare nu implic i activarea automat a acestuia. Activarea sau dezactivarea lor se poate face n timpul execuiei formularului n dou moduri:

    Fie din meniul de comenzi prin Records | Apply Filter, Sort sau Records | Remove Filter, Sort;

  • II-22

    Fie din cod VBA, prin setarea la True sau False, a proprietilor dinamice ale formularului: FilterOn OrderByOn

    Allow Filters, Allow Edits, Allow Deletions, Allow Additions Setate pe No, blocheaz comanda respectiv.

    Record Locks Se ntlnete i la cereri. Are rolul de a stabili ce nregistrri se blocheaz, cnd se lucreaz n reea i mai muli utilizatori acceseaz aceeai tabel sau cerere ncercnd s scrie n ea. Blocarea se refer la faptul c numai primul utilizator care modific zona respectiv poate s o fac, ceilali fiind Read Only. Posibilitile de blocare oferite de sistem sunt:

    No Loks nregistrrile nu sunt blocate, toi utilizatorii putnd scrie n acelai timp n aceeai nregistrare, ceea ce face ca sistemul s cear ce modificare rmne valabil, printr-un mesaj specific. Se folosete cnd aplicaia nu este folosit n reea; All Records ntreaga tabel este blocat, numai un singur utilizator avnd dreptul s efectueze modificri, ceilali putnd numai s citeasc din tabela respectiv; Edited Record Numai nregistrarea curent este blocat. Practic se blocheaz o zon de 2KB, ceea ce poate duce i la blocarea altor nregistrri;

    Pagina OTHER Pop Up Specific dac fereastra formularului va fi sau nu deasupra celorlalte ferestre. Modal Un formular modal se caracterizeaz prin faptul c, o dat preluat controlul, nu l mai

    cedeaz dect la nchiderea lui. Acest lucru poate fi valabil numai pentru aplicaia Access sau pentru toate aplicaiile aflate n execuie n momentul respectiv.

    Cycle Stabilete care este ordinea de accesare a nregistrrilor cnd se trece cu sau de la un control la altul i se ajunge la ultimul control din seciunea de detail, stabilit conform ordinii tab (care se lanseaz din meniul contextual al formularului i prin care se fixeaz care este ordinea de parcurgere a controalelor dintr-o seciune atunci cnd se trece de la un control la altul prin tastatur cu sau ). Dac proprietatea este setat pe All Records, se va continua cu nregistrarea urmtoare, iar dac este Current Record, se va reveni la primul control din aceeai nregistrare.

    Menu Bar Numele unei alte bare de meniu creat de proiectant, care s nlocuiasc meniul standard din Access.

    Toolbar Numele unei alte bare de pictograme creat de proiectant, care s nlocuiasc bara de pictograme standard din Access, care apare la execuia unui formular, i anume Form View.

    Shortcut Menu Specific dac se va permite sau nu apariia meniului contextual al formularului.

    Shortcut Menu Bar Numele unui meniu contextual creat de proiectant, care s nlocuiasc pe cel standard care apare la execuia unui formular.

    II.2.2.1.c) Evenimentele formularului Pagina Even

    Cele mai importante sunt: On Open i On Close Se produc la

    deschiderea, respectiv nchiderea formularului. Aceste evenimente pot fi anulate, adic nu se va

    mai produce deschiderea/ nchiderea formularului. n general se folosesc pentru ca utilizatorul s confirme aceste aciuni.

    innd cont c sunt prima/ ultima aciune care se produce n "existena" unui formular, ele pot fi folosite i la anumite setri necesare n codul VBA. Exemplu. On Open Pentru a se crea o aciune care s se execute la deschiderea unui formular (adic se ataeaz o metod evenimentului On Open) se va selecta

  • II-23

    n pagina de evenimente a obiectului FORM, "Event Procedure". Prin apsarea pe cele trei puncte din dreapta, se va lansa un Wizard care va afia modulul de cod VBA al acestui formular, n care va nsera prima i ultima linie a procedurii corespunztoare acestui eveniment, urmnd ca utilizatorul s scrie secvena de instruciuni n cod VBA.

    ' procedura ataat evenimentului open a formularelor Private Sub Form_Open(Cancel As Integer) ' Se folosete MsgBox ca funcie. ' Ea va afia o caset cu mesajul respectiv i cu doua butoane, Yes i No ' Dac utilizatorul apas pe:

    ' Yes funcia va ntoarce valoarea "vbYes" ' No funcia va ntoarce valoarea "vbNo" If MsgBox("Doriti deschiderea formularului.... ?", vbYesNo) = vbYes Then ' Ramura TRUE a instruciunii IF.... utilizatorul a apsat pe Yes. ' Folosirea MsgBox ca procedur pentru afiarea unui mesaj

    MsgBox "Se deschide formularul.... " Else ' Ramura FALSE a instruciunii IF.... utilizatorul a apsat pe No.

    Cancel = True ' Se anuleaz deschiderea formularului prin _ setarea la TRUE a parametrului CANCEL al procedurii MsgBox "Ati anulat deschiderea formularului... "

    End If End Sub

    O procedur eveniment va avea un nume care va conine numele obiectului (n cazul nostru FORM) i numele evenimentului (OPEN), pe care sistemul l va crea automat. Procedurile eveniment pot avea parametri (declarai n aceeai linie de definire a procedurii, ntre paranteze rotunde), pe care sistemul i va introduce dac este cazul.

    Aceti parametri pot fi de: intrare conin nite valori pe care sistemul i ncarc n funcie de un anumit context i care pot fi folosii n interiorul procedurii; ieire care vor fi eventual setai de utilizator, pentru ca la terminarea procedurii (instruciunea END SUB sau EXIT) sistemul s execute anumite aciuni.

    Astfel parametrul CANCEL, atunci cnd apare ntr-o procedur eveniment, arat c dac se va seta pe TRUE, evenimentul respectiv va anula aciunea care l-a produs, iar dac se seteaz pe FALSE, atunci aciunea care a declanat evenimentul se va termina normal.

    On Load i On Unload Se produc la ncrcarea n memorie a formularului, respectiv eliberarea spaiului ocupat de el. Se produc dup, respectiv nainte de On Open/ On Close. Nu pot fi anulate.

    Before Update Se produce dup modificarea unei nregistrri, atunci cnd se iese din nregistrarea respectiv. Poate fi anulat. Se folosete n general pentru a verifica anumite corelaii ntre cmpurile unei nregistrri i a nu permite utilizatorului trecerea la o alt nregistrare (deci modificrile efectuate) dac acestea nu sunt corespunztoare (se va face parametrul CANCEL=TRUE).

    Exemplu. BeforeUpdate Private Sub Form_BeforeUpdate(Cancel As Integer)

    If (Me!DataNasterii.Value < Me!DataAbsolvireLiceu) And _ (Me!DataAbsolvireLiceu

  • II-24

    formularului i care, n proprietatea VALUE, conin datele din cmpurile respective ale nregistrrii curente. Proprietatea VALUE fiind implicit la controalele text box, poate fi omis.

    After Update Se produce dup modificarea unei nregistrri, atunci cnd se iese din nregistrarea respectiv. Acest eveniment nu se poate anula, modificarea devenind definitiv.

    Se folosete n general pentru a calcula anumite valori i a le introduce n controale, la terminarea modificrilor dintr-o nregistrare (n formulare single, de obicei). Exemplu. AfterUpdate Avem un single formular legat la o tabel care conine dou cmpuri, legate la rndul lor de controale tip text box, cu numele Cantitate i Pret. Al treilea control, Valoare, nu este legat de tabel i este Read Only, nepermind utilizatorului s modifice datele n el. Totui dorim ca n cazul n care cantitatea sau preul se modific, s se schimbe corespunztor i valoarea din acest control, la terminarea modificrii nregistrrii.

    Private Sub Form_AfterUpdate () Me!Valoare = Me!Cantitate * Me!Pret ' Proprietatea Value a controalelor nu este obligatorie, fiind implicit. Se poate folosi aceast proprietate att pentru citirea, ct i pentru introducerea datelor n control, funcionarea fiind deci asemntoare cu a unei variabile.

    End Sub Dac un control nelegat se gsete n seciunea Detail a unui formular (sau raport) atunci valoarea care se gsete n el (calculat cu datele din nregistrarea curent cea care are cursorul) va fi afiat n toate detail-urile care se vd pe ecran (deci aceeai valoare la toate nregistrrile). Din aceast cauz s-a specificat un formular single.

    Totui, exemplul prezentat, dei corect, este cam ilogic. Gndii-v de ce!! Before Insert i After Insert Este la fel ca cele dinainte dar se produc numai cnd se introduc

    nregistrri noi. On Current Se produce cnd se trece pe o alt nregistrare. Se folosete n general, pentru a

    efectua calcule, la ntrarea ntr-o nregistrare, cu datele din aceasta. Exemplu. On Current La aceeai aplicaie prezentat mai sus, dorim s facem acelai calcul al valorii i la intrarea n nregistrare.

    Private Sub Form_Current () Me!Valoare = Me!Cantitate * Me!Pret

    End Sub Dac nu am fi creat aceast metod pentru acest eveniment, atunci la intrarea ntr-o nregistrare am fi avut n controlul Valoare, rezultatul calculului anterior.

    On Timer Se produce dac proprietatea Timer Interval este diferit de zero. Dac n Timer Interval este o valoare numeric, atunci acesta va specifica, n milisecunde, intervalele de timp la care se lanseaz procedura eveniment introdus la On Timer. Exemplu. On Timer

    Private Sub Form_Timer () ' Se va executa la intervalul de timp care se gseste n proprietatea _ TimerInterval de pe pagina de evenimente a formularului. Aceasta _ avnd valoarea 60.000, nseamn c aceast procedur se va _ executa la fiecare minut.

    MsgBox "A mai trecut 1 minut !!" End Sub On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move Se produc la

    aciunea respectiv a mouse-ului pe formular. On Key Down, On Key Up, On Key Press Se produc la aciunea respectiv a tastaturii. On Error Se produce la o eroare datorat datelor. On Got Focus, On Lost Focus Se produc la primirea, respectiv pierderea focusului

    formularului. II.2.2.1.d) Metodele formularului

    Activarea acestor metode se face de obicei din modulul de cod VBA ataat formularului. n continuare prezentm cele mai utilizate metode ale formularelor.

  • II-25

    Metoda Refresh Metoda Refresh va determina o remprosptare a unui formular cu datele actualizate ale tabelei

    ataate, dac aceasta se modific printr-un proces din afara modificrilor directe efectuate n tabel prin formular (acestea evident vor fi imediat sesizate).

    Un astfel de proces se poate efectua de exemplu dac: printr-o cerere aciune se modific tabela ataat formularului; aplicaia ruleaz ntr-un mediu multiutilizator (ntr-o reea de calculatoare) i un alt utilizator modific aceast tabel.

    Refresh se poate face i direct n view prin acionarea comenzii Records | Refresh. Aceast aciune sistemul o face i automat la un interval de timp care se stabilete pentru toate formularele deschise, prin completarea proprietii bazei de date Refresh Interval (n sec) din meniul Tools | Advanced. Evident, cnd se dorete o remprosptare imediat a afiajului unui formular, se va folosi metoda sus amintit. Metoda aceasta acioneaz numai asupra setului de nregistrri care exista la lansarea formularului, ea neavnd efect asupra:

    nregistrrilor noi introduse sau terse; cererilor folosite n diferite controale. (De exemplu avem un control combo Box care afieaz date dintr-o alt tabel care se modific dup lansarea formularului. Metoda refresh nu va actualiza acest control.)

    Metoda Requery Metoda Requery acioneaz ca i metoda Refresh dar este mult mai puternic deoarece ea re-

    execut toate cererile aferente formularului. Aceast metod este destul de lent, deoarece ea se comport ca i cum s-ar lansa din nou formularul (inclusiv poziionarea focusului pe prima nregistrare). Metoda Recalc

    Aa cum am mai artat, ntr-un formular pot exista controale calculate, care vor afia expresii n care pot interveni date din alte controale legate la cmpurile tabelei ataate formularului. n momentul n care se modific definitiv (se iese din control sau se trece la alt nregistrare) un control (cmp), se vor reface i calculele controalelor calculate n care acesta intervine. Sunt ns cazuri n care este necesar refacerea imediat a calculelor controalelor calculate, fr a modifica poziia cursorului dintr-un control. Metoda Recalc face aceast aciune. Deci ea se comport ca i cum s-ar da o comand de trecere pe un alt control i o alt nregistrare, cu meninerea ns a cursorului pe poziia sa. Metoda Set Focus

    Cu aceast metod se poate muta focusul (cursorul) ntr-un formular, care evident este n execuie. n general este folosit pentru mutarea focusului ntre dou formulare care se afl n execuie.

    Exemplu. Forms("form1").SetFocus Aceast instruciune va ceda cursorul (focus) formularului form1, evident cu condiia ca acesta s

    fie deschis (obiectul Forms recunoate numai formularele care sunt deschise!). II.2.2.1.e) Obiectele seciunilor formularului: Detail, Form_Header, Form_Footer

    Toate aceste seciuni ale formularului au aceleai proprieti i evenimente. Pagina de Date, evident, nu are proprieti.

    Configurarea acestor obiecte este puin uilizat n practica proiectrii formularelor. Singura proprietate mai folosit este Back Color prin care se stabilete culoarea de fundal a unei seciuni. II.2.2.1.f) Referirea Subformularelor i a controalelor sale

    Un Subformular este un obiect inclus ntr-un formular, care conine: Proprieti specifice, ce pot fi referite dup schema uzual. De exemplu: MsgBox Me.SF.RecordSource va afia numele tabelei legate de Subformularul cu

    numele SF, ce se gsete n formularul n al crui cod se afl instruciunea. Controale, a cror referire se face prin utilizarea unei proprieti specifice unui Subformular i

    anume FORM.

  • II-26

    De exemplu, dac n formularul deschis DesX, exist un Subformular cu numele SFm, n care exist un control text box TBB, atunci introducerea unei valori n acest control printr-o instruciune aflat n modulul general de cod va fi: Forms!DesX!SFm.Form!TBB=100 II.2.2.2. Obiectul Control Text_Box (caseta de text)

    Cele mai utilizate tipuri de controale, folosite n proiectarea formularelor (ca i a rapoartelor) sunt prezentate n continuare prin prisma proprietilor, metodelor i evenimentelor lor.

    Text Box este cel mai utilizat control folosit att n formulare ct i n rapoarte. Este un control care se poate lega la un cmp al unui tabel. Reprezint practic o caset n care se vor vizualiza datele din cmpul de care este legat,

    permind actualizarea acestora. De obicei este nsoit de un control label (etichet), n care se va specifica ce reprezint datele din Text Box. II.2.2.2.a) Proprietile controlului Text Box

    Prezentm n continuare proprietile cele mai utilizate ale acestui control, cu observaia c exist o serie de proprieti pe care le-am mai studiat anterior (la obiectul Form). Pagina FORMAT

    Pagina de Format conine proprietile prin care se configureaz formatul i stilul textului din caset.

    Font Name Felul fontei, adic tipul de liter folosit. Fontele care accept diacriticele romneti sunt cele cu terminaia 'CE'. (Alt font care accept caractere romneti este i 'MS Sans Serif'.) Pentru a se putea lucra cu diacritice romneti, tastatura trebuie setat corespunztor, pentru a doua limb, n Control_Panel | Keyboard.

    Fore Color Culoarea fontei. Font Size Mrimea n pixeli a fontei. Font Weight Grosimea fontei Font Italic Litera aplecat. Font Underline Subliniere. Text Align Alinierea textului n csu Border Style, Border Color, Border Width Se

    folosesc pentru configurarea marginii controlului. Special Effect Stabilete un tip standardizat de margine pentru control.

    Uneori setarea acestei proprieti are efect i asupra celor trei proprieti de mai sus. Exist 6 tipuri:

    Flat plat; Raised n relief; Sunken ngropat; Etched poansonat, zgriat; Shadowed cu umbr; Chiseled subliniat.

    Back Color Culoarea fundalului. Back Style Dac fundalul este sau nu transparent. n cazul transparenei se va vedea obiectul

    de sub control, de obicei culoarea seciunii n care se gsete acesta. n bara de meniu, n format, exist dou proprieti, care atunci cnd sunt activate vor seta toate obiectele selectate n momentul respectiv, n felul urmtor:

    Bring to Front aduce obiectele la suprafa; Send to Back duce obiectele la fund; Prin aceste proprieti se poate stabili cum "se vd" obiectele suprapuse.

    Aceast proprietate poate fi folosit pentru a se marca explicit care este controlul n care se gsete cursorul (este activ). Aceasta se va realiza prin folosirea unei culori unice pentru controlul activ. Pentru aceasta se procedeaz astfel:

    Se face controlul cu Back Color culoarea controlului activ (de exemplu verde) i Back Style transparent.

  • II-27

    Se creeaz un control grafic, Rectangle, "umplut" cu culoarea pe care vrem s o aib controlul (de exemplu galben) i de dimensiunile acestuia, care se aeaz dedesubt.

    n felul acesta controlul fiind transparent, va avea culoarea dreptunghiului de dedesubt (galben), iar cnd va primi focusul, culoarea setat pentru el (verde).

    Toate proprietile prezentate mai sus se pot configura direct de pe bara cu pictograme "Formatting".

    Format n csua de text avem o dat de tipul cmpului de care controlul este eventual legat. Avem posibilitatea s alegem ntre mai multe tipuri de afiare specifice tipului respectiv de dat. De asemenea acesta se poate crea i cu caracterele specifice de construire a formatelor.

    Decimal Places Numrul de zecimale al datelor de tip numeric. Visible Permite ca un control construit s poat fi fcut vizibil sau nu, n funcie de un anumit

    context. Scroll Bars Exist posibilitatea ca acest control s poat conine mai multe linii de date. n

    acest caz este indicat s i se ataeze bara derulant vertical. Can Grow, Can Shrink Permite ajustarea controlului pe vertical, n cazul n care n control

    sunt un numr variabil de linii. Aceste proprieti sunt valabile numai la tiprire nu i la afiarea pe ecran. Deci ele sunt folosite n special la rapoarte.

    Left, Top, Width, Height Poziia (relativ la seciunea unde se gsete) i mrimea controlului pe ecran, dat n cm sau inches, n funcie de cum e setat unitatea de msur n Windows. Ele se vor completa automat n momentul n care se va "aeza" pe ecran controlul. Access folosete i celelalte setri din Widows | Control Panel | Regional Settings ca punctul zecimal, formatul pentru or i dat, perioada anului din 2 cifre etc. Unitile de msur folosite n Access sunt:

    Pixel unitate dependent de rezoluia ecranului. Inches sau Cm n funcie de setarea din Windows. Se folosete de obicei n paginile de

    proprieti 1 Inch=2,54 cm. Punct 72/ inch Twips 1440/inch, 567/cm, 20/punct. Se folosesc cnd se introduc prin VBA dimensiuni pentru

    controale. Pagina DATA

    Control Source Numele cmpului (din tabela sau cererea ataat la formular sau raport) de care se leag controlul. Este cea mai important proprietate a controlului.

    Este posibil i legarea controlului de o expresie (cmp calculat). Pentru aceasta se va pune la Control Source. n felul acesta se pot introduce calcule cu cmpurile din nregistrare, se pot folosi funcii standard sau utilizator (publice, din obiectul Module) sau chiar funcii agregate de domeniu cu date din alte tabele. Exemplu. Avem un formular care n zona de Detail are dou controale legate, Pret i Cantitate i un control Valoare, care la Control Source are: =[Pret]*[Cantitate]. n acest fel mereu vom avea n controlul Valoare produsul datelor din celelalte dou controale, care la rndul lor vor avea valorile cmpurilor din nregistrrile tabelei ataate.

    De asemenea putem lucra cu controale nelegate (unbound). n acest caz de obicei vom introduce date n control prin cod VBA, prin proprietatea dinamic (nu se poate seta dect cnd formularul este n execuie) Value, care este implicit (dac nu se specific explicit nici o proprietate atunci cea implicit Value va fi folosit). Aceast proprietate este Input / Output. n faza de proiectare, n interiorul controlului este afiat valoarea proprietii Control Source.

    Input Mask, Default Value, Validation Rule, Validation Text Funcioneaz la fel ca la proprietilor tabelelor. Dac nu se completeaz se preiau setrile fcute cmpului respectiv la crearea tabelei. Dac se seteaz n formular aceste proprieti atunci acestea sunt valabile numai n acest obiect (formular), nemodificndu-se proprietile tabelei.

  • II-28

    La Default Value, Validation Rule, Validation Text putem s ne referim i la alte nume de obiecte accesibile, spre deosebire de tabele n care nu puteam s ne referim la alt cmp.

    Enabled, Locked: Permisiunea de intrare n control, respectiv de modificare a datelor din el. Deci exist posibilitatea s se creeze controale Read Only (numai citete). Sunt mai multe posibiliti:

    Dac Enabled = Yes i Locked = No putem s intrm n control (poziionez cursorul n control) i s modificm datele din el;

    Dac Enabled =No nu putem s plasm cursorul n control (evident nici s modificm); Dac Enabled = Yes i Locked = Yes se poate poziiona cursorul n control dar nu se pot

    modifica datele; Dac Enabled = No i Locked = No (nu are sens) controlul apare ters;

    Pagina OTHER Name Nume control. Acesta este numele

    obiectului pe care l folosim cnd vrem s ne referim la acest control. Dei nu este obligatoriu este bine ca n cazul controlului legat numele lui i al cmpului s fie acelai.

    Status Bar Text Cnd focusul ajunge n control, pe bara de stare (care se gsete n partea de jos a ecranului) va apare textul introdus aici.

    Tab Stop n momentul n care se termin introducerea datelor ntr-un control, focusul se va poziiona pe urmtorul control din seciune care are setat aceast proprietate cu Yes. Ordinea de parcurgere a controalelor se stabilete prin comanda Tab Order. Aceasta se gsete n meniul contextual sau n View i permite aezarea controalelor din seciuni n ordinea dorit prin "tragere".

    Auto Tab Trecerea de la un control la altul se face cnd: se apas pe tasta sau . dac Auto Tab = Yes atunci trecerea la urmtorul control se va face i automat n momentul n care s-au completat toate datele din acesta conform formatului specificat. Astfel dac avem un control legat la un cmp de tip text cu lungimea de 3 caractere, dup introducerea celui de-al treilea caracter, fr s se apese pe sau se va trece automat la urmtorul control stabilit prin ordinea tab.

    Enter Key Behavior Dac aceast proprietate este = New Line in Field, atunci la apsarea lui cursorul se va poziiona pe urmtoarea linie din control, iar trecerea la urmtorul control se va face numai prin apsarea tastei . Evident proprietatea are sens dac controlul are mai multe rnduri.

    Shortcut Menu Bar Se poate crea un meniu contextual specific pentru control. Acesta se face prin comanda Customize.

    Control Tip Text Va apare textul introdus n aceast proprietate cnd se poziioneaz mouse-ul deasupra controlului.

    Allow Auto Correct Setat pe Yes, va determina efectuarea automat a coreciilor textului introdus, conform specificaiilor stabilite prin meniul Tools | AutoCorrect. Proprietile implicite ale controlului Text Box

    Generarea obiectelor dintr-o clas de obiecte se face prin setarea corespunztoare a proprietilor obiectului i prin ataarea de metode evenimentelor. n momentul n care se creeaz o clas de obiecte se stabilesc practic care sunt proprietile, metodele i evenimentele obiectelor care sunt create din aceasta. Obiectele provenite dintr-o clas vor avea evident aceleai metode, evenimente i tipuri de proprieti. Ele vor forma o colecie de obiecte, care este privit ca un tablou cu o dimensiune (vector), n care elementele sunt indexate (de la 0). Crearea controlului Text Box

  • II-29

    se face prin generarea acestuia din clasa de obiecte cu acelai nume, prin luarea i plasarea controlului din ToolsBox. n momentul crerii acestui obiect, evident proprietile lui trebuie setate la anumite valori, implicite (default), urmnd ca proiectantul s le personalizeze ulterior n funcie de contextul n care va fi folosit. Aceste proprieti implicite se pot modifica prin acionarea n caseta tab: Default Text Box, care se poate obine prin selecia de pe ToolsBox a controlului i acionarea pictogramei de proprieti.

    Evident la generare, controlul trebuie s primeasc un nume, unic, care va fi constituit din numele controlului plus un numr de ordine n cadrul formularului sau raportului unde este plasat.

    Din proprietile implicite mai interesante sunt: Auto Label yes, ataeaz o etichet controlului; Add Colon yes, eticheta se va termina cu dou puncte; Label X, Label Y poziia etichetei fa de control;

    II.2.2.2.b) Proprietile dinamice ale controlului Text Box Proprietile unui obiect pot fi statice i/ sau dinamice. Proprietatea static este proprietatea care se poate modifica cnd formularul este n proiectare, prin

    caseta tab. Proprietatea dinamic este proprietatea care poate fi modificat n momentul cnd obiectul este n

    execuie, n general prin cod VBA, lansat de obicei printr-o procedur eveniment. Majoritatea proprietilor sunt att statice ct i dinamice. Anumite proprieti sunt numai

    dinamice, ele neregsindu-se n caseta tab a controlului. Dintre proprietile dinamice, cea mai important este VALUE. Aceast proprietate este implicit,

    numele ei putnd fi omis. Ea este Input/ Output, putnd fi deci i citit i scris. Reprezint valoarea care se gsete n control. Dac acesta este legat, aceast valoare se va gsi i n cmpul ataat. Dac controlul este calculat, atunci Value nu mai poate fi dect citit.

    SelLength, SelStart, SelText Se folosesc pentru a manevra cursorul i valoarea din interiorul unui control Text Box. Sunt proprieti Input/ Output.

    SelStart reprezint poziia de start a cursorului n control; SelLength reprezint lungimea textului selectat din control; SelText reprezint valoarea textului selectat.

    Exemplu. Urmtoarea secven de instruciuni nlocuiete n controlul UM, primele 3 caractere dac sunt "xxx" cu "buc".

    UM.SetFocus ' plaseaz focusul n cursor Me!UM.SelStart = 0 ' numerotarea ncepe de la 0 Me!UM.SelLength = 3 ' selecteaz primele 3 caractere din control _ (0, 1, 2) If Me!UM.SelText = "xxx" Then Me!UM.SelText = "buc" ' proprietatea SelText folosit i Input i Output

    II.2.2.2.c) Evenimentele controlului Text Box Before Update Acest eveniment se produce dup ce

    a avut loc o modificare a datelor n control, dar care nu este definitiv, putnd fi anulat prin setarea parametrului procedurii eveniment ataate, Cancel=True. n acest caz, la terminarea procedurii eveniment, focusul rmne n control pn cnd utilizatorul introduce o alt valoare care nu mai produce Cancel=True.

    Acest eveniment se folosete de obicei pentru a executa o metod mai complex de verificare a datelor introduse n control, care depete posibilitile oferite de proprietatea Validation Rule.

    After Update Se produce imediat dup evenimentul Before Update, modificrile fiind acum ns definitive, nemaiputnd fi anulate. Se folosete cnd valoarea introdus aici va furniza datele necesare calculelor din alte controale.

    On Change Se produce dup fiecare tastare n interiorul controlului. On Enter i On Exit Se produc la intrarea i la ieirea din control. Got Focus i Lost Focus Se produc la primirea/ pierderea cursorului n/ din control.

  • II-30

    On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move Se produc la aciunea respectiv a mouse-ului pe control.

    On Key Down, On Key Up, On Key Press Se produc la aciunea respectiv a tastaturii cnd focusul se gsete n control. II.2.2.2.d) Metodele controlului Text Box

    Metodele cele mai folosite sunt: Set Focus plaseaz focusul n controlul text. Requery, Recalc acelai efect ca i la metodele similare de la formulare, dar referitoare numai

    la controlul asupra cruia se aplic metoda. Exemplu. Before Update, After Update, Set Focus

    n formularul de mai sus dorim ca n cmpul "Cantitate" s avem o valoare n intervalul: [10. 000.. 100. 000] dac "UM" = buc; [100.. 10. 000] dac "UM" = Kg; [1.. 10] dac "UM" = Tone. Dac "UM" nu e completat corespunztor atunci se va introduce "null" la "Cantitate" i "UM" i se

    va trimite focusul n controlul "UM". Private Sub Cantitate_BeforeUpdate (Cancel As Integer)

    If Me!UM = "buc" Then If Me!Cantitate>=10000 And Me!Cantitate

  • II-31

    Me!UM. SetFocus ' Metod a controlului UM, prin care acesta _ preia focusul MsgBox "Completati corect mai intii UM"

    End If End Sub

    II.2.2.3. Obiectul Control Combo_Box (lista ascuns)

    Acest control este asemntor cu Text Box, dar are posibilitatea derulrii unei liste din care se pot prelua datele care se introduc.

    n momentul cnd ntr-o tabel un cmp a fost creat cu proprietatea Look Up, iar acel cmp e legat ntr-un formular la un control Combo Box, proprietile definite n tabel nu trec automat i n formular. Acest lucru se face ns automat dac formularul este creat cu WIZARD-ul de formulare.

    Controlul Combo Box are aceleai proprieti i evenimente ca ale lui Text Box. n plus mai sunt proprieti i evenimente, care se refer la lista ascuns. II.2.2.3.a) Proprietile specifice controlului Combo Box n pagina DATA sunt:

    Row Source Type Tipul sursei de date care va fi afiat n lista derulant.

    Aici se folosete de obicei: Table/ Query cmpuri din alt tabel sau cerere (sau o

    cerere introdus direct n SQL); Value List list de valori ca n exemplu; Row Source n cazul n care Row Source Type= Table/ Query este numele unei tabele, cereri sau direct o instruciune SQL care genereaz o

    cerere (ca la legarea formularului la o tabel); Value List este o list de valori, separate prin Bound Column Numrul coloanei de legtur (datele din aceast coloan vor fi preluate ca

    valoare pentru control) Limit To List Dac proprietatea este Yes nu se vor putea introduce n control dect datele care

    se gsesc n lista derulant iar dac este No, se pot introduce i alte date dect cele din list. Auto Expand Dac proprietate este Yes, atunci se caut i se afieaz cea mai apropiat

    denumire din list care s aib n partea de nceput caracterele introduse n control, pn n acel moment, de la tastatur. n pagina FORMAT sunt urmtoarele proprieti:

    Column Count Numrul de coloane care apar la desfacerea listei.

    Column Head Dac se afieaz sau nu denumirea coloanelor.

    Column Widths Limea coloanelor. Se separ cu . List Rows Numrul de rnduri care se afieaz cnd se desface lista. Dac lista are mai multe

    rnduri dect sunt setate a se afia, vor apare barele de derulare verticale. List Width Limea listei derulante. Dac aceasta este mai mic dect suma tuturor coloanelor

    afiate, vor apare barele de derulare verticale. Setat pe Auto, limea listei va fi la fel ca limea controlului Combo Box. Toate dimensiunile se dau n unitatea de msur setat n Windows. Aceast caracteristic este general n tot mediul Access. Reamintim c n VBA, dimensiunile sunt cerute n Twips. Exemplu. ntr-un formular se gsesc dou controale Combo Box, cu numele: CFm i CControl.

    La deschiderea formularului (evenimentul Open) se va introduce n lista ascuns a lui CFm proprietatea RowSource numele tuturor formularelor deschise din acel moment.

    La introducerea unei valori n CFm (evenimentul AfterUpdate a lui CFm), se va introduce n lista ascuns a lui CControl proprietatea RowSource numele tuturor controalelor din formularul al crui nume este n CFm.

  • II-32

    Private Sub Form_Open(Cancel As Integer) ' La deschiderea formu