Posibilitati de Construire Si Automatizare a Bazelor de Date Microsoft Access

POSIBILITĂȚI DE CONSTRUIRE ȘI AUTOMATIZARE A BAZELOR DE DATE MICROSOFT ACCESS UTILIZaND MACROCOMENZILE sI MEDIUL VBA

INTRODUCERE

Acum, când era informației este în deplină desfășurare se simte tot mai acut nevoia de a face schimb de informații între calculatoare aflate în apropiere sau la distanță. Acest deziderat raportat la nevoile Armatei Române de schimb de informații trebuie să ia forma unui sistem informatic integrat, a unei rețele de calculatoare interconectate pe structura Sistemului de Transmisiuni al Armatei Române.

Am abordat un subiect, cred eu delicat, deoarece până acum, nu mulți au abordat în cadrul unei lucrări de asemenea factură (lucrare de diplomă. n.a.), subiecte derivate din nevoile de implementare a industriei IT în structurile militare, și m-am oprit asupra Access-ului deoarece Access-ul poate fi implementat foarte ușor în mediul militar la toate nivelele ierarhice și poate ajuta la elaborarea deciziei oferind prin facilitățile sale de dezvoltare a aplicațiilor de gestiune de bunuri, date și informații, rezultate concludente și neredundante, în timp util, și pentru că în cadrul cursului de informatică din anul II am studiat Access-ul doar până la nivel utilizator iar această temă a venit ca o continuare a ceea ce am studiat anterior.

Un alt motiv pentru care am ales această lucrare a fost acela că nu trebuie să dețineți decât niște cunoștințe minime despre Windows, să fi lucrat cu dosare organizate într-un anumit mod, să fi avut un loc de organizare a datelor și informațiilor într-un anumit fel, pentru ca să puteți să folosiți o bază de date creată și automatizată în Microsoft Access. Bineînțeles o să puteți extrage din această bază de date rezultatele în forma și conținutul proiectat de programator.

Chiar dacă această lucrare nu își propune să ajungă până în sferele cele mai înalte ale programării în VBA, ea face o trecere în revistă a macro-urilor și o dezvoltare pe larg a mediului VBA, gravitând în jurul aplicației practice descrisă pe larg în ultima parte a acestei lucrări. Prin proiectarea și dezvoltarea de aplicații în VBA se poate face aproape orice, datorită faptului că posibilitățile oferite de VBA sunt practic nelimitate. VBA poate fi tratat și ca un program de sine stătător cu un cod sursă propriu, care folosește doar formele Access-ului. Tot în VBA se poate crea o interfață simplă, ușor de utilizat de către cei care nu dețin cunoștințe vaste în domeniul calculatoarelor.

Cu toate limitele sale, îmi doresc ca această lucrare să ofere, dacă nu o soluție, măcar o idee de rezolvare de rezolvare a problemei, idee ce poate fi preluată și dezvoltată de un grup de lucru și nu de un individ, cum este obligatoriu pentru întocmirea lucrării de diplomă.

I.– BAZE DE DATE

I.1. CONSIDERAȚII GENERALE

Pentru prelucrarea eficientă a datelor, pe calculator, este necesară o organizare a lor, activitate la fel de importantă ca și realizarea programelor. Organizarea datelor cât și realizarea programelor nu se pot suplini una pe cealaltă, între ele existând o relație cu implicații directe asupra rezultatelor. Fără o structurare eficientă a datelor și prelucrarea performantă a acestora rezultatele nu pot fi deosebite.

Nu putem începe fără a face o delimitare strictă între date, cunoștințe și informații:

Datele sunt definite prin trei elemente: identificator, atribut și valoare.

Cunoștințele sunt informații simple sau agregate pe care le dobândim de-a lungul timpului despre obiecte, fenomene sau procese din lumea înconjurătoare.

Informația reprezintă un mesaj cu caracter de noutate ce intervine pentru înlăturarea unei nedeterminări.

Această secțiune tratează în mod expres partea de organizare a datelor, care din punct de vedere informatic are două părți distincte:

Organizarea datelor în memoria internă a calculatorului în structuri de tip stivă, listă, coadă și decoadă.

Organizarea datelor în memoria externă a calculatorului în structuri de tip fișier și bază de date.

Organizarea datelor în memoria externă a calculatorului a parcurs, de-a lungul timpului mai multe etape:

Organizarea în fișiere,

Organizare în fișiere cu legături,

Organizare în baze de date.

O bază de date, empiric, poate fi definită ca un ansamblu de date elementare sau structurate, accesibile unei comunități de utilizatori, mai concret, o bază de date este un ansamblu de date și fișiere intercorelate, ce conțin nucleul de date necesar unei activități.

Conform dicționarului „baza de date (database)” se definește ca o colecție de informații corelate despre un subiect, organizate într-o modalitate utilă care oferă o bază sau un fundament pentru procedurile de regăsire a informațiilor, de apreciere si de luare de decizii [1, p.127]. Orice colecție de informații care servește acestor scopuri este considerată o bază de date chiar dacă informațiile nu sunt păstrate pe un calculator. De fapt, predecesorii importanți ai sofisticatelor sisteme de baze de date utilizate în prezent în afaceri au fost fișiere ținute pe foi indexate și păstrate în fișete. Informațiile sunt de obicei împărțite în înregistrări de date, fiecare având unul sau mai multe câmpuri.

Un sistem de gestiune a bazelor de date (SGBD) are două funcții principale:

de păstrare a informațiilor într-o bază de date si

de furnizare a lor, la cerere;

Un SGBD computerizat este un program ce prelucrează datele stocate pe calculator, iar un sistem relațional de gestiune a bazelor de date (SRGBD) este un sistem care lucrează cu informațiile dintr-o bază de date prin intermediul unor relații bine definite; baza de date gestionată de un astfel de sistem se va numi deci, implicit, baza de date relaționala (BDR).

Obiectivele principale ale bazelor de date sunt:

Centralizarea datelor, asigurată de unicitatea înregistrărilor, controlul centralizat al acestora și suprimarea redundanței.

Interdependența între date și prelucrări; o bază de date trebuie să fie o imagine a unei realități, care evoluează în timp și ea trebuie, în consecință actualizată permanent, actualizare ce nu trebuie să afecteze programele de prelucrare.

Realizarea de legături între entitățile de date, indispensabile pentru exploatarea eficientă a sistemului informatic.

Integritatea datelor, ce asigură fiabilitatea și coerența bazei de date

Apartenența la o listă de valori sau la un interval

Apartenența la un anumit format

Reguli de coerență cu alte baze de date

Securitatea datelor

Confidențialitatea datelor

Partajarea datelor.

I.2. scurt istoric al bazelor de date

Primele baze de date au fost dezvoltate pe sisteme mainframe și au fost manipulate de oameni special pregătiți pentru a gestiona aceste sisteme. Aceste baze de date au fost simple S.G.B.D.-uri. Primul S.G.B.D.R. a fost lansat de corporația Oracle și folosea sistemul de interogare S.Q.L. Deși versiunea originală a fost dezvoltată pentru alt tip de sisteme, Oracle a fost unul dintre primii furnizori care a lansat o versiune pentru sistemele PC pe sistem de operare MS-DOS.

La jumătatea anilor 80, firma Sybase a lansat propriul său S.G.B.D.R. numit S.Q.L.-Server. Acesta conținea biblioteci client pentru accesul la baza de date. Asigurând suportul pentru proceduri rezidente (mai târziu denumite proceduri stocate) și o interoperatibilitate sporită cu diverse tipuri de rețele S.Q.L.-Server a devenit un produs de succes cu precădere in mediile client/server.

Odată cu apariția sistemelor PC au apărut și primele aplicații de baze de date ce foloseau un singur fișier pentru a stoca toată informația din baza de date. Aceste aplicații erau de tip xBase, un limbaj care s-a răspândit foarte repede, fiind folosit în special pentru manipularea datelor. Sistemele care au folosit xBase au fost: dBase, FoxBase și FoxPro. Aceste programe rulau sub MS-DOS și, firesc, împărtășeau limitările acestuia. La începutul anilor 90, mai exact în 1992 firma Microsoft lansează aplicația Access, aplicație care se bazează în mare parte pe logica FoxPro, licență achiziționată de Microsoft în 1989. în scurt timp Access devine cea mai folosită aplicație de baze de date de tip „flat file” de pe sistemele PC. În prezent Access a ajuns la a VI-a versiune denumită Access 2002 integrată în pachetul de aplicații Microsoft Office XP. Începând cu această versiune s-a schimbat sistemul de stocare, aplicația fiind pregătită să fie scalată către o bază de date S.Q.L.-Server. Totodată începând cu versiunea a III-a i s-a adăugat un limbaj de programare dedicat numit Visual Basic for Applications (denumit în continuare VBA), bazat pe limbajul de programare Visual Basic. Prin intermediul VBA se pot manipula datele mai ușor, se pot folosi automatisme pentru diverse interogări, afișări, etc. Începând cu versiunea a V-a (Access 2000) limbajul integrat, VBA este compatibil cu VB, dar și cu limbajul folosit de Microsoft S.Q.L.-Server. La începutul anului 2003 compania Microsoft a anunțat lansarea Visual Studio for Applications, prima tehnologie care livrează capabilități de personalizare a aplicațiilor integrate în pagini Web. „Microsoft este încântată să poată livra prima tehnologie de personalizare a aplicațiilor” a declarat la lansarea produsului Yural Newman, vicepreședintele departamentului de dezvoltare al Microsoft. [18./news]

I.3. INTRODUCERE ÎN MICROSOFT ACCESS

I.3.1. Generalități

Microsoft Access vă oferă posibilitatea să manipulați datele în conformitate cu nevoile dumneavoastră specifice. Efortul inițial de creare a unei baze de date noi este adeseori mai, mare decât cel necesar pentru realizarea la computer a unei foi de calcul tabelar sau a unui document; totuși, eforturile dumneavoastră vor fi recompensate în momentul în care veți ajunge în situația să extrageți informațiile. Baza de date vă permite să localizați repede un anumit element, să comparați statisticile pe diverse perioade de timp, să interogați anumite categorii din datele dumneavoastră. Microsoft Access este un SRGBD; prin intermediul acestui produs, metodele de introducere ,de organizare si de prelucrare a datelor sunt foarte flexibile si ușor de implementat, putându-se stabili relații între categorii diferite de informații. Pentru exemplificare, vom analiza modul de organizare a unei baze de date relaționale teoretice. Să presupunem ca țineți informațiile necesare unității în mai multe locuri în birou: lista cu adresele personalului se află într-un document pe calculator, lista cu facturile de achiziție într-un tabel, informațiile despre procesul de instrucție într-un fișet si numerele de telefon ale altor unități într-o agendă, lângă telefon. Împreună, toate aceste informații formează o bază de date relațională. Fiecare grup de informații deservește un scop diferit, însă se pot combina informațiile din două sau mai multe grupuri pentru a rezolva anumite probleme. Elementul cheie, care face sistemul să funcționeze, este felul în care dumneavoastră cunoașteți relațiile dintre categorii.

Programul Access reprezintă doar o parte din strategia globală de dezvoltare a produselor destinate gestionării bazelor de date inițiată de Microsoft. Asemeni tuturor S.G.B.D.R.-urilor, Access permite lansarea cu ușurință a informațiilor asociate.

Access este complementar cu alte programe de baze de date, datorită caracteristicilor sale puternice de conectivitate. Da asemenea este compatibil si cu tehnologia O.L.E.

După cum am amintit anterior programul Access a ajuns la a VI-a versiune și a devenit una din cele mai apreciate aplicații de baze de date datorită calității sistemului de stocare și regăsire a datelor ușor de folosit prin intermediul unei interfețe mai mult decât accesibile care permite o creare interogărilor, rapoartelor și a formularelor, facilitate ce lipsește multor baze de date mai mari și mai complexe. Altfel spus, chiar și utilizatorii ce dețin un minim de cunoștințe despre Access pot transforma un teanc de facturi, un fișier cu numele clienților, un registru contabil, o listă de stocuri, și de ce nu?… informații despre unităț și de ce nu?… informații despre unitățile militare într-o bază de date relațională în care introducerea, actualizarea și raportarea informațiilor să se facă doar printr-un simplu click de mouse.

Mulți dintre consultanții din domeniul gestiunii de date care astăzi se bucură de succes pot confirma faptul că au început drumul prin crearea unor aplicații Access simple, au continuat învățând VBA și alte elemente de programare, după care au devenit adevărați profesioniști. Mulți dintre acești experți folosesc în continuare Access pentru a satisface cerințele clienților lor și exploatează la maxim această componentă extrem de flexibilă și puternică a pachetului Microsoft Office.

I.3.2. Ce aduce nou Microsoft Access 2002

Microsoft Access 2002 introduce vizualizări PivotTable și PivotChart în tabele, interogări, vizualizări, proceduri stocate, funcții și formulare. Acum aveți posibilitatea să efectuați analize de date și să elaborați soluții complexe bazate pe vizualizările PivotTable și PivotChart mai rapid ca niciodată. Vizualizările PivotTable și PivotChart se salvează ca pagini de acces la date ce pot fi văzute cu Microsoft Internet Explorer 5 sau versiuni mai recente. În vizualizările PivotTable și PivotChart sunt posibile utilizarea subformularelor în același mod în care sunt utilizate cu formularele în Vizualizare foaie de date. Dezvoltatorii vor constata că scriu mai bine cod în spatele formularelor din vizualizările PivotTable și PivotChart și beneficiază de noile evenimente disponibile în aceste vizualizări.

În afară de a fi tehnologia standard de interschimbare a datelor în Web, Limbajul extensibil de marcare (XML) devine rapid tehnologia preferată pentru schimbul de date între aplicațiile software generale. Microsoft Access 2002 furnizează modalități puternice, intuitive de partajare a datelor XML indiferent de diferențele de platformă, format de date, protocol, schemă sau reguli de activitate. Utilizând interfața familiară cu utilizatorul a Access, veți crea ușor documente cu date sau scheme XML din structurile și datele Jet sau SQL Server. Aveți posibilitatea să utilizați date XML din alte aplicații în formulare, rapoarte și pagini de acces la date. Întrucât aceste surse utilizează XML ca formatul lor de interschimb, aveți posibilitatea să creați o serie de interogări de agregare în Access pentru a extrage aceste date în vizualizări, apoi să proiectați formulare și rapoarte utilizând aceste vizualizări.

Access furnizează, de asemenea, metode pentru manipularea mai ușoară a datelor, simplificând crearea și aplicarea schemelor și foilor de stiluri. Access permite să descrieți mai lesne date complexe și structurate XML din aplicații și să le distribuiți către aplicații, într-un mod standardizat și consistent. De exemplu, utilizați Access pentru a crea o schemă care descrie structura datelor, apoi trimiteți schema furnizorilor în așa fel încât aceștia să cunoască exact cum trebuie să arate datele în facturile lor.

Integrarea predefinită între Microsoft Access 2002 și Microsoft SQL Server 2000 s-a îmbunătățit semnificativ prin includerea suportului pentru proprietăți extinse ale bazelor de date SQL în cadrul proiectului Access. Utilizând proprietățile extinse în proiectele Access 2002, veți implementa caracteristici cum ar fi căutarea relațiilor, reguli de validare (numite și restricții), formatare de text și subfoi de date. Aveți posibilitatea să utilizați proprietățile extinse în tabele, vizualizări, proceduri stocate și funcții, la fel ca în obiectele asemănătoare din fișierele de date Access. Utilizarea proprietăților extinse facilitează salvarea setărilor lățimilor de coloană, înălțimilor de rând, fonturilor și măștilor de intrare de la o sesiunea a unui proiect Access la alta. Proprietățile extinse facilitează chiar și migrarea aplicațiilor de la baze de date Access la proiecte Access conectate Microsoft SQL Server.

Aveți posibilitatea să lucrați și să modificați fișiere Access 2000 în Access 2002 fără conversia formatului de fișier. Aceasta permite partajarea mai ușoară cu fișiere de baze de date din versiuni diferite cu alți utilizatori Access.

Aveți acum posibilitatea să anulați și să refaceți mai multe acțiuni în Vizualizare proiect în toate obiectele din bazele dedate Microsoft Access și în vizualizările, procedurile stocate și funcțiile din proiectul Microsoft Access.

Proiectele Access 2002 salvează pe loturi toate datele de intrare li le trimite la server când utilizatorul parcurge o înregistrare, închide un formular sau selectează o comandă. Este posibilă, de asemenea, crearea unui buton în formular pentru a salva toate înregistrările sau anula toate modificările la înregistrări, prin program.

Aveți acum posibilitatea să preluați în mod deconectat paginile de acces la date în proiectul Access, să le modificați pe calculatorul portabil și să se actualizeze automat la reconectarea pe serverul SQL. Modificările la paginile deconectate sunt efectuate la un proiect Access conectat la un Microsoft SQL Server 2000 Desktop Engine local.

Dacă apar probleme la conversii din Access 95 și versiuni ulterioare, Access 2002 va crea un tabel care listează informații despre fiecare eroare, facilitând identificarea și rezolvarea problemelor.

Acum este posibilă deschiderea subformularelor și subrapoartelor în propriile lor ferestre Vizualizare proiect din formular sau raport sau din meniul Vizualizare. Îmbunătățirea defilării ușurează lucrul cu subformulare și subrapoarte în Vizualizare proiect.

Este posibilă acum modificarea parolei de conectare specificată în proiectul Access conectat la o bază de date Microsoft SQL Server 6.5 sau versiuni ulterioare, direct din meniul Access 2002.

Expertul pentru tabele legate este un ghid pentru legarea tabelelor la o bază de date SQL Server, totul în cadrul proiectului Access.

Access 2002 expune acum elemente de interfață pentru scriere complexă, ceea ce înseamnă că printr-un simplu clic se comută direcția scrierii de la stânga la dreapta la cea de la dreapta la stânga în obiecte cu specific lingvistic.

Access 2002 ușurează mai mult lucrul cu formulare din formulare și rapoarte.

Prin apăsarea pe F8 în Vizualizare proiect pentru formular sau raport, se afișează lista de câmpuri.

Prin apăsarea pe ENTER după selectarea unui câmp în lista de câmpuri în Vizualizare proiect pentru formular sau raport, se va adăuga automat câmpul pe suprafața proiectului formularului sau raportului.

Prin apăsarea pe CTRL+TAB, se va deplasa focalizarea dintr-o secțiune de formular sau de raport, la o subsecțiune.

Au fost adăugate două valori suplimentare (1000% și 500%) la opțiunea Panoramare din examinare înaintea imprimării.

I.3.3. Obiectele Microsoft Access

O bază de date Access poate fi definită ca o colecție de obiecte: tabele (table),cereri de interogare (query), formulare (form), rapoarte (report), pagini Web (pages), comenzi macro (macro), și module (module).

Tabelul (table) este un obiect definit de utilizator în care sunt stocate datele primare

Formularul (form) este un obiect care permite introducerea datelor, afișarea acestora sau controlul întregii aplicații

Interogarea (query) este un obiect care permite vizualizarea informațiilor obținute prin prelucrarea datelor din una sau mai multe tabele și/sau alte cereri de interogare

Raportul (report) este un obiect care permite formatarea și tipărirea informațiilor obținute în urma consultării bazei de date sub formă de documente

Pagina Web de accesare a datelor (pages) reprezintă un obiect care include un fișier HTML și alte fișiere suport în vederea furnizării accesului la date prin intermediul browser-elor Internet

Comanda Macro (Macro) reprezintă un obiect care conține o definiție structurată a uneia sau a mai multor acțiuni pe care Access le realizează ca răspuns la un anumit eveniment

Modulul (Module) reprezintă un obiect care conține proceduri definite de utilizator și scrise în limbajul de programare VBA.

În figura 1. sunt prezentate legăturile ce există între diferitele obiecte ce compun o aplicație Access. Astfel în cadrul tabelelor sunt stocate datele introduse inițial de utilizator sau extrase cu ajutorul formularelor sau paginilor Web de accesare a datelor. Cererile de interogare pot folosi funcții Visual Basic în vederea realizării unor calcule definite de utilizator.

II. PROIECTAREA BAZELOR DE DATE ÎN ACCESS

II.1. GENERALITĂȚI

Nereușita proiectării este sinonim cu proiectarea nereușitei . [4. p.46]

Teoria bazelor de date are la bază complicate principii matematice, care depășesc scopul acestei lucrări. Totuși, regulile de proiectare sunt ușor de aplicat și reprezintă scopul acestui capitol. Proiectarea este procesul prin care se creează tabele și legături între acestea, cu respectarea unui set fixat de reguli. Dacă baza de date este bine proiectată, atunci prin vizualizarea tabelelor și a relațiilor dintre acestea, baza de alte va putea fi înțeleasă și de alte persoane decât cele ce au proiectat-o. O bază de date prost proiectată poate întoarce erori cunoscute sub numele de anomalii. O anomalie este o eroare apărută în timpul adăugării, actualizării sau ștergerii de date. De exemplu, dacă inserarea unei noi înregistrări face ca un control calculat să returneze date incorecte avem de-a face cu ceea ce numim anomalie de inserare. Anomaliile de actualizare apar atunci când modificarea unui singur câmp conduce la o serie întreagă de actualizări suplimentare. Anomaliile de ștergere fac ca la o singură acțiune de ștergere să se elimine în mod incorect și alte date. Un proiect de bază de date trebuie să prevină apariția acestor anomalii, iar cele mai bune proiecte sunt cele normalizate. Proiectarea bazei de date ocupă un loc important în stocarea și organizarea datelor. De modul în care sunt organizate datele depinde în mare măsură eficiența bazei de date. Proiectarea reprezintă procesul de transformare a cerinței de date din realitate, tradusă prin nevoia utilizatorului într-o structură de bază de date ce constă în datele propriu-zise și relațiile dintre ele. O proiectare minuțioasă a bazei de date vă poate scuti de multe neplăceri ulterioare, legate de depanarea sau îmbunătățirile ce vor trebui aduse ulterior.

II.2.ORGANIZAREA DATELOR ÎN BAZE DE DATE;

OBIECTIVELE BAZELOR DE DATE

Organizarea datelor presupune:

Definirea, structurarea, ordonarea și gruparea datelor în colecții de date omogene,

Stabilirea relațiilor (legăturilor) între date, între elementele unei colecții, între colecții,

Reprezentarea (stocarea) lor pe suport informațional, prelucrabil într-un sistem de calcul.

Ca orice activitate bine făcută începerea realizării bazei de date trebuie făcută cu definirea obiectivelor pe care trebuie să le atingă baza de date. Câteva obiective generale am să încerc să le enumăr în continuare:

Timpul de acces la datele organizate pe suport să fie minim; ACCES RAPID

Spațiul ocupat să fie cât mai mic; ECONOMIE DE MEMORIE

Datele să apară o singură dată în baza de date; UNICITATEA DATELOR

Sistemul de organizare a datelor să reflecte pe cât posibil legăturile dintre obiectele, fenomenele, procesele pe care le reprezintă; REFFLECTAREA REALĂ A DATELOR

Să permită schimbarea structurii datelor și a relațiilor dintre ele fără a afecta datele; FLEXIBILITATEA BAZEI DE DATE,

dar să nu uităm că aceste obiective pot diferi de la caz la caz în funcție de particularitățile fiecărei baze de date.

Din punct de vedere al scopului principal îl constituie regăsirea automată a datelor după diferite criterii și forme.

II.3. ETAPELE PROIECTĂRII BAZELOR DE DATE

Etapele proiectării bazelor de date, după cum se poate vedea și în figura 2. sunt:

Analiza sistemului (domeniului) pentru care se realizează baza de date și a cerințelor informaționale asociate

Proiectarea bazei de date (schema conceptuală, internă și externă)

Încărcarea datelor în baza de date

Exploatarea și întreținerea bazei de date.

Dreptul de copyrigtht, documentația, garanția,condițiile financiare.

Conținutul acestor etape, respectiv activitățile implicate și modul lor de desfășurare depind în general, de tipul bazei de date precum și de domeniul pentru care se construiește baza de date.

Există însă și o serie de aspecte cu caracter general care nu sunt influențate de specificul unui anumit domeniu sau de caracteristicile unui anumit tip de bază de date.

Analiza sistemului (domeniului) pentru care se realizează baza de date și a cerințelor informaționale asociate.

Activitatea de analiză presupune:

Analiza componentelor sistemului și a legăturilor (asocierilor) dintre acestea, activitate cunoscută ca analiza structurală sau statică în urma căreia se obține modelul structural (static) al sistemului;

Analiza stărilor sistemului și a tranzițiilor posibile între aceste stări, în raport de anumite evenimente. Acest tip de analiză se mai numește și analiza temporală (comportamentală) prin care se obține modelul dinamic (temporal) a sistemului.

Analiza cerințelor informaționale, respectiv a transformărilor de date din cadrul sistemului prin care sunt satisfăcute cerințele informaționale asociate domeniului, obținându-se astfel modelul funcțional (transformațional) a sistemului.

Integrarea modelelor sistemului din punct de vedere structural, dinamic și funcțional; în scopul corelării și completării lor.

Proiectarea bazei de date (schema conceptuală internă și externă).

Modelele obținute în urma analizei sistemului sunt modele informaționale, adică modele ale datelor despre sistem. O caracteristică esențială a acestor modele, numite modele conceptuale sau semantice, este faptul că sunt independente de instrumentul, respectiv S.G.B.D.-ul care le face să devină operaționale.

Etapa de proiectare a structurii bazei de date constă în următoarele activități:

Alegerea S.G.B.D.-ului care să fie utilizat pentru implementarea exploatarea bazei de date

Proiectarea schemei conceptuale a bazei de date

Proiectarea schemei externe ( subschemei ) bazei de date

Proiectarea schemei interne ( de memorare) a bazei de date.

Încărcarea datelor în baza de date

Aceasta este etapa în cadrul căreia se realizează popularea masivă cu date a bazei de date. Popularea cu date a bazei de date trebuie să garanteze încărcarea numai a datelor corecte și aceasta cu un minim de efort, respectiv cu un minim de parcurgeri ale ciclului validare-corectare.

Sursele de alimentare cu date a bazei de date (fig.3) pot fi: documente primare, colecții de date gestionate prin diverse instrumente informatice.

Exploatarea și întreținerea bazei de date.

Exploatarea bazei de date de către diferiți utilizatori este realizată în scopul satisfacerii cerințelor de informare ale acestora, SGBD-urile sprijinind utilizatorii finali în exploatare oferind o serie de instrumente de sortare filtrare sau grupare a datelor.

Întreținerea bazei de date reprezintă o activitate complexă care se referă la actualizarea datelor din baza de date și la posibilitățile de reproiectare sau modificare a structurii bazei de date fără alterarea sau pierderea datelor. Activitatea se realizează în principal de administratorul bazei de date la indicațiile proiectantului bazei de date.

Daca efortul de întreținere al bazei de date este foarte mare putem spune că baza de date nu este fiabilă și se poate lua decizia de abandonare a bazei de date și se poate realiza una nouă.

Dreptul de copyright, documentația, garanția,condițiile financiare.

În această etapă se specifică cine are dreptul, dintre cele două părți; dumneavoastră sau clientul, să vândă această bază de date altor utilizatori precum și modul de utilizare în rețea cu facturare pe fiecare calculator, fiecare rețea sau fiecare companie. Tot aici specificați ce tip de documentație puneți la dispoziția clientului (sistem help, asistență on-line, manual, etc.), garanția de funcționare a bazei de date, timpul cât se asigură gratuit service și pentru ce tip de erori și ultimul dar și unul dintre cele mai importante amănunte condițiile financiare ale creării și implementării bazei de date.

II.4. PARTICULARITĂȚI ALE PROIECTĂRII DE BAZE DE DATE ÎN MICROSOFT ACCESS

Până acum am studiat proiectarea bazelor de date la modul general, iar în continuare o să reliefez particularitățile proiectării bazelor de date în Access. Pentru o proiectare normalizată a bazelor de date Access trebuie respectate mai multe reguli de normalizare dintre care:

Toate câmpurile trebuie să fie desfăcute în părți indivizibile; conceptul de „ATOMICITATE A DATELOR”

Toate câmpurile dintr-un tabel trebuie să se refere la un câmp cheie principală sau externă

Toate câmpurile trebuie să fie independente unele față de altele, ceea ce înseamnă că între câmpurile aceluiași tabel nu trebuie să existe relații ascunse.

Așadar am rezumat etapele proiectării bazelor de date Access la:

Stabilirea datelor și conturarea lor pe hârtie.

Împărțirea datelor pe hârtie, cu respectarea regulilor de normalizare,

Stabilirea relațiilor între tabele,

Identificarea cheilor primare și externe,

Corelarea tabelelor,

Evaluarea proiectului și dacă este nevoie revenirea la etapele anterioare,

Crearea și testarea, prin generarea de erori, a bazei de date.

III.– MACROCOMENZILE… O CALE SIMPLĂ SPRE AUTOMATIZAREA BAZELOR DE DATE

Nu există un singur limbaj de macrocomenzi. Mai multe aplicații soft acceptă limbaje de macrocomenzi proprii, unice și nestandardizate. La nivelul cel mai elementar, un limbaj de macrocomenzi nu poate face decât sa imite apăsările de taste pe care le-ar putea executa utilizatorul. Prin urmare caracteristica principală a macrocomenzilor este de tip “înregistrare de apăsări de taste”. O dată înregistrată, o serie de apăsări de taste, ele pot fi declanșate prin executarea macrocomenzii din interiorul aplicației. Aproape toate aplicațiile Windows de azi permit realizarea unui nou buton de tip bară cu instrumente pentru crearea și atribuirea unei comenzi ALT+apăsare de tastă, corespunzătoare unei macrocomenzi cu un singur click sau cu o singură apăsare de tastă. Macrocomenzile sunt un set de acțiuni pe care aveți posibilitatea să le utilizați pentru a vă ajuta în automatizarea activităților de rutină. Prin utilizarea grupurilor de macrocomenzi, aveți posibilitatea să efectuați câteva activități odată.

Ce este o macrocomandă?

O macrocomandă este o secvență de acțiuni programată să se desfășoare la comandă. Spre deosebire de celelalte produse majore din suita Microsoft Office, Access nu-i permite utilizatorului să creeze macrocomenzi prin secvențe de taste apăsate. În schimb, trebuie să selectați fiecare acțiune dintr-o listă derulantă și să furnizați detalii asuprea obiectelor implicate în operația respectivă. Macrocomenzile pot fi în realitate mai multe macrocomenzi combinate într-un grup. Gruparea macrocomenzilor similare creează condițiile pentru o localizare și o întreținere mai ușoară a acestora. Macrocomenzile din Access sunt instrumente puternice de automatizare, care pun la îndemână o metodă simplă prin care se pot automatiza aproape toate operațiile ce se pot efectua cu ajutorul mouse-ului sau a tastaturii. Deci, utilizând macrocomenzile se pot automatiza procese ce, altfel ar trebui realizate în mai multe etape. O macrocomandă este un set de acțiuni (acțiune: Blocul constitutiv de bază al unei macrocomenzi; o instrucțiune autoconținută ce poate fi combinată cu alte acțiuni pentru a automatiza activitățile. În alte limbaje pentru macrocomenzi sunt denumite și comenzi.), fiecare efectuând o operație particulară, cum ar fi deschiderea unui formular sau imprimarea unui raport. Macrocomenzile vă ajută să automatizați activitățile de rutină. De exemplu, aveți posibilitatea să executați o macrocomandă care imprimă un raport atunci când un utilizator face clic pe un buton de comandă. Cea mai bună metodă de a implementa macrocomenzi în baza de date este de a lua ca punct de plecare operațiile ce le executați în mod repetat cu o frecvență mare.

Acțiunile ce se pot realiza cu ajutorul macrocomenzilor pot viza:

Deschiderea unui obiect de tip tabel, cerere, formular, raport;

Filtrarea datelor afișate într-un obiect de tip tabel sau formular;

Căutarea unei înregistrări care răspunde la un anumit criteriu;

Configurarea imprimării sau imprimarea unui formular;

Inițializarea conținutului unor câmpuri;

Automatizarea importului/exportului de date;

Definirea meniurilor personalizate;

Executarea unei instrucțiuni SQL;

Rularea altei aplicații, etc.

III.1 CREAREA MACROCOMENZILOR

Pentru a crea o nouă macrocomandă, se dă comanda pentru aceasta din meniul INSERARE (Fig. 4),

(Figura 4),

sau direct în fereastra Macro Design (Fig. 5) fereastră care este folosită nu numai pentru editarea macrocomenzilor dar și pentru modificarea lor ulterioară unde:

(Figura 5)

coloana ce conține numele macrocomenzii,

coloana ce conține condiția de executare a macrocomenzii,

acțiunea ce o execută macrocomanda,

comentariul ce însoțește macrocomanda care nu are nici o influență asupra desfășurării acțiunii,

mesaj de ajutor care apare în funcție de zona unde se află cursorul, după care se salvează macrocomanda.

III.2 ACȚIUNI TRATATE PRIN MACROCOMENZI

Acțiunile Access ce sunt utilizate la construirea macrocomenzilor pot fi grupate din punct de vedere funcțional după cum urmează:

Grup Obiect: acțiunile din acest grup acționează asupra obiectelor, controalelor sau proprietăților, și conține următoarele acțiuni:

Deschiderea unui obiect al bazei de date: DeschidereTabel (Fig.3.3.3), DeschidereInterogare (Fig.6.3), DeschidereRaport (Fig.6.3), DeschidereFormular (Fig.6.2), DeschidereDiagramă (Fig.6.2), DeschidereFuncție (Fig.6.2), DeschidereModul (Fig.6.3), DeschiderePaginăAccesDate (Fig.6.3), Deschidere ProcedurăStocată (Fig.6.3).

Închiderea unui obiect deschis: Părăsire (Fig.6.5).

Filtrarea înregistrărilor aflate în obiecte: AplicareFiltru (Fig.6.1).

Înlăturarea tuturor filtrelor: AfișareToateÎnreg (Fig.6.1).

Setarea proprietăților controalelor și/sau a formularelor: SetareValoare (Fig.6.7).

Deplasarea la un anume control sau câmp într-un obiect tip formular sau interogare: SaltLaControl (Fig.6.6).

Redenumirea unui obiect: Redenumire (Fig.6.5).

Ștergerea unui obiect: ȘtergereObiect (Fig.6.8).

Reactualizarea datelor afișate de un control: Reinterogare (Fig.6.6).

Grup Ferestre, categorie în care includem:

Maximizare fereastră: Maximizare (Fig.6.5).

Minimizare fereastră: Minimizare (Fig.6.5).

Grup de transfer (import/export):

Transfer de obiecte ale bazei de date: TransferareBazăDeDate (Fig.6.8).

Transferare foi de calcul procesate cu un procesor de tabele: TransferareFoaieDeCalcul (Fig.6.8).

Transferare text: TransferareText (Fig.6.8).

Transferare baze de date create în SQL: TransferBazăDeDateSQL (Fig.6.8).

Trimitere a unui obiect prin curierul electronic: TrimitereObiect (Fig.6.8).

Grup de control al executării aplicației:

Lansarea în execuția a unei alte aplicații: ExecuțieAplicație (Fig.6.4).

Lansarea în execuție a unei funcții scrise în VBA: ExecuțieCod (Fig.6.4).

Execuția unei comenzi: ExecuțieComandă (Fig.6.4).

Execuția altei macrocomenzi: ExecuțieMacrocomandă (Fig.6.4).

Executarea unei instrucțiuni SQL de tip acțiune: ExecuțieSQL (Fig.6.4).

Închiderea aplicației Access: Părăsire (Fig.6.5).

Stoparea executării unei macrocomenzi sau a tuturor macrocomenzilor aflate în execuție: OprireMacrocomandă și OprireToateMacrocomenzile (Fig.6.5).

Activarea/inhibarea afișării mesajelor Access: SetareAvertismente (Fig.6.7).

Anularea evenimentului care a determinat executarea macrocomenzii: RevocareEvenimente (Fig.6.6).

Grup interfață cu utilizatorul:

Adăugarea de meniuri personalizate: AdăugareMeniu (Fig.6.1).

Ascunderea/afișarea de bare de instrumente: AfișareBarăDeInstrumente (Fig.6.1).

Setarea stării de activ/inactiv a unui element din meniuri: SetArticolMeniu (Fig.6.7).

Afișarea unui mesaj pentru utilizatori: CasetăMesaj (Fig.6.1).

Producerea unui semnal sonor de avertizare: Bip (Fig.6.1).

Grup navigare între înregistrări:

Căutarea unei înregistrări: CăutareÎnreg (Fig.6.1).

Executarea unei noi căutări folosind argumentele celei mai recente acțiuni: FiindNext.

Deplasarea la o înregistrare specificată: SaltLaÎnreg (Fig.6.6).

(Figura.6)

Editorul de macrocomenzi afișează pentru fiecare acțiune argumente specifice și atribuie unora valori implicite . În fig. 7 se prezintă cu titlu exemplificativ, argumentele acțiunii DeschidereRaport. După cum se poate vedea, acestei acțiuni trebuie să i se precizeze:

Numele raportului,

Modul de Vizualizare,

Nume Filtrului ce se aplică,

Condiția „Where”ce se aplică macrocomenzii,

Modul (normal, ascuns, sub formă de pictogramă sau dialog) al ferestrei.

(Figura. 7)

III.4 GRUPURI DE MACROCOMENZI SAU MACROCOMENZILE CU ACȚIUNI MULTIPLE

Un obiect macro poate conține unul sau mai multe grupuri de acțiune separate prin una sau mai multe linii albe. Pentru acțiuni multiple este necesară afișarea coloana Nume Macrocomandă figura 5.1. În cadrul aplicației se poate lansa în execuție fiecare macrocomandă din grup deoarece Access califică o macrocomandă pe structura <nume obiect macro>.<nume macro din grup>.

Ce este un grup de macrocomenzi?

Dacă aveți un număr mare de macrocomenzi, gruparea macrocomenzilor înrudite în grupuri de macrocomenzi (grup de macrocomenzi: O colecție de macrocomenzi corelate care sunt stocate împreună sub un nume singur de macrocomandă. Referirea la colecție se face frecvent ca la o macrocomandă.) vă ajută să gestionați mai simplu baza de date. Se poate executa o macrocomandă dintr-un grup de macrocomenzi într-un eveniment sau într-o procedură eveniment (procedură eveniment: O procedură executată automat ca răspuns la un eveniment inițiat de utilizator sau de codul program, sau activat de sistem.) tastând numele grupului de macrocomenzi urmat de un punct și apoi de numele macrocomenzii

Acțiuni condiționate. În anumite cazuri, este posibil să doriți să efectuați o acțiune sau o serie de acțiuni dintr-o macrocomandă numai dacă o condiție (condiție: Parte a criteriilor pe care un câmp trebuie să le îndeplinească pentru căutare sau filtrare. Unele condiții trebuie utilizate cu o valoare.) este adevărată. De exemplu, dacă utilizați o macrocomandă pentru a valida datele dintr-un formular, doriți să afișați un mesaj ca răspuns la un anumit set de valori introduse într-o înregistrare și un alt mesaj ca răspuns la un set de valori diferit. În cazuri ca acesta, aveți posibilitatea să utilizați condiții pentru a controla desfășurarea macrocomenzii. O condiție este o expresie (expresie: Orice combinație de operatori matematici sau logici, constante, funcții și nume de câmpuri, controale și proprietăți evaluate ca valoare unică. Expresiile efectuează calcule, manipulează caractere sau testează date.) logică, care se evaluează ca Adevărat/Fals sau Da/Nu. Macrocomanda va urma căi diferite, depinzând de condiție, dacă aceasta este adevărată sau falsă. Pentru a construi expresii mai complicate, se poate apela la Expresion Builder. Atunci când executați macrocomanda, Microsoft Access evaluează prima expresie condițională (expresie condițională: O expresie evaluată și comparată cu o valoare – de exemplu, instrucțiunile If…Then și Select case. Dacă se îndeplinește condiția, sunt executate una sau mai multe operații. Dacă nu se îndeplinește, operația este ignorată.). Dacă condiția este adevărată, Microsoft Access efectuează acțiunea din rând și oricare dintre acțiunile care urmează imediat și sunt precedate de puncte de suspensie (…) în coloana Condiție. Apoi, Microsoft Access execută orice acțiuni suplimentare din macrocomandă care au o coloană Condiție necompletată, până când ajunge la o altă expresie, la un nume de macrocomandă sau la capătul macrocomenzii.

Dacă condiția este falsă, Microsoft Access ignoră acțiunea și acțiunile imediat următoare care sunt precedate de puncte de suspensie în coloana Condiție și se deplasează la următorul rând de acțiune (rând acțiune: Un rând din partea superioară a ferestrei Macrocomandă, în care se introduc denumiri ale macrocomenzilor, acțiunile, condițiile și comentariile asociate cu o anumită macrocomandă sau un grup de macrocomenzi.) care conține o altă condiție sau o coloană Condiție necompletată.

Argumentele acțiunii sunt informații suplimentare solicitate de unele acțiuni ale macrocomenzii — de exemplu, obiectul afectat de acțiune sau condiții speciale în care se efectuează acțiunea. După ce adăugați o acțiune la o macrocomandă, setați argumentele pentru acțiune în partea de jos a ferestrei Macrocomandă (Fereastra Macrocomandă: Fereastra în care se creează și se modifică macrocomenzi.). Aceste argumente oferă informații suplimentare despre modul în care Microsoft Access efectuează acțiunea.

Sfaturi pentru setarea argumentelor acțiunii:

În general, este o idee bună să setați argumentele acțiunii în ordinea în care apar, deoarece opțiunile pentru un anumit argument le pot determina pe acelea ale argumentelor care îi urmează.

Dacă adăugați o acțiune la macrocomandă prin glisarea unui obiect al bazei de date din fereastra bazei de date, Microsoft Access setează automat argumente adecvate pentru respectiva acțiune.

Dacă o acțiune are un argument care apelează numele unui obiect al bazei de date, aveți posibilitatea să setați automat argumentul numelui și argumentul Tip obiect corespunzător prin glisarea obiectului din fereastra bazei de date către caseta argumentului.

Aveți posibilitatea de a utiliza o expresie  precedată de un semn egal (=) pentru a seta multe argumente ale acțiunii.

Așa cum am arătat mai sus în această secțiune, aveți la dispoziție pentru utilizare mai mult de 50 de acțiuni disponibile în cadrul macrocomenzilor. Dacă doriți o listă completă puteți accesa meniul Help intern programului.

Ca revers al utilității lor deosebite, macrocomenzile suferă de o limitare majoră: nu oferă nici o posibilitate de revenire asupra operațiilor executate de revenire asupra operațiilor executate, dacă ceva nu a funcționat cum trebuie.

AUTOMATIZARE TOTALĂ !? … MODULE VBA.

Proiectele dezvoltate în VBA, deși sunt asociate aplicațiilor din Office, nu pot fi reduse, ca problematică, la procesarea de texte (Word), calcul tabelar (Excel), prezentări electronice (PowerPoint) sau baze de date (Access). Este corect să se considere aceste proiecte drept aplicații similare celor dezvoltate în alte medii de programare, având însă la dispoziție componentele aplicațiilor din Office. Cu alte cuvinte, nu este vorba de o limitare a posibilităților de prelucrare, ci o potențare a acestora prin apelul posibil la obiectele din Office.

În acest capitol se prezintă mediul de dezvoltare VBA integrat în Microsoft Access. Modulele din Access sunt obiecte ale bazei de date care permit scrierea de rutine în limbajul VBA. În cadrul acestor module codul sursă este organizat în proceduri și funcții. Utilizând VBA, se poate crea, edita, depana și executa cod program asociat cu baze de date Microsoft Access. O obiecție la utilizarea VBA este aceea că proiectul se poate executa doar dintr-o bază de date deschisă chiar și formal aceasta fiind și principala diferență între VBA și Visual Basic. În plus nu trebuie uitat că orice aplicație necesită o interfață utilizator și că aplicația gazdă este întreținută și completată de Microsoft, astfel încât proiectele noastre se vor actualiza și ele o dată cu Access-ul.

Încercând o caracterizare în linii mari a VBA-ului din Access se poate afirma că:

Este un mediu integrat de dezvoltare (IDE, Integrated Developement Enviroment)

Utilizează un limbaj deosebit de simplu pentru dezvoltarea aplicațiilor

Este un limbaj interactiv, utilizând un interpretor performant, aceasta însemnând posibilitatea de a interpreta fiecare instrucțiune, în momentul includerii ei în program, compilând parțial programul și emițând mesaje de eroare, în cazul apariției unor asemenea cazuri. Prin această posibilitate, limbajul VBA elimină etapele de compilare și rescriere ulterioară a instrucțiunilor incluse eronat în program specifice compilării în programarea procedurală

Combină posibilitățile oferite de programarea orientată pe obiecte cu programarea orientată pe evenimente

Concepte de bază ale programării în VBA sunt obiectul, proprietatea, evenimentul și metoda. Prin intermediul desfășurătorului de obiecte, sistemul VBA evidențiază proprietățile și metodele pentru un anumit obiect. Afișarea este contextuală, adică are loc în momentul scrierii în VBA a elementelor care caracterizează un anumit context.

Un ultim argument este acela că mediul VBA este aproape identic cu mediul de dezvoltare din Microsoft Visual Studio (Visual Basic, C++ etc.) astfel că practica în VBA poate fi considerată introductivă către alte aplicații RAD.

IV.1. BAZELE PROGRAMĂRII ÎN VBA

IV.1.1.Concepte de bază ale programării în VBA

OBIECTUL. Pentru a interacționa cu datele Access se folosește de obiecte. Aceste obiecte sunt: tabelele, formularele și rapoartele, precum și controalele ce intră în componența acestora. Trebuie spus aici că există mai multe obiecte decât cele ce le putem vedea. Aproape toate elementele Access sunt obiecte, exceptând datele. Chiar și aplicația în sine este un obiect; Application.

PROPRIETATEA. Prin proprietate a unui obiect se înțelege o caracteristică a respectivului obiect (cum ar fi culoarea sau vizibilitatea etc.). Fixarea valorii proprietății se reflectă în aparența obiectului sau în comportamentul lui (de exemplu, fixarea proprietății ShowSpellingErrors la valoarea Adevărat arată în document erorile de scriere).

METODA . Atunci când trebuie să aplicați o acțiune asupra unui obiect din baza de date, aplicați o metodă pentru fiecare obiect sau o variabilă obiect pe care ați configurat-o să facă referire la acel obiect. În anumite cazuri se va utiliza o metodă pentru a crea un obiect nou. Majoritatea metodelor acceptă parametrii care se pot folosi mai departe pentru specificarea acțiunilor metodei.

EVENIMENTUL . Pe lângă proprietăți și metode, fiecare tip de obiect are un număr prestabilit de evenimente posibile, dar cel puțin unul. Evenimentul este declanșat de o acțiune. Acțiunea poate surveni din exteriorul sistemului (declanșată de utilizator) sau declanșată de program. O procedură inclusă într-un program poate declanșa un eveniment în mod automat sau pe de altă parte, evenimentele declanșează procedurile.

VBA combină deci elemente ale programării orientate pe obiect cu elemente ale programării orientate pe evenimente.

IV.1.2.Interfața grafică VBA

Pentru a vizualiza sau a edita module VBA, în Access se va activa fișa Module (Fig.8) a proiectului. Interfața grafică VBA este suficient de complexă, asemănătoare mediilor de programare din Visual Studio.

Figura.8

Figura 9

În VBA pe lângă obiectele grafice uzuale, bara de meniuri, bare de unelte, sunt disponibile ferestre specializate (Fig 9) pentru lucrul cu anumite categorii de obiecte.

Properties Window (Fig 9.1) pentru vizualizarea și fixarea proprietăților în momentul proiectării (design-time). Fereastra Properties poate fi utilizată, în momentul proiectării, pentru a vizualiza toate proprietățile obiectului activ și a modifica valorile dorite. În partea superioară este cutia de obiecte în care se poate selecta un obiect (sau mai multe) dintre cele vizibile. În fișa Alphabetic se listează proprietățile modificabile ale obiectului selectat, în ordine alfabetică. Se poate modifica valoarea unui atribut prin selectarea numelui proprietății și tastarea sau selectarea noii valori. În fișa Categorized sunt listate proprietățile după categorii, într-un control de tip Explorer, in care ramurile pot fi expandate sau. Fereastra Properties poate fi arătată (când nu este vizibilă), prin comanda Properties Window din meniul View.

Project Explorer(Fig 9.2) care permite navigarea, vizualizarea și modificarea proiectelor deschise la un moment dat.. În fereastra Project Explorer se pot vedea, modifica și naviga printre toate proiectele asociate oricărui obiect din baza de date. Pentru un proiect se listează, într-un control de tip Explorer, obiectele care recunosc evenimente, formele, modulele, referințele. Pentru a vedea codul dintr-un modul sau codul asociat unui obiect, se selectează respectivul modul sau obiect și se apasă butonul View Code (primul din stânga). Pentru a vedea interfața utilizator pentru un obiect sau formă se selectează și se apasă butonul View Object (cel din mijloc). Pentru a vedea organizarea în foldere a elementelor listate în Project Explorer se va apăsa butonul Toggle Folders. Fiecare element este însoțit, în arborele de structură, de icoana specifică elementului: proiect, folder, referință, obiect etc.

Code Window (Fig 9.3) unde se scrie și este vizibil codul sursă al proiectului activ. Fereastra principală a Editorului VBA este cea în care se poate scrie codul sursă. Deoarece procedurile sunt asociate unor obiecte de interfață, sau aparțin unui modul, mai întâi se va selecta, din Project Explorer, modulul sau forma vizată și apoi se va apăsa butonul View Code. Pentru a vedea mai mult de o procedură în fereastra de cod, se va selecta boxa de control Default to Full Module View în fișa Editor din Options (meniul Tools) (în caz contrar se va vedea doar câte o procedură). În partea de sus a ferestrei se găsesc două boxe:

Object Box unde se poate selecta obiectul pentru care se afișează procedurile asociate;

Procedures/Events Box unde se poate selecta procedura pentru care se vizualizează/editează codul.

Locals Window (Fig 9.4) care permite vizualizarea variabilelor locale cu valorile lor; Utilă în procesul de punere la punct a programului, fereastra Locals servește la afișarea automată a tuturor variabilelor declarate în procedura curentă. Conținutul ferestrei este actualizat de fiecare dată când se trece din modul Run în modul Break sau atunci când se navighează în stiva de apeluri.

Immediate Window (Fig 9.5) care permite executarea imediată a unei linii de cod. Permite scrierea și execuția imediată a unei linii de cod, linie poate fi copiată în și dintr-o fereastră de cod. În modul de execuție Break, instrucțiunea din fereastra Immediate este executată în contextul procedurii afișate în Procedure Box. Pentru acțiunile posibile în fereastra Immediate, se va studia Help – Immediate Window Keyboard Shortcuts.

Watch Window (Fig 9.6) unde se afișează valorile unor expresii specificate (utile în depanarea programelor). Este fereastra unse sunt afișate automat valorile expresiilor urmărite în etapa de depanare a proiectului

IV.1.3. Tipuri de date ( ANEXA I)

Variabilele și constantele utilizate într-un program VBA pot avea diverse tipuri, specifice datelor memorate. Spre deosebire de alte limbaje de programare, există un tip universal — tipul Variant —, care poate conține aproape orice alt tip de date. Acest tip este asignat în mod implicit tuturor variabilelor nedeclarate altfel, încât declararea explicită poate fi utilizată atunci când se dorește economisirea memoriei (tipul Variant alocă mai multă memorie), viteză în execuție sau atunci când se scriu date într-un fișier în acces direct. Cu excepția datelor de tip String cu lungime fixă și a datelor cu tipuri definite de utilizator, tipul Variant poate conține orice alt tip de dată. În plus poate să conțină valorile speciale Empty, Error, Nothing și Null. . Valorile speciale au semnificația:

Empty este valoarea unui Variant care nu a fost inițializat. În calcule numerice este considerat 0 iar în operații cu șiruri este șirul de lungime zero.

Null este valoarea unui Variant care, în mod programatic, nu conține date.

Error este valoarea utilizată pentru a arăta îndeplinirea unei condiții de eroare. Procesarea se va efectua de către utilizator, tratarea automată a erorilor nu este activată la setarea acestor valori.

Nothing este utilizată pentru disocierea unei variabile de tip Object de un obiect efectiv.

Tipul considerat pentru o dată conținută într-un Variant poate fi determinat cu funcția VarType sau TypeName. Valorile unei variabile Variant pot să-și convertească valorile automat. În general, datele numerice sunt memorate în tipul de origine, dar este posibil ca ele să fie promovate la tipul superior dacă rezultatul unei operații necesită acest fapt. De exemplu o valoare declarată inițial drept Integer și atribuită unui Variant va fi memorată ca un întreg până când, ridicând-o de exemplu la o putere, valoarea ei excede domeniul tipului Integer. În acest caz are loc promovarea (ca mod de reprezentare) la tipul superior adecvat (Long sau Double). Dacă depășirea domeniului are loc pentru subtipurile Currency, Decimal sau Double, atunci se va semnala eroare. Utilizarea tipului Variant permite o tratare mai diferențiată a șirurilor de cifre: în operații numerice vor fi considerate numere iar în operații cu șiruri vor fi considerate șiruri.

Motivul pentru care variabilele trebuie declarate este acela că accesul la valorile Variant este mai lent decât accesul la valorile definite prin tipuri explicite rezultând astfel o încetinire a aplicației.

IV.1.4. Referirea obiectelor

Înainte de a intra în detalii, trebuie precizat următorul lucru: într-adevăr, Microsoft Acces ne permite să lucrăm cu obiecte (putem instanția obiectele, le putem șterge, seta proprietățile), dar numai cu obiectele definite de Access. În Microsoft Access, unele obiecte conțin alte obiecte. De exemplu, un formular conține controale. Obiectele au colecții, seturi de obiecte de același tip (colecțiile sunt de asemenea obiecte). De exemplu colecția Forms este formată din toate formularele deschise în baza de date; fiecare formular conține o colecție a tuturor controalelor. Când ne referim în VBA, la un obiect care aparține unei colecții, atunci ne referim la el ca fiind un obiect al acelei colecții. Există trei modalități de a ne referi la un obiect care aparține unei colecții:

• identificator![numeObiect] – Prin numeObiect se specifică explicit numele unui obiect ca fiind membru al unei colecții. Parantezele drepte sunt necesare numai atunci când numele obiectului conține spatii.

• identificator(“numeObiect”) – Prin numeObiect se specifică explicit numele unui obiect ca fiind membru al unei colecții sau se poate folosi o variabilă de tip String care să conțină numele obiectului.

• identificator(index) – index reprezintă poziția obiectului într-o colecție.
Identificatorul poate fi numele unei colecții care include obiectul numeObiect sau numele unui obiect al cărei colecții implicite include obiectul numeObiect. De exemplu, dacă primul formular pe care l-am deschis se numește Formular Principal, atunci ne putem referi la acesta prin oricare din modalitățile următoare:

Forms![Formular Principal]

Forms(“Formular Principal”)

Form(0)

În primele două exemple ne referim la formularul Formular Principal prin numele acestuia. Acest formular este membru al colecției de formulare deschise: Forms. În cel de-al treilea exemplu ne referim la formular prin poziția sa din colecție. Deoarece formularul Formular Principal este primul formular deschis, este primul element în colecția de Forms. Sintaxa pe care o folosim depinde de contextul în care ne aflăm. Dacă nu folosim o variabilă sau o valoare numerică pentru a ne referi la un obiect, atunci este mai eficient să folosim prima variantă, cea cu ‘!’, deoarece semnul exclamării indică explicit că numeObiect este membru al unei colecții. Pentru a specifica o proprietate a unui obiect, sintaxa este următoarea:

obiect.proprietate

Într-o bază de date mare, specificarea obiectelor din cod, sub forma prezentată mai sus, este supărătoare si greu de menținut. De asemenea poate dorim să executăm aceleași proceduri pentru obiecte diferite. Pentru a evita această scriere, putem declara din Access/VBA variabile obiect si le putem atribui un tip, cum ar fi de exemplu un Form sau Report. O variabilă obiect este o variabilă care se referă la un obiect de un anumit tip. Declararea variabilelor obiect se declară la fel ca o variabilă normală. O variabilă se poate declara cu unul dintre următoarele cuvinte cheie: Dim, ReDim, Static sau Global. Pentru a asocia o variabilă cu un obiect existent se folosește cuvântul rezervat Set. Sintaxa este:

Set numeVariabilă = expresieObiect .

Trebuie menționat că nu toate obiectele Access-ului pot fi reprezentate printr-o variabilă.

IV.1.5. Unelte VBA pentru scrierea instrucțiunilor

Deoarece multe dintre denumirile obiectelor, proprietăților sau metodelor care apar în codul VBA sunt complexe, mediul de dezvoltare oferă o serie de unelte pentru completarea automată a cuvintelor cheie, pentru oferirea de ajutor în reamintirea denumirilor etc.

verificarea automată a sintaxei — Auto Syntax Check;

obligativitatea declarării tuturor variabilelor, adăugarea automată a instrucțiunii Option Explicit la orice nou modul — Require Variable Declaration;

afișarea unei liste cu informații utile (logice la poziția curentă a cursorului) la completarea instrucțiunii — Auto List Member;

afișarea informației despre proceduri și parametrii lor — Auto Quick Info;

afișează, doar în modul Break, valoarea unei variabile peste care este plasat cursorul — Auto Data Tips;

alinierea automată a liniilor noi la începutul liniei precedente — Auto Indent;

fixarea lățimii între pozițiile tabulatorului, 1 la 32 de spații (implicit fiind 4) —Tab Width.

Pe bara de unelte Edit există câteva butoane, care ajută la completarea cuvintelor și expresiilor în timpul scrierii instrucțiunilor:

List Properties/Methods — deschide o casetă în fereastra Code cu proprietățile și metodele permise pentru obiectul care precede caracterul punct ("."), utilă atunci când se operează cu obiecte.

List Constants — deschide în fereastra de cod, la punctul de inserție, o cutie cu constantele permise pentru proprietatea care precede semnul egal ("=") în instrucțiunea curentă.

Quick Info — oferă, ca ajutor, sintaxa pentru o variabilă, funcție etc. prin analiza locului punctului de inserție pe linia curentă.

Parameter Info — arată o cutie, la punctul de inserție, cu informația despre parametrii funcției în care este pointerul.

Complete Word — acceptă caracterele pa care le propune VBA drept completare la cuvântul tastat.

Comment Block — care transformă în comentarii liniile selectate.

Uncomment Block — înlătură semnul de comentarii la liniile selectate.

VBA afișează într-un anumit context numai elementele caracteristice acestuia. Programatorul trebuie doar să aleagă elementul dorit, nemaifiind nevoie să îi scrie denumirea completă de la tastatură, acest lucru permițând scrierea rapidă de proceduri și de funcții.

IV.2. IMPLEMENTAREA STRUCTURILOR FUNDAMENTALE DE CONTROL ÎN VBA

Conform teoremei de structură, elaborată de Jacopini și Bohm, un algoritm se poate reprezenta prin combinarea a trei structuri fundamentale: secvențială, alternativă, și repetitivă. Fiecare structură fundamentală trebuie să aibă o singură intrare și o singură ieșire, aceasta putând fi o combinare de ea însăși sau de celelalte.

IV.2.1.Structuri VBA

Structurile secvențiale: În cadrul structurilor secvențiale, operațiile se execută consecutiv, necondiționat, urmând o secvență logică ce decurge din ordinea în care sunt scrise instrucțiunile corespunzătoare operațiilor din programul sursă. Aici sunt încadrate instrucțiunile de atribuire și de declarare, Instrucțiunile de terminare sau oprire a programului și instrucțiunile de transfer. Rezultă că după încheierea execuției unei instrucțiuni se trece la execuția următoarei instrucțiuni, proces ce va continua până când toate operațiunile din structura secvențială a programului au fost executate. Programul poate continua cu structuri alternative sau iterative, sau se poate termina : Instrucțiunile de declarare sunt folosite pentru:

Etichetarea liniilor

O linie poate fi identificată:

printr-o etichetă: orice nume, care respectă regulile generale, care începe în prima coloană a liniei și se termină cu caracterul ":"

printr-un număr: orice combinație de cifre, care începe în prima coloană a liniei și este unic în modulul respectiv.

Identificatorii de linii pot fi utilizați în instrucțiuni de control, deși codul astfel construit nu respectă regulile programării structurate..

Comentarii

Textele explicative (necesare documentării codului) pot fi introduse pe linii separate sau în continuarea liniei de cod. O linie de comentariu începe cu un apostrof (') sau cu cuvântul Rem urmat de un spațiu. Comentariul de pe aceeași linie cu o instrucțiune se introduce printr-un apostrof urmat de comentariu.

Instrucțiuni de atribuire

Atribuirea se poate efectua prin instrucțiunea LET (pentru valori atribuite variabilelor și proprietăților), Set (pentru atribuirea de obiecte la o variabilă de tip obiect), LSET și RSET (pentru atribuiri speciale de șiruri sau tipuri definite de utilizator).

Instrucțiunea Let

Atribuie valoarea unei expresii la o variabilă sau proprietate.

[Let] numevariabilă = expresie

unde numevariabilă este nume de variabilă sau de proprietate.

Este de remarcat forma posibilă (și de fapt general utilizată) fără cuvântul Let.

Valoarea expresiei trebuie să fie compatibilă ca tip cu variabila (sau proprietatea): valori numerice nu pot fi atribuite variabilelor de tip String și nici reciproc.

Variabilele Variant pot primi valori numerice sau String, reciproc nu este valabil decât dacă valoarea expresiei Variant poate fi interpretată compatibilă cu tipul variabilei: orice Variant poate fi atribuit unei variabile de tip String (cu excepția Null), doar Variant care poate fi interpretat numeric poate fi atribuit unei variabile de tip numeric. La atribuirea valorilor numerice pot avea loc conversii la tipul numeric al variabilei. Atribuirea valorilor de tip utilizator poate fi efectuată doar dacă ambii termeni au același tip definit. Pentru alte situații se va utiliza instrucțiunea Lset. Nu se poate utiliza Let (cu sau fără cuvântul Let) pentru legarea de obiecte la variabile obiect. Se va utiliza în această situație instrucțiunea Set.

Instrucțiunea LSet

Copie, cu aliniere la stânga, un șir de caractere (valoarea expresiei din dreapta) într-o variabila de tip String. Deoarece copierea este binară, poate fi utilizată pentru atribuiri între tipuri utilizator diferite (rezultatul este impredictibil deoarece nu se face nici o verificare de tipuri/componente ale valorilor de tip record). Sintaxa este:

LSet variabilășir = șir

LSet numevariabilă1 = numevariabilă2 unde

variabilășir, șir reprezintă variabila de tip String și expresia de același tip implicate într-o atribuire de șiruri.

numevariabilă1, numevariabilă2 sunt denumiri de variabile, de tipuri definite de utilizator (vezi instrucțiunea Type) diferite. Zona de memorie alocată celei de a doua variabile este copiată (aliniată la stânga) în zona de memorie a primei variabile.

Caracterele care rămân neocupate se completează cu spații, iar dacă zona de unde se copie este mai mare, caracterele din dreapta se pierd (sunt trunchiate).

Instrucțiunea RSet

Copie, cu aliniere la dreapta, un șir de caractere (valoarea expresiei din dreapta) într-o variabila de tip String. Sintaxa este:

RSet variabilășir = șir

Caracterele rămase neocupate în variabilă sunt completate cu spații. Instrucțiunea RSet nu se poate utiliza (analog lui LSet) pentru tipuri definite de utilizator.

Există, deși sunt foarte rare cazurile când un întreg program este conceput utilizând numai o structură iterativă.

Instrucțiunile de transfer

(GOSUB…RETURN; GOTO; ONERROR; ON…GOSUB; ON…GOTO). Această categorie cuprinde instrucțiunile prin care controlul execuției este transferat la o altă instrucțiune din procedură. În general, utilizarea acestor comenzi nu produce programe foarte structurate (în sensul programării structurate) și prin urmare, pentru o mai mare claritate a codului, pot fi înlocuite cu alte structuri de programare.

GoSub…Return

În cadrul unei proceduri un grup de instrucțiuni poate fi organizat ca o subrutină (similar unei proceduri on-line, nenumite) identificată prin linia de început. Transferul controlului la acest grup de instrucțiuni și revenirea la locul apelului se poate efectua prin GoSub…Return cu sintaxa

GoSub linie

linie

Return

unde linie este o etichetă de linie sau un număr de linie din aceeași procedură.

Pot exista mai multe instrucțiuni Return, prima executată produce saltul la instrucțiunea care urmează celei mai recente instrucțiuni GoSub executate.

GoTo

Realizează transferul controlului execuției la o linie din aceeași procedură.

GoTo linie

unde linie este o etichetă de linie sau un număr de linie din aceeași procedură.

On Error

Permite controlul erorilor prin transferul controlului la rutine de tratare.

Este prezentată în secțiunea dedicată controlului erorilor.

On…GoSub, On…GoTo

Permit o ramificare multiplă, după valoarea unei expresii. Se recomandă, pentru claritatea codului, utilizarea structurii Select Case în locul acestor structuri.

On expresie GoSub listădestinație sau

On expresie GoTo listădestinație; unde

expresie este o expresie numerică având valoare întreagă (după o eventuală rotunjire) între 0 și 255 inclusiv.

listădestinație este o listă de etichete de linii sau numere de linii, separate prin virgule (elementele pot fi de ambele categorii), din aceeași procedură cu instrucțiunea.

Dacă valoarea expresiei este negativă sau mai mare decât 255 se produce o eroare.

Dacă valoarea expresiei, fie ea k, este în domeniul rangurilor listei, atunci se transferă controlul la linia identificată de al k-lea element al listei.

Dacă valoarea expresiei este 0 sau mai mare decât numărul de elemente din listă, transferul se efectuează la linia care urmează instrucțiunea On…GoSub sau On…GoTo.

Instrucțiuni de terminare sau oprire a programului

(DOEVENTS, END, EXIT, STOP) Terminarea execuției programului sau oprirea temporară (pauza) se pot realiza prin instrucțiunile enumerate aici.

DoEvents

Deși nu este o instrucțiune VBA ci este o funcție, includerea ei este naturală prin aceea că permite cedarea controlului către sistemul de operare, care poate astfel să funcționeze în regim de multitasking. Acțiunea poate fi realizată și prin alte tehnici (de exemplu utilizarea unui Timer etc.). Sintaxa este:

DoEvents( )

Funcția returnează, în general, valoarea 0.

Controlul este redat programului după ce sistemul de operare a terminat procesarea evenimentelor din coada de evenimente, ca și procesarea tuturor caracterelor din coada SendKeys.

Pentru alte observații se va studia documentația comenzii DoEvents din fișierul Help din Access.

End

Termină execuția unei proceduri (sub forma prezentată aici) sau indică sfârșitul codului unei structuri de tip bloc (cum ar fi End Function, End If etc., prezentate la structurile respective). Sintaxa, în ipostaza opririi execuției, este:

End

Prin această instrucțiune, care poate fi plasată oriunde în program, execuția este terminată imediat, fără a se mai executa eventualele instrucțiuni scrise pentru tratarea unor evenimente specifice sfârșitului de program (Unload, Terminate etc.). Fișierele deschise prin Open sunt închise și toate variabilele sunt eliberate. Obiectele create din modulele clasă sunt distruse, iar referințele din alte aplicații la asemenea obiecte sunt invalidate. Memoria este eliberată.

Exit

Prin instrucțiunea Exit, sub una din multiplele ei forme, se întrerupe o ramură de execuție (cum ar fi o procedură, o structură iterativă etc.) pentru a se continua nivelul apelant. Sintaxa este :

Exit Do, Exit For, Exit Function, Exit Property, Exit Sub;

și efectele sunt prezentate la structurile respective. Nu trebuie confundată cu instrucțiunea End.

Stop

Se suspendă execuția programului, dar nu se închid fișierele deschise și nu se șterge valoarea variabilelor. Execuția poate fi reluată din punctul de suspendare. Instrucțiunea este similară introducerii unui punct de oprire (Breakpoint) în codul sursă.

Structurile alternative: Acest tip de structuri mai sunt numite și condiționale și sunt utilizate pentru evaluări de expresii în funcție de rezultatul cărora se execută părți diferite de cod, într-un anumit moment. Structurile alternative permit astfel “ramificarea” ordinii de execuție a instrucțiunilor unui program. Structurile alternative sunt: de decizie și de selecție Ramificarea firului execuției după rezultatul verificării unei condiții este o necesitate frecventă în orice implementare. Pe lângă structurile IF…THEN….ELSE și SELECT CASE, se pot utiliza trei funcții care realizează alegeri în mod liniarizat (pe o linie de cod): CHOOSE(), IIF(), SWITCH().

If…Then…Else

O asemenea structură, întâlnită de altfel în toate limbajele de programare, execută un grup de instrucțiuni ca răspuns la îndeplinirea unei condiții (compusă sau nu din mai multe condiții testate secvențial). Sintaxa permite o mare varietate de forme:

If condiție Then [secvență de cod] [Else elsesecvență de cod]

sau

If condiție Then

[secvență de cod]

[ElseIf condiție-n Then

[elseifsecvență de cod] …

[Else

[elsesecvență de cod]]

End If

unde

condiție are una din formele: expresie numerică sau șir care se poate evalua Adevărat sau Fals (Null este interpretat Fals); expresie de forma TypeOf numeobiect Is tipobiect, evaluată Adevărat dacă numeobiect este de tipul obiect specificat în tipobiect.

secvență de cod, elsesecvență de cod, elseifsecvență de cod sunt blocurile de instrucțiuni executate atunci când condițiile corespunzătoare sunt Adevărat.

La utilizarea primei forme, fără clauza Else, este posibil să se scrie mai multe instrucțiuni, separate de ":", pe aceeași linie. Verificarea condițiilor implică evaluarea tuturor subexpresiilor, chiar dacă prin jocul operanzilor și operatorilor rezultatul poate fi precizat mai înainte (de exemplu OR cu primul operand Adevărat).

Select Case

Instrucțiunea Select Case se poate utiliza în locul unor instrucțiuni ElseIf multiple (dintr-o structură If…Then…ElseIf) atunci când se compară aceeași expresie cu mai multe valori, diferite între ele. Instrucțiunea Select Case furnizează, prin urmare, un sistem de luare a deciziilor similar instrucțiunii If…Then…ElseIf. Totuși, Select Case produce un cod mai eficient și mai inteligibil. Sintaxa este:

Select Case expresiedetest

[Case listădeexpresii-n

[secvență de cod-n]] …

[Case Else

[elsesecvență de cod]]

End Select

unde

expresiedetest este o expresie numerică sau șir.

listădeexpresii-n este lista, separată prin virgule, a uneia sau mai multe expresii de forma:

expresie.

expresie To expresie. Cuvântul To introduce un interval de valori, valoarea minimă fiind prima specificată.

Is operator de comparare expresie. Se va utiliza Is cu operatori de comparare (exceptând Is și Like) pentru a specifica un domeniu de valori.

secvență de cod-n reprezintă una sau mai multe instrucțiuni care se vor executa dacă testexpresie este egală cu un element din listădeexpresii-n.

elsesecvență de cod reprezintă una sau mai multe instrucțiuni care se vor executa dacă expresiedetest nu este egală cu nici un element din listele liniilor Case.

Dacă expresiedetest se potrivește cu un element dintr-o listă Case, se vor executa instrucțiunile care urmează această clauză Case până la următoarea clauză Case, sau până la End Select. Controlul execuției trece apoi la instrucțiunea care urmează liniei finale End Select. Rezultă că dacă expresiedetest se regăsește în mai multe liste, doar prima potrivire este considerată.

Clauza Case Else are semnificația uzuală "altfel, în rest, în caz contrar etc.", adică introduce instrucțiunile care se execută atunci când expresia de test nu se potrivește nici unui element din listele clauzelor Else. Dacă aceasta este situația și nu este specificată o clauză Case Else, atunci execuția urmează cu prima instrucțiune de după End Select. Instrucțiunile Select Case pot fi scufundate unele în altele, structurile interioare fiind complete (fiecare structură are End Select propriu, includerea este completă).

Structuri repetitive: Aceste structuri mai sunt denumite și structuri iterative și reprezintă un set de operații care se execută atât timp cât o expresie de ciclare este evaluată ca ADEVĂRAT. Încheierea secvenței iterative are loc în momentul în care verificarea expresiei de ciclare returnează FALS. În continuare programul poate executa alte secvențe alternative, iterative sau se poate termina. Structurile iterative se împart în trei categorii: cu condiționare anterioară, cu condiționare posterioară, și structuri iterative cu condiționare anterioară sau posterioară cu contor. Instrucțiunile pentru realizarea structurii iterative sunt: WHILE……WEND, DO…..LOOP, FOR…..NEXT, FOR EACH….NEXT. Prin intermediul construcțiilor de tip bloc prezentate în această secțiune se poate repeta, în mod controlat, un grup de instrucțiuni. În cazul unui număr nedefinit de repetiții, condiția de oprire poate fi testată la începutul sau la sfârșitul unui ciclu, prin alegerea structurii adecvate.

Do…Loop

Se vor utiliza structuri Do…Loop pentru a executa un grup de instrucțiuni de un număr de ori nedefinit aprioric. Dacă se cunoaște numărul de cicluri, se va utiliza structura For…Next.

Înainte de continuare se va testa o condiție (despre care se presupune că poate fi modificată în instrucțiunile executate). Diferitele variante posibile pentru Do…Loop diferă după momentul evaluării condiției și decizia luată.

Do [{While | Until} condiție]

[status]

[Exit Do]

[status]

Loop

sau

Do

[secvență de cod]

[Exit Do]

[secvență de cod]

Loop [{While | Until} condiție] unde:

condiție este o expresie care valoare de adevăr Adevărat sau Fals. O condiție care este Null se consideră Fals.

secvență de cod sunt instrucțiunile care se repetă atâta timp (while) sau până când (until) condiția devine Adevărat.

Dacă decizia este de a nu continua ciclarea, atunci se va executa prima instrucțiune care urmează întregii structuri (deci de după linia care începe cu Loop).

Se poate abandona ciclarea oriunde în corpul structurii prin utilizarea comenzii Exit Do (cu această sintaxă). Dacă apare o comandă Exit Do se poate omite chiar și condiția din enunț întrucât execuția se va termina prin această decizie.

Structurile Do pot fi inserate (dar complet) unele în altele. O terminare (prin orice metodă) a unei bucle transferă controlul la nivelul Do imediat superior. Execuția structurilor este explicată în tabelul din anexa II.

For…Next

Atunci când se cunoaște numărul de repetări ale unui bloc de instrucțiuni, se va folosi structura For…Next. Structura utilizează o variabilă contor, a cărei valoare se modifică la fiecare ciclu, oprirea fiind atunci când se atinge o valoare specificată. Sintaxa este:

For contor = start To end [Step pas]

[secvență de cod]

[Exit For]

[secvență de cod]

Next [contor] unde

contor este variabila contor (numără repetările), de tip numeric. Nu poate fi de tip Boolean sau element de tablou.

start este valoarea inițială a contorului.

end este valoarea finală a contorului.

pas este cantitatea care se adună la contor la fiecare pas. În cazul în care nu se specifică este implicit 1. Poate fi și negativă.

secvență de cod sunt instrucțiunile care se repetă. Dacă nu se specifică, atunci singura acțiune este cea de modificare a contorului de un număr specificat de ori. Acțiunea este dictată de pasul de incrementare și relația dintre valoarea inițială și cea finală. Instrucțiunile din corpul structurii se execută dacă:

contor <= end pentru pas >= 0 sau,

contor >= end pentru pas < 0.

După ce toate instrucțiunile s-au executat, valoarea pas este adăugată la valoarea contorului și instrucțiunile se execută din nou după același test ca și prima dată, sau bucla For…Next este terminată și se execută prima instrucțiune de după linia Next. Specificarea numelui contorului în linia Next poate clarifica textul sursă, mai ales în cazul când există structuri For…Next îmbricate. Corpul unei bucle For…Next poate include (complet) o altă structură For…Next. În asemenea situații, structurile imbricate trebuie să aibă variabile contor diferite. Instrucțiunile Exit For pot fi plasate oriunde în corpul unei bucle și provoacă abandonarea ciclării. Controlul execuției se transferă la prima instrucțiune de după linia Next.

For Each…Next

Similară structurii For…Next, structura For Each…Next repetă un grup de instrucțiuni pentru fiecare element dintr-o colecție de obiecte sau dintr-un tablou (cu excepția celor de un tip utilizator). Este utilă atunci când nu se cunoaște numărul de elemente sau dacă se modifică, în timpul execuției, conținutul colecției. Sintaxa este:

For Each element In grup

[secvență de cod]

[Exit For]

[secvență de cod]

Next [element] unde:

element este variabila utilizată pentru parcurgerea elementelor. Dacă se parcurge o colecție de obiecte, atunci element poate fi Variant, o variabilă generică de tip Object, sau o variabilă obiect specifică pentru biblioteca de obiecte referită. Pentru parcurgerea unui tablou, element poate fi doar o variabilă de tip Variant.

grup este numele colecției de obiecte sau al tabloului.

secvență de cod este grupul de instrucțiuni executate pentru fiecare element.

Execuția unei structuri For Each…Next se realizează în 5 pași :

Se definește element ca numind primul element din grup (dacă nu există nici un element, se transferă controlul la prima instrucțiune de după Next – se părăsește bucla fără executarea instrucțiunilor).

Se execută instrucțiunile din corpul buclei For.

Se testează dacă element este ultimul element din grup. Dacă răspunsul este afirmativ, se părăsește bucla.

Se definește element ca numind următorul element din grup.

Se repetă pașii 2 până la 4.

Instrucțiunile Exit For sunt explicate la For…Next.

Buclele ForEach…Next pot fi imbricate cu condiția ca elementele utilizate la iterare să fie diferite.

Pentru ștergerea tuturor obiectelor dintr-o colecție se va utiliza For…Next și nu For Each…Next. Se va utiliza ca număr de obiecte colecție. Count.

While…Wend

Execută un grup de instrucțiuni atât timp cât este adevărată o condiție. Sintaxa este:

While condition

[secvență de cod]

Wend

Este recomandat să se utilizeze o structură Do…Loop în locul acestei structuri.

With

Programarea orientată pe obiecte produce, datorită calificărilor succesive, construcții foarte complexe atunci când se numesc proprietățile unui obiect. În cazul modificărilor succesive ale mai multor proprietăți ale aceluiași obiect, repetarea zonei de calificare poate produce erori de scriere și conduce la un text greu de citit. Codul este simplificat prin utilizarea structurii With…End With. O asemenea structură execută o serie de instrucțiuni pentru un obiect sau pentru o variabilă de tip utilizator. Sintaxa este:

With obiect

[secvență de cod]

End With unde:

obiect este numele unui obiect sau a unui tip definit de utilizator,

secvență de cod sunt instrucțiunile care se execută pentru entitatea precizată.

Permițând omiterea recalificărilor din referințele la obiectul precizat, orice construcție de tipul

" .nume " este interpretată în instrucțiunile structurii drept "obiect.nume".

Într-un bloc With nu se poate schimba obiectul procesat.

La plasarea unui bloc With în interiorul altui bloc With, obiectul extern este mascat complet, deci calificările eventuale la acest obiect vor fi efectuate.

Nu se recomandă saltul în și dintr-un bloc With.

IV.2.2. Module VBA

Un modul este în principal o colecție de declarații, instrucțiuni și proceduri stocate împreună ca o entitate denumită, pentru a organiza codul VBA. Microsoft Access deține două tipuri de module: modulele standard (modul standard: Modul în care se amplasează procedurile Sub și Function care vor fi disponibile altor proceduri din cadrul bazei de date) și modulele de clasă (modul de clasă: Un modul care conține definiția pentru un obiect nou. Fiecare instanță a unei clase creează un nou obiect. Procedurile definite în modul devin proprietăți și metode ale obiectului. Modulul de clasă poate exista independent sau cu formulare și rapoarte.).

Module standard sau globale sunt module ce constituie obiecte distincte în baza de date, ele incluzând în zona de declarații, variabile și constante, precum și proceduri sau funcții utilizate sau utilizabile de către orice componentă a aplicației. Modulele standard conțin proceduri generale care nu sunt asociate cu vreun alt obiect, precum și proceduri frecvent utilizate, care pot fi rulare din orice punct al bazei de date. Diferența majoră dintre modulul standard și un modul de clasă care nu este asociat cu un obiect anumit constă în durata de viață și în zona sa. Valoarea oricăror variabile sau constante declarate sau existente într-un modul de clasă fără obiect asociat sunt disponibile numai atunci când codul respectiv se execută și numai din cadrul respectivului obiect. Modulele standard sunt listate în Module de sub Obiecte în fereastra bazei de date (Fereastra Bază de date: Fereastra care apare la deschiderea unei baze de date Access sau a unui proiect Access. Ea afișează comenzile rapide pentru crearea noilor obiecte bază de date și deschiderea obiectelor existente.). Modulele de formular, de raport sau standard mai sunt listate și în browser-ul de obiecte (Browser obiecte: O casetă de dialog care afișează informații despre obiecte, proprietăți, metode și constante din proiectul curent și din bibliotecile de referință ale obiectului, fiind utilizat pentru căutarea unui element, pentru a obține ajutor despre el sau pentru a-l lipi într-un modul.). Atât modulele de formular cât și cele de raport sunt module atașate, module create automat la generarea de formulare sau rapoarte și atașate acestora. Toate declarațiile, procedurile și funcțiile asociate acestor module sunt recunoscute numai în cadrul lor. Procedurile pot fi de tip eveniment sau generale. Modulele de formular și modulele de raport sunt module de clasă care se asociază cu un anumit formular sau raport. Modulele de formular și raport conțin deseori procedurile eveniment care se execută ca răspuns la un eveniment din formular sau raport. Aveți posibilitatea de a utiliza procedurile eveniment pentru a controla comportamentul formularelor sau rapoartelor și răspunsul lor la acțiuni ale utilizatorilor, cum ar fi efectuarea unui clic pe un buton de comandă.

Module clasă cuprind de obicei proceduri și funcții pentru crearea de obiecte noi.

Atunci când creați prima procedură eveniment pentru un formular sau raport, Microsoft Access creează automat un modul asociat formularului sau raportului.

În Access 97 sau mai recent, modulele de clasă pot să existe independent de un formular sau raport, iar acest tip de modul de clasă este listat în fereastra bazei de date . Aveți posibilitatea de a utiliza un modul de clasă pentru a crea o definiție pentru un obiect particularizat. În Access 95, modulele de clasă există numai asociate cu un formular sau raport.

Deschiderea unui modul clasă existent

Pentru a deschide un modul de clasă existent, în fereastra bază de date, faceți clic pe Module, selectați modulul pe care doriți să-l deschideți, apoi faceți clic pe Proiect din bara de instrumente a ferestrei Bază de date.

Declarați procedura tastând instrucțiunea Sub.

Tastați numele procedurii, urmat imediat de argumente între paranteze

Adăugați cod VBA  care efectuează operația pe care o va efectua procedura.

Copierea exemplelor de cod VBA din Ajutor la fereastra Cod

Selectați exemplul de cod pe care îl veți copia din subiectele de Ajutor, apoi faceți clic cu butonul drept al mausului.

În meniul de comenzi rapide, faceți clic pe Copiere.

Comutați la editorul VBA .

Lipiți exemplul în fereastra Code a modulului ..

Crearea unui modul de clasă care nu este asociat cu un formular sau raport

În fereastra Bază de date, sau în Editor VBA , faceți clic pe Modul de clasă din meniul Insert.

În editorul VBA apare un modul de clasă necompletat.

Adăugați declarațiile și procedurile dorite în modul .

Pentru a salva modulul, faceți clic pe Save din bara de instrumente  și precizați numele modulului de clasă în caseta de dialog Salve As.

IV.2.3. Scrierea și executarea unei proceduri

Dacă se dorește scrierea unor proceduri generale, care nu sunt asociate unui obiect sau eveniment specific, se va crea o procedură într-un modul standard.

Crearea unei proceduri VBA

Extinzând baza de date pentru a include proceduri  VBA aveți posibilitatea să particularizați modul în care tabelele, formularele, rapoartele și interogările din baza de date, funcționează împreună. Există mai multe tipuri de proceduri. Creați o procedură eveniment  prin adăugarea de cod la un eveniment dintr-un formular sau raport. De asemenea, aveți posibilitatea să creați proceduri Function (Procedură Function: Procedură care returnează o valoare și care poate fi utilizată într-o expresie. Funcția se declară cu instrucțiunea Function și se sfârșește cu instrucțiunea End Function.) sau proceduri Sub în module standard  sau în module de clasă  care cuprind module formular  și module raport.

Scrierea unei proceduri de eveniment (event procedure)

Dacă se dorește scrierea de cod sursă care să se execute automat atunci când are loc un anumit eveniment (cum ar fi deschiderea unui document, acționarea unui buton etc.), trebuie să se scrie o procedură asociată evenimentului respectiv. O asemenea procedură se va numi procedura evenimentului. Anumite obiecte din aplicațiile Microsoft Office recunosc un set predefinit de evenimente, care pot fi declanșate de către sistem sau de către utilizator. Evenimentele specifice fiecărui obiect trebuie să fie studiate separat (se poate studia secțiunea din Help), doar principalele obiecte, cu proprietățile, metodele si evenimentele lor, sunt prezentate și în această lucrare, în paragrafe separate. Aveți posibilitatea să setați o proprietate eveniment pentru un formular, raport sau [Procedura eveniment] pentru a executa cod ca răspuns la un eveniment. Microsoft Access creează șablonul procedurii eveniment. Aveți posibilitatea să adăugați cod pentru a se executa ca răspuns la un eveniment particular.

Deschideți un formular sau raport în Vizualizare proiect.

Afișați foaia de proprietăți pentru formular sau raport, sau pentru o secțiune sau control dintr-un formular sau raport.

Faceți clic pe fila Eveniment.

Faceți clic pe proprietatea eveniment pentru evenimentul care doriți să lanseze procedura. De exemplu, pentru a afișa procedura eveniment pentru evenimentul Change, faceți clic pe proprietatea OnChange.

Faceți clic pe Generare lângă caseta de proprietăți pentru a afișa caseta de dialog Alegere generator.

Faceți dublu clic pe Generatorul de cod pentru a afișa instrucțiunile Sub și End Sub ale procedurii eveniment în modulul de formular sau modulul de raport. Aceste instrucțiuni definesc sau declară procedura eveniment.

Microsoft Access declară automat procedurile eveniment pentru fiecare obiect și eveniment dintr-un modul de formular sau de raport utilizând cuvântul cheie Private pentru a indica faptul că procedura se poate accesa numai de către o altă procedură din acel modul.

Adăugați cod la procedura eveniment care doriți să fie executată când se produce evenimentul. De exemplu, pentru a produce un sunet prin difuzorul calculatorului când datele din caseta text txtUnit se modifică, adăugați o instrucțiune Beep la procedura eveniment txtUnit_Change, ca mai jos:

Private Sub txtUnit_Change()

Beep

End Sub

Procedura eveniment se execută de fiecare dată când se produce evenimentul Change pentru obiect. Modul cum aplicația răspunde la evenimentele recunoscute poate fi controlat prin scrierea procedurilor de eveniment. O asemenea procedură se va scrie în fereastra Code asociată obiectului. De fiecare dată când apare evenimentul se execută procedura evenimentului respectiv.

Pentru a vedea codul sursă al procedurii, se va selecta obiectul în Project Explorer și click pe butonul View Code pentru a deschide fereastra de cod asociată. Dintr-o fereastră de cod deschisă, asociată, se va selecta obiectul vizat, din boxa de obiecte, și în boxa de proceduri vor fi listate atunci toate procedurile evenimentelor, chiar dacă ele nu sunt efectiv scrise. Selectarea unui eveniment va scrie (dacă nu există) liniile obligatorii ale procedurii și va fixa cursorul de editare în procedura respectivă.

Crearea unei funcții particularizate

Pentru a deschide un modul standard  nou, în fereastra Bază de date, faceți clic pe Module sub Obiecte, apoi faceți clic pe butonul Nou în bara de instrumente a ferestrei Bază de date.

Executarea unei proceduri Sub

O procedură poate să se execute:

automat, ca răspuns la declanșarea unui eveniment (procedura evenimentului);

din VBA, dacă punctul de inserție este în procedură și se acționează butonul Run Sub/UserForm de pe bara de unelte Standard sau Debug;

ca un macro, Run din dialogul Macros (Tools – Macro) al aplicației de bază;

apelată din altă procedură.

La apelul unei proceduri din altă procedură se va ține seama de interacțiunea declarațiilor Public, Private, ca și de referințele la alte proiecte (meniul Tools – References).

IV.3. OBIECTE, COLECȚII ȘI CONTOALE (ANEXA II)

Proprietățile, metodele și evenimentele asociate sunt vizibile, în mod similar tutor obiectelor accesate în VBA, prin Object Browser. Pentru a deschide acest instrument, se deschide un modul și apoi se dă comanda Object Browser din meniul View (sau F2).

IV.3.1. Obiectele Access

Obiectul Application reprezintă aplicația Microsoft Access și este obiectul de nivel cel mai înalt din ierarhia de obiecte Access, conținând toate celelalte obiecte și colecții. Obiectul Application este obiectul implicit din ierarhia de obiecte. Drept urmare, atunci când se lucrează din interiorul aplicației Access, nu este necesară referirea lui explicită când se utilizează una dintre proprietățile sau metodele sale, sau când se scrie o referință la un obiect sau o colecție inclusă. Referirea explicită nu produce, totuși, erori. Specificare obiectului Application este necesară doar atunci când, prin procedeul de automatizare, se lucrează cu obiecte din ierarhia Access în interiorul altei aplicații.

Obiectul Form reprezintă o formă Access deschisă într-unul din modurile de vizualizare Design, Form sau Datasheet. Obiectele Form sunt grupate în colecția Forms, care conține doar formele deschise curent în baza de date

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, există trei căi de creare a modulului asociat:

click Code de pe meniul View când forma este în modul de vizualizare Design. Modulul este creat și salvat împreună cu forma chiar dacă nu conține code.

Stabilirea proprietății HasModule la True. Aceasta se poate efectua din foaia de proprietăți din Access. Stabilirea proprietății la False elimină modulul și codul conținut.

Referirea la proprietatea Module a formei din VBA. Proprietatea returnează o referință la obiectul Module asociat formei, creând mai întâi modulul dacă el nu există.

În lucrul cu module asociate, trebuie reținut că un formular fără modul asociat se deschide mai repede. Prin urmare nu se vor crea module dacă nu există necesitatea scrierii de cod pentru formular. Eliminarea modulelor inutile reduce și dimensiunea bazelor de date. Un modul de formă conține toate procedurile eveniment definite pentru formă, ca și alte proceduri specifice formei. De notat că o procedură care se accesează din multiple locuri ale bazei de date trebuie plasată într-un modul standard.

IV.3.2.Colecții Access

a)Colecția Form

Dintre proprietățile obiectului Form sunt prezentate doar câteva, considerate mai importante. Pentru celelalte se va studia intrarea corespunzătoare din Help (Form Object).

Proprietatea Me (Form Object)

Returnează o referință la forma în care se execută codul curent. Proprietatea poate fi utilizată în procedurile din modulul formei, poate fi utilizată pentru trecerea ca argument a obiectului Form fără a ști numele formei. Utilizarea proprietății produce un cod independent de numele formei.

Proprietatea Section (Form Object)

O formă este divizată în Access în cinci secțiuni: detaliu (detail), antet (header), subsol (footer), antet de pagină (page header) și subsol de pagină (page footer). Proprietatea returnează o referință la o secțiune particulară, utilizarea acesteia permite stabilirea proprietăților secțiunii.

Proprietatea Properties (Form Object)

Returnează o referință la colecția Properties a obiectului Form. Colecția Properties conține toate proprietățile formei și pot fi enumerate prin instrucțiunea For Each…Next. La colecția Properties nu se poate adăuga programatic o nouă proprietate

Proprietatea Module (Form Object)

Aplicată unui obiect Form, proprietatea Module returnează o referință la obiectul Module asociat formei. Referința poate fi asignată unei variabile de tip Module. Modulul asociat cu o formă nu există în mod automat din momentul creerii formei. Proprietatea HasModule determină dacă o formă are un modul asociat. Dacă proprietatea Module este referită în modul proiectare, Access creează modulul asociat și stabilește valoarea True pentru HasModule. Referirea la proprietatea Module a unei forme în execuție (run-time) pentru care HasModule este False produce eroare.

Proprietatea RecordSource (Form Object)

Prin proprietatea aceasta se leagă o tabelă sau o interogare (query) la formă. După ce proprietății RecordSource i-a fost atribuit numele unei tabele sau interogări sau o instrucțiune SQL se pot afișa date din tabelă, interogare sau SQL pe formă.

Un obiect Report reprezintă un raport microsoft Access care este deschis în Design view, Print Preview sau Layout Preview. Toate obiectele Report sunt membri ai colecției Reports. De accentuat că doar rapoartele deschise sunt reprezentate în colecție. Relațiile în sus și în jos ale colecției Reports în ierarhia de obiecte sunt date în anexa I.3. Obiectele Report au caracteristici similare cu obiectele Form.

Module atașate 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, există trei căi de creare a modulului asociat:

click Code de pe meniul View când forma este în modul de vizualizare Design. Modulul este creat și salvat împreună cu forma chiar dacă nu conține code.

Stabilirea proprietății HasModule la True. Aceasta se poate efectua din foaia de proprietăți din Access sau din VBA. Stabilirea proprietății la False elimină modulul și codul conținut.

Referirea la proprietatea Module a formei din VBA. Proprietatea returnează o referință la obiectul Module asociat formei, creând mai întâi modulul dacă el nu există.

În lucrul cu module asociate, trebuie reținut că o formă fără modul asociat se deschide mai repede. Prin urmare nu se vor crea module dacă nu există necesitatea scrierii de cod pentru formă. Eliminarea modulelor inutile reduce și dimensiunea bazelor de date. Un modul de formă conține toate procedurile eveniment definite pentru formă, ca și alte proceduri specifice formei. De notat că o procedură care se accesează din multiple locuri ale bazei de date trebuie plasată într-un modul standard.

b)Colecția Reports

Un obiect Report reprezintă un raport Microsoft Access care este deschis în Design view, Print Preview sau Layout Preview. Toate obiectele Report sunt membri ai colecției Reports. De accentuat că doar rapoartele deschise sunt reprezentate în colecție. Obiectele Report au caracteristici similare cu obiectele Form. Pentru a referi un raport trebuie ca acesta să fie deschis, operațiune realizată prin metoda OpenReport a obiectului DoCmd.

Module asociate rapoartelor

Ca și un obiect Form, obiectul Report poate avea asociat un modul care este un modul clasă. Modulul de cod asociat nu există până când nu este referit:

click Code de pe meniul View când raportul este în modul de vizualizare Design. Modulul este creat și salvat cu raportul chiar dacă nu conține code.

Stabilirea pentru obiectul Report a proprietății HasModule la True. Aceasta se poate efectua din foaia de proprietăți din Access sau din VBA. Stabilirea proprietății la False elimină modulul și codul conținut.

Referirea, din VBA, la proprietatea Module a raportului. Proprietatea returnează o referință la obiectul Module asociat raportului, creând mai întâi modulul dacă el nu există.

c) Colecția Controls

Un obiect Control reprezintă un control de pe o formă sau dintr-un raport Access. Obiectele Control sunt grupate în colecția Controls. Legăturile în ierarhia de obiecte Access sunt date în anexa I.5. Există două tipuri de controale:

preconstruite, în biblioteca de obiecte Microsoft Access , accesibile printr-o cutie de unelte,

controale ActiveX (denumite și controale OLE sau custom controls).

d)Colecția Modules

Un obiect Module reprezintă un modul din Microsoft Access. Toate obiectele Module sunt incluse în colecția Modules, membru al obiectului Application. S-a văzut că un obiect Form sau Report poate să conțină de asemenea un singur obiect Module. Mulțimea tuturor modulelor dintr-o bază de date Microsoft Access constituie proiectul VBA al bazei de date. Colecția Modules conține doar modulele deschise curent în proiect. Modulele care nu sunt deschise pentru editare nu sunt incluse în colecția Modules. Pentru a deschide un modul în VBA se utilizează metoda OpenModule a obiectului DoCmd.

IV.3.3.Controale Access

a) Controale Microsoft Access

Tabelul din anexa II conține lista controalelor predefinite. Controalele sunt cu denumirile de clasă, după cum apar în Object Browser. Fiecare control este un obiect cu proprietățile, metodele și evenimentele lui. Pentru detalii se pot studia intrările sinonime din Help.

b) Controale ActiveX

Un control ActiveX este un obiect care poate fi plasat pe o formă pentru a afișa date sau efectua acțiuni. Spre deosebire de controalele preconstruite, codul asociat este memorat în fișiere separate, care trebuiesc instalate pentru a putea utiliza controlul ActiveX. În Microsoft Access sunt disponibile controalele:

Calendar, care permite afișarea și actualizarea unui calendar pe o formă. Instalarea controlului se cere la instalarea Microsoft Access.

WebBrowser, care permite afișarea paginilor Web și alte documente într-o formă 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 să-l reprezinte. Declararea poate fi făcută explicit, dacă se cunoaște tipul obiectului:

Dim txt As TextBox,

sau, dacă nu se știe tipul controlului sau dacă variabila conține o referință la un control ActiveX, ea este declarată de tip generic Control și poate primi referințe la orice tip de control (alternativă utilă pentru trecerea unor argumente de tipuri diferite de controale unei proceduri)

Proprietățile obiectului Control

Datorită marii varietăți de controale, proprietățile sunt foarte numeroase (de exemplu Text Box Control are peste 50 de proprietăți) încât aici se discută doar două care merită o atenție specială.

Proprietatea Hyperlink (Control Object)

Prin aplicarea proprietății este returnată o referință la un obiect Hyperlink, care reprezintă un text sau grafică definind un salt la un fișier, bookmark într-un fișier, pagină HTML pe WWW sau pe intranet. Controalele care suportă proprietatea Hyperlink sunt combo box, Command Button, Image, Label și Text Box. Fiecare poate afișa o hiperlegătură pe care utilizatorul o poate deschide pentru navigare. Atunci când se dispune de o referință la un obiect Hyperlink dintr-un control, utilizarea metodei Follow (a obiectului Hyperlink) produce saltul la locația indicată.

Proprietatea ControlType (Control Object)

Aplicată unui obiect Control, proprietatea indică tipul particular de control al obiectului. Utilizarea proprietății poate duce și la schimbarea tipului de control (de exemplu Text Box în Combo Box) nu numai la aflarea tipului.

Controale legate de date (Data-Bound Controls)

Anumite controale din Microsoft Access pot fi legate de date, ceea ce înseamnă că ele afișează date memorate într-o tabelă, interogare sau instrucțiune SQL. Această categorie de controale include: Bound Object Frame, Check Box, Combo Box, List Box, Option Button, Option Group, Text Box, Subform și Subreport. Și 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 fixează numele câmpului tabelei, interogării sau instrucțiunii SQL din care se iau datele afișate de control. Este de notat că mai înainte de stabilirea acestei proprietăți trebuie să se fixeze proprietatea RecordSource a formei/raportului pentru a specifica tabela, interogarea sau instrucțiunea SQL care furnizează date formei/raportului.

Obiectul DoCmd

Metodele obiectului DoCmd sunt utilizate pentru a executa acțiuni (macro-uri) Microsoft Access din VBA. De altfel, aceasta este singura utilitate a obiectului DoCmd, acesta neavând proprietăți și evenimente. Sintaxa este:

[application.]DoCmd. metodă [arg1, arg2, …]

unde

application este obiectul Application, opțional

metodă este una dintre metodele suportate de obiect

arg1, arg2, … sunt argumentele metodei selectate.

Omiterea argumentelor care sunt opționale este echivalentă cu acceptarea valorilor implicite ale acestora.

Obiectul DoCmd nu suportă metode care corespund cu acțiunile

AddMenu.

MsgBox. Se utilizează funcția MsgBox.

RunApp. Se utilizează funcția Shell pentru a executa altă aplicație.

RunCode. Se execută funcția direct în VBA (instrucțiunea Call).

SendKeys. Se utilizează instrucțiunea SendKeys.

SetValue. Se stabilește valoarea direct în VBA (instrucțiunea Let).

StopAllMacros. Se utilizează instrucțiunile Stop sau End.

StopMacro. Se utilizează instrucțiunile Exit Sub sau Exit Function.

Pentru o listă completă a acțiunilor, care coincide, excepând cele enumerate, cu lista metodelor obiectului, se va urma: Help – DoCmd Object – Action Constants (lista alfabetică a acțiunilor) sau actions, reference topics (acțiuni grupate pe categorii). Pentru explicații complementare se va urmări atât subiectul privind metoda cât și subiectul privind acțiunea sinonimă.

IV.4 APELURI DE PROCEDURI ȘI PROGRAME

În această secțiune am să prezintă doar funcția SHELL(), deoarece despre proceduri și apelul lor s-a discutat în secțiunile anterioară.

Funcția Shell()

Execută un program executabil și returnează un Variant(Double) reprezentând Id-ul de task al programului în caz de succes; în caz contrar returnează zero. Sintaxa este :

Shell (cale[,stilfereastră]) unde

cale este Variant (String). Conține numele programului care se execută, argumentele necesare și poate da calea completă (dacă este nevoie).

stilfereastră este Variant (Integer) și precizează stilul ferestrei în care se va executa programul (implicit este minimizat, cu focus).

Dacă funcția Shell nu poate porni programul specificat se va semnala eroare. Programul pornit prin Shell se execută asincron, deci nu există certitudinea că acest program se termină înainte de execuția instrucțiunilor care urmează liniei Shell.

IV.5. ERORILE DE COD VBA

Depanarea este un proces care se utilizează pentru a găsi și rezolva erori, sau defecte, în codul VBA. Există trei tipuri de erori care pot apărea atunci când se execută codul:

Erori la momentul compilării (timp de compilare: Timpul în care VBA pregătește codul pentru execuție. Modulele sunt compilate automat înainte de a fi executate.) care apar ca rezultat al unui cod incorect scris. Probabil că ați uitat să echilibrați perechi de instrucțiuni (cum ar fi If și End If sau For și Next), sau ați făcut o greșeală de programare care încalcă regulile VBA (cum ar fi cuvinte eronat ortografiate, separatori lipsă sau erori de potrivire a tipurilor).

Erorile la momentul compilării mai cuprind și erorile de sintaxă (eroare de sintaxă: O eroare în structura gramaticală a codului sau expresiei. Dacă este activată opțiunea de verificare sintaxă, erorile vor fi evidențiate după ce se introduce o linie și se apasă pe ENTER.), care sunt erori de gramatică sau de punctuație. Acestea cuprind: paranteze necorespunzătoare sau un număr greșit de argumente transmise unei funcții.

Erori la momentul execuției (eroare în timpul execuției: O eroare ce poate fi detectată numai când se execută aplicația.), care se produc după ce aplicația este lansată în execuție. Exemple de erori la momentul execuției sunt: încercarea unei operații ilegale, cum ar fi împărțirea la zero sau scrierea într-un fișier care nu există.

Erorile logice se produc atunci când aplicația nu se desfășoară așa cum s-a propus și produce rezultate incorecte.

Pentru a vă ajuta să izolați aceste trei tipuri de erori și pentru a monitoriza modul în care se execută codul, VBA Editor pune la dispoziție instrumente de depanare care vă permit să parcurgeți codul pas cu pas, luând câte o linie odată, examinând sau monitorizând valorile expresiilor și variabilelor, și urmărind apelurile de proceduri.

IV.6.SECURIZAREA CODULUI VBA

În sistemul militar un accent deosebit se pune pe securitatea și confidențialitatea datelor din baza de date. Acest deziderat se poate realiza prin securizarea codului VBA cu o parolă.

Pentru a opri pe cineva să vizualizeze sau să facă modificări în codul VBA, este posibil să se protejeze codul prin solicitarea unei parole.

Deschideți fișierul proiectul Microsoft Access (.adp) (proiect Microsoft Access: Un fișier Access care se conectează la o bază de date Microsoft SQL Server și se utilizează pentru a crea aplicații client/server. Un fișier proiect nu' conține date sau obiecte bazate pe definiții de date, precum tabele și vizualizări.) sau fișierul bază de date Microsoft Access (.mdb) care conține codul VBA de protejat.

În fereastra bazei de date, indicați spre Macrocomandă din meniul Instrumente, apoi faceți clic pe VBA Editor.

Mai este posibil să apăsați pe combinația de taste ALT+F11.

În VBA Editor, faceți clic pe proprietățile <Access database or Access project name> din meniul Tools.

În fila Protection, selectați caseta de selectare Lock project for viewing. Dacă setați o parolă, dar nu selectați Lock project for viewing, oricine are posibilitatea să vizualizeze și să editeze codul, dar caseta de dialog Project Properties este protejată.

În caseta Password, tastați parola.

În caseta Confirm password, confirmați parola, tastând-o din nou, apoi faceți clic pe OK.

Parola este acum setată. La viitoarea deschidere a bazei de date, se va afișa o casetă de dialog care va solicita parola

Instrucțiuni pentru parole

Numele utilizatorilor au o lungime de 1 până la 20 de caractere și includ caractere alfabetice, caractere accentuate, numere, spații și simboluri, cu următoarele excepții:

Caracterele " \ [ ] : | < > + = ; , . ? *

Spații la începutul numelui

Caracterele de control (ASCII 10 până la ASCII 31)

Parolele fac diferențierea între literele mari și mici (diferențiere litere mari și mici: Capacitatea de a face diferența între litere mari și litere mici. O căutare cu diferențiere litere mari și mici va găsi doar textul care corespunde exact din punct de vedere al literelor mari și mici.)..

Important.  Dacă uitați parola, ea nu se mai recuperează, și nu va mai fi posibil să vizualizați sau să editați codul VBA.

Crearea unui fișier MDE

ATENȚIE!

Salvați o copie a bazei de date Microsoft Access (bază de date Microsoft Access: O colecție de date și obiecte, cum ar fi tabele, interogări sau formulare, corelate unui anumit subiect sau scop. Motorul bază de date Microsoft Jet gestionează datele.) originale. Nu este posibil să modificați forma formularelor, rapoartelor sau modulelor într-o bază de date Access salvată ca fișier MDE. Dacă este necesar să modificați forma acestor obiecte, trebuie să procedați astfel în baza de date Access originală apoi să salvați din nou baza de date Access ca fișier MDE.

Este imposibil să creați un fișier MDE în Microsoft Access 2002 dintr-o bază de date creată într-o versiune anterioară. Aveți posibilitatea să salvați un fișier MDE numai dintr-o bază de date cu aceeași versiune de Access.

De asemenea, nu este posibil să convertiți o bază de date Access salvată ca fișier MDE în versiuni ulterioare ale Access. Aveți posibilitatea să executați fișierul MDE în versiuni ulterioare ale Access.

Dacă baza de date este securizată prin securitate la nivel de utilizator (securitate la nivel de utilizator: Când se utilizează securitatea la nivel de utilizator într-o bază de date Access, un administrator al bazei de date sau proprietarul unui obiect' poate acorda utilizatorilor individuali sau grupurilor de utilizatori anumite permisiuni pe tabele, interogări, formulare, rapoarte și macrocomenzi.), trebuie să îndepliniți anumite cerințe înainte de a o salva ca fișier MDE.

Cerințe pentru salvarea unui fișier cu securitate la nivel de utilizator ca fișier MDE

Trebuie să vă alăturați fișierului de informații al grupului lucru (fișier de informații al grupului de lucru: Un fișier pe care Access îl citește la pornire care conține informații despre utilizatorii dintr-un grup de lucru. Această informație include numele de cont ale utilizatorilor' , parolele lor, și grupurile în care sunt membri.) care definește conturile utilizatorilor (cont de utilizator: Un cont identificat prin nume de utilizator și de ID personal (PID) care este creat pentru gestionarea permisiunilor utilizatorilor de a accesa obiecte ale bazelor de date într-un grup de lucru Access.) utilizate pentru a accesa baza de date sau care erau în uz când s-a creat baza de date.

Contul utilizatorului trebuie să aibă permisiunile (permisiuni: Set de atribute care indică tipul de acces al unui utilizator la datele sau obiectele dintr-o bază de date.) Deschidere/Execuție și Deschidere exclusivă pentru baza de date.

Contul utilizatorului trebuie să aibă permisiunile Modificare proiect sau Administrare pentru orice tabele din baza de date sau trebuie să fiți proprietarul (proprietar: Când se utilizează securitatea, este contul de utilizator care deține controlul asupra unei baze de date sau a obiectelor de bază de date. În mod implicit, contul de utilizator care a creat baza de date sau obiectul din baza de date este proprietarul.) oricăror tabele din baza de date.

Contul utilizatorului trebuie să aibă permisiuni Citire proiect pentru toate obiectele din baza de date.

Închideți baza de date Microsoft Access. Dacă lucrați în mediu multiutilizator, asigurați-vă că toți utilizatorii au închis baza de date Access.

În meniul Instrumente, faceți clic pe Utilitare pentru baze de date, apoi faceți clic pe Make MDE File.

În caseta de dialog Bază de date pentru salvare ca MDE, specificați baza de date Access pe care o salvați ca fișier MDE, apoi faceți clic pe Creare MDE.

În caseta Salvare MDE ca, specificați un nume, o unitate logică, și un folder pentru baza de date Access.

Depanarea problemelor de securitate a codului VBA

Ați primit mesajuI „Microsoft Access nu a creat baza de date MDE” în cursul salvării bazei de date ca fișier MDE

O bază de date reprodusă (fie o replică (replică: O copie a bazei de date care este membru al unui set de reproduceri și se poate sincroniza cu alte reproduceri din set. Datele modificate dintr-un tabel reprodus al unei reproduceri sunt trimise și aplicate celorlalte reproduceri.) fie un , coordonator de reproduceri (coordonator de reproduceri: Singurul membru al setului de reproduceri în care se pot face modificări ale structurii bazei de date care se pot propaga în alte reproduceri.)) nu se salvează ca fișier MDE. Pentru a salva o bază de date reprodusă ca fișier MDE, întâi se elimină reproducerea.

Odată ce o bază de date se salvează ca fișier MDE, nu se reproduce; reproducerea se recomandă numai în situații în care nu se mai fac modificări ulterioare în baza de date originală. Nu există nici un mod de a face modificări în forma formularelor, rapoartelor sau codului în fișierul Coordonator de reproduceri MDE, și modificările de formă făcute în baza de date originală nu se sincronizează (sincronizare: Procesul de actualizare a doi membri ai unui set de reproduceri transferând toate înregistrările și obiectele actualizate din fiecare membru. Doi membri ai unui set de de reproduceri sunt sincronizați când modificările din fiecare au fost aplicate celuilalt.) cu reproducerile MDE pre-existente. Din acest motiv, dacă este necesar să se facă o modificare formă într-un set de reproduceri (set de reproduceri: Coordonatorul de reproduceri și toate reproducerile care partajează aceeași formă a bazei de date și identificatorul unic al setului de reproduceri.) de fișiere MDE, se face modificarea în baza de date originală, se salvează din nou ca fișier MDE, apoi se creează și se repartizează un întreg set de reproduceri din fișierul MDE nou.

Ați uitat parola pentru codul VBA.

Dacă ați uitat parola, va fi imposibil să vizualizați sau să editați codul Microsoft VBA. Nu există nici un mod de a recupera parola din baza de date.

IV.7. MACRO VERSUS VBA

În Microsoft Access, aveți posibilitatea să realizați mai multe activități utilizând sau prin interfața cu utilizatorul. În multe alte programe pentru baze de date, aceleași activități solicită programare. Dacă să utilizați o macrocomandă sau depinde de ceea ce doriți să realizați.

Când să utilizez o macrocomandă?

Macrocomenzile sunt o modalitate la îndemână pentru realizarea unor activități simple, cum ar fi deschiderea și închiderea formularelor sau a rapoartelor active. Aveți posibilitatea să îmbinați rapid și ușor obiectele bazei de date pe care le-ați creat deoarece sintaxa este simplu de reținut; argumentele fiecărei acțiuni sunt afișate în fereastra Macrocomandă.

În afară de faptul că este ușor de folosit, macrocomenzile trebuie utilizate pentru:

Realizarea atribuirilor globale de taste.

Efectuarea acțiunilor sau a seriilor de acțiuni când se deschide prima dată o bază de date.  Aveți posibilitatea, însă, să utilizați caseta de dialog Lansare în execuție pentru a determina producerea anumitor lucruri la deschiderea bazei de date, cum ar fi deschiderea unui formular.

Când să utilizez VBA?

Ar trebui să utilizați VBA în locul macrocomenzilor când:

Realizați o bază dedate ușor de întreținut.  Deoarece macrocomenzile sunt obiecte distincte față de formularele și rapoartele care le utilizează, o bază de date care conține mai multe macrocomenzi care răspund la evenimente din formulare și rapoarte este posibil să fie dificil de întreținut. Dimpotrivă, procedurile eveniment VBA sunt construite în definiția formularelor sau rapoartelor. Dacă deplasați un formular sau un raport de la o bază de date la alta, procedurile eveniment construite în acel formular sau raport se deplasează cu și ele.

Utilizați funcții predefinite sau creați unele proprii.  Access conține multe funcții predefinite, cum sunt funcția IPmt, care calculează ratele. Aveți posibilitatea de a utiliza aceste funcții pentru a efectua calcule fără a trebui să creați expresii complicate. Prin utilizarea codului VBA aveți posibilitatea să creați funcții proprii fie pentru efectuarea de calcule care depășesc capacitatea unei expresii, fie pentru înlocuirea unor expresii complicate. În plus, aveți posibilitatea să utilizați funcțiile create în expresii pentru a aplica operații obișnuite la mai multe obiecte.

Tratarea mesajelor de eroare.  Când se întâmplă ceva neașteptat în timp ce un utilizator lucrează cu baza de date, iar Access afișează un mesaj de eroare, mesajul este posibil să pară misterios pentru utilizator, în special dacă nu este familiarizat cu Access. Prin utilizarea codului VBA aveți posibilitatea să detectați eroarea când se produce și fie să afișați propriul mesaj de eroare, fie să efectuați anumite acțiuni.

Crearea sau manipularea obiectelor.  În majoritatea cazurilor, veți observa că este mai ușor să creați și să modificați un obiect în Vizualizare proiect a obiectului. În anumite situații, însă, ați dori să lucrați definiția unui obiect în cod. Prin utilizarea codului VBA, aveți posibilitatea să manipulați toate obiectele dintr-o bază de date, precum și baza de date însăți.

Efectuarea de acțiuni la nivel de sistem.  Aveți posibilitatea să efectuați acțiunea ExecuțieAplicație într-o macrocomandă pentru a executa altă aplicație Microsoft Windows sau Microsoft MS-DOS din propria aplicație, dar nu aveți posibilitatea să utilizați o macrocomandă pentru a face multe altele în afara Access. Prin utilizarea codului VBA, aveți posibilitatea să verificați dacă există un fișier în sistem, să utilizați Automatizarea (Automatizare: O modalitate de lucru cu obiectele unei aplicații din altă aplicație sau instrument de dezvoltare. Numită anterior Automatizare OLE, Automatizare este un standard industrial și o caracteristică a Component Object Model (COM).) sau Dynamic Data Exchange (DDE) (Dynamic Data Exchange (DDE): Un protocol stabilit pentru schimbul de date între programele bazate pe Microsoft Windows.) pentru a comunica cu alte aplicații Windows cum ar fi Microsoft Excel și să apelați funcții din biblioteci cu legare dinamică (DLL) (Bibliotecă cu legare dinamică: Set de rutine apelabile din procedurile VBA, încărcate și legate în aplicație la timpul de execuție.) Windows.

Manipularea succesivă a înregistrărilor.  Aveți posibilitatea de a utiliza VBA pentru a parcurge un set de înregistrări, pe rând, și pentru a efectua o operație cu fiecare înregistrare. Dimpotrivă, macrocomenzile lucrează cu întregul set de înregistrări deodată.

Trecerea argumentelor la procedurile VBA.  Aveți posibilitatea să setați argumente pentru acțiunile din macrocomenzi în partea inferioară a ferestrei Macrocomandă când creați macrocomanda, dar nu aveți posibilitatea să le modificați când macrocomanda este în execuție. Prin utilizarea codului VBA, însă, aveți posibilitatea să treceți argumentele codului la momentul execuției sau aveți posibilitatea să utilizați variabile pentru argumente — ceea ce nu este posibil în macrocomenzi. Aceasta vă oferă o mare flexibilitate a execuției procedurilor VBA.

V.APLICAȚIA PRACTICĂ

V.1. FUNCȚIONAREA APLICAȚIEI

Orice persoană care a lucrat cu un calculator a întâlnit un aspect destul de agasant: o sumă de activități care trebuie executate în mod repetat la anumite intervale de timp mai mult sau mai puțin egale. Chiar dacă aceste activități sunt necesare, repetarea lor nu devine, în nici un caz ceva plăcut. Particularizând la bazele de date, aceste acțiuni pot implica mai multe operații de introducere a datelor executate repetat, apelarea telefonică a unui număr stocat în baza de date, trimiterea unui mail la o adresă stocată, citirea directă a mail-urilor recepționate, pe calculator direct din baza de date, tipărirea de rapoarte în orice formă, rularea altei aplicații, etc.

Automatizări ale Access-ului au apărut încă de la primele versiuni, pe măsură ce acestea au evoluat a crescut și numărul activităților cu posibilitatea de a fi automatizate.

Ca orice realizare, o aplicație trebuie să vină în întâmpinarea rezolvării unei probleme, deci am încercat să realizez o automatizare a unei baze de date, care chiar dacă are stocate date fictive, acestea pot fi oricând înlocuite de date adevărate, care pot satisface o parte din nevoile, unei structuri militare de nivel superior, de a stoca și utiliza date despre unitățile subordonate.

Aplicația practică, care rulează folosind formele Access-ului, realizează o automatizare a bazei de date. Aceasta, prin interfața creată în formularul principal, oferă acces direct către anumite părți ale bazei de date sau către alte aplicații rezidente sub Windows care pot folosi direct date stocate în baza de date.

Aplicația are în componență două tabele care conțin o sumă de date exploatată prin intermediul formelor ce execută acțiuni în mare parte automatizate.

Baza de date se deschide cu formularul Start (fig 10.) ce conține o atenționare privind proprietatea intelectuală a aplicației (acest formular poate fi setat să nu mai apară la o deschidere ulterioară a bazei de date).

Nota Autorului (fig 11.) informează asupra datei și orei la care a fost deschisă aplicația, și asupra regimului datelor conținute în baza de date. Acest formulat are un timp de apariție limitat prin funcția Timer (5 sec.), timp în care nu se poate efectua nici o operație în baza de date.

Figura 10.

Figura 11

La expirarea funcției Timer sa închide automat formularul nota autorului și se deschide formularul Formular principal (figura 12) care este de altfel și “panoul de comandă “ al aplicației.

Figura12

Butonul poate adăuga noi înregistrări în baza de date, direct fără a mai opera în tabelele aplicației. La click, acest buton se transformă într-un buton ce permite operația inversă (reafișarea în totalitate a înregistrărilor din baza de date).

În formularul interfață sunt conținuta și butoanele de automatizare, care prin secvențe de cod sau macrocomenzi execută diferite operații.

Butonul declanșează o secvență de cod care preia numărul de telefon al unității (fig 13.) din înregistrarea curentă și îl transmite aplicației Phone Dialer, prin intermediul căreia se poate comunica printr-o linie telefonică cu orice număr stocat în baza de date.

Figura 13.

execută o căutare în baza de date după anumite criterii ce pot fi selectate din forma ce apare (fig.14.) la acționarea acestui buton.

Figura 14.

Butonul execută o legătură spre Outlook Expres de unde se poate verifica poșta electronică, sau se pot trimite mesaje.

O altă cale mult mai rapidă de a verifica poșta electronică se mai poate face și prin acționarea butonului aceasta făcându-se direct din baza de date.(fig.15.), iar butonul ce a declanșat această acțiune se va transforma într-un buton care asigura operația inversă. de revenire la interfața inițială.

Figura 15.

Pentru o extragere eficientă a informațiilor, butonul deschide o structură bine determinată, (figura 18) de formulare ce permit extragerea informațiilor din baza de date, neredundant, cu un maximum de eficiență.

Chiar dacă limbajul Morse este tot mai puțin folosit în comunicațiile militare am introdus și un buton care permite transmisia de mesaje codate în limbaj Morse (fig.16) prin calculatorul, conectat la o stație de emisie-recepție.

Figura 16.

realizează o completare cu informații a ecranului. Și acest buton are corespondent pentru operația inversă: care permite revenirea la interfața originală.

În partea inferioară a ecranului se mai găsesc două link-uri către două adrese de Internet care conțin informații utile: către site-ul Academiei Forțelor Terestre și către site-ul Ministerului Apărării Naționale.

Ultimul, dar nu și cel din urmă buton al interfeței este un buton foarte util în anumite situații, situații în care dorim să salvăm modificările fără prea multe comentarii și să părăsim aplicația.

V.2 OBIECTELE APLICAȚIEI

Toate obiectele din aplicația practică se regăsesc atât în figura 17. cât și în tabelul din anexa IV.

Figura17.

V.3 STRUCTURA DE RAPOARTE

CONCLUZII ȘI PROPUNERI

Chiar dacă Armata Română nu își poate permite achiziții de ultimă oră în domeniul hardware-ului acest neajuns poate fi suplinit prin dezvoltarea de softuri proprii orientate pe rezolvarea problemelor specific militare. Nu trebuie pentru aceasta investiții uluitoare ci doar niște investiții, hard, minime, și puțină „materie cenușie”, din care „materia cenușie” o avem. La mulți ani după producerea primului procesor, este târziu să ne luăm la întrecere cu firme de talia INTEL-ului, VIA, sau a altor firme de hard ce dețin tehnologii incredibile de fabricare a componontelor, dar nu este târziu și nici imposibil să creem soft care să rivalizeze cu cele mai mari firme de software.

Se pot rezolva multe dintre problemele armatei prin dezvoltare rețelei informatice, cert este că prin începerea construirii STAR-ului s-a început “DIGITIZAREA” comunicațiilor în armată, chiar dacă la 40 de ani după ARPANET, STAR-ul este un început…

După cum am afirmat și în introducerea acestei lucrări această lucrare se dorește a fi mai mult o idee decât o soluție și de aceea propun în primul rând, extinderea numărului de ore de Informatică pentru a putea fi abordate și alte părți ale informaticii;(doar suntem în secolul XXI), o inițiere în programare, sau alte domenii cu aplicabilitate directă în domeniul militar. Dacă acest lucru nu se poate realiza, se mai pot ajusta puțin programele pentru a atinge puțin mai profund anumite programe de aplicații punându-se mai mult accent pe studiul individual.

ANEXA I

ANEXA II

2.

3.

4.

5.

6.

7.

ANEXA III

MODULE CLASĂ ATAȘATE

Form cf

Option Compare Database

Private Sub cmdn1_Click()

On Error GoTo Err_cmdn1_Click

Dim stDocName As String

stDocName = "cf150"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn1_Click:

Exit Sub

Err_cmdn1_Click:

MsgBox Err.Description

Resume Exit_cmdn1_Click

End Sub

Private Sub cmdn4_Click()

On Error GoTo Err_cmdn4_Click

Dim stDocName As String

stDocName = "cf450"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn4_Click:

Exit Sub

Err_cmdn4_Click:

MsgBox Err.Description

Resume Exit_cmdn4_Click

End Sub

Private Sub cmdn2_Click()

On Error GoTo Err_cmdn2_Click

Dim stDocName As String

stDocName = "cf150-300"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn2_Click:

Exit Sub

Err_cmdn2_Click:

MsgBox Err.Description

Resume Exit_cmdn2_Click

End Sub

Private Sub cmdn3_Click()

On Error GoTo Err_cmdn3_Click

Dim stDocName As String

stDocName = "cf300-450"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn3_Click:

Exit Sub

Err_cmdn3_Click:

MsgBox Err.Description

Resume Exit_cmdn3_Click

End Sub

Private Sub Form_Load()

Me.SetFocus

End Sub

Form formular principal

Option Compare Database

Option Explicit

Private Sub cmdDial_Click()

On Error GoTo Err_cmdDial_Click

Dim nrTel As String

Dim ctrlAnterior As Control

Const ERR_OBJNOTEXIST = 2467

Const ERR_OBJNOTSET = 91

Set ctrlAnterior = txtTel

If TypeOf ctrlAnterior Is TextBox Then

nrTel = IIf(VarType(ctrlAnterior) > V_NULL, ctrlAnterior, "")

ElseIf TypeOf ctrlAnterior Is ListBox Then

nrTel = IIf(VarType(ctrlAnterior) > V_NULL, ctrlAnterior, "")

ElseIf TypeOf ctrlAnterior Is ComboBox Then

nrTel = IIf(VarType(ctrlAnterior) > V_NULL, ctrlAnterior, "")

Else

nrTel = ""

End If

Application.Run "utility.wlib_AutoDial", nrTel

Exit_cmdDial_Click:

Exit Sub

Err_cmdDial_Click:

If (Err = ERR_OBJNOTEXIST) Or (Err = ERR_OBJNOTSET) Then

Resume Next

End If

MsgBox Err.Description

Resume Exit_cmdDial_Click

End Sub

Private Sub cmdExit_Click()

DoCmd.Quit

End Sub

Private Sub cmdCaută_Click()

On Error GoTo Err_cmdCaută_Click

Screen.PreviousControl.SetFocus

DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

Exit_cmdCaută_Click:

Exit Sub

Err_cmdCaută_Click:

MsgBox Err.Description

Resume Exit_cmdCaută_Click

End Sub

Form help morse

Option Compare Database

Private Sub Form_Load()

Me.SetFocus

End Sub

Private Sub Form_Timer()

Me.SetFocus

DoCmd.Close acForm, Me.Name

End Sub

Form misiuni

Option Compare Database

Private Sub cmdAcd_Click()

On Error GoTo Err_cmdAcd_Click

Dim stDocName As String

stDocName = "Acd"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdAcd_Click:

Exit Sub

Err_cmdAcd_Click:

MsgBox Err.Description

Resume Exit_cmdAcd_Click

End Sub

Private Sub cmdPb_Click()

On Error GoTo Err_cmdpb_Click

Dim stDocName As String

stDocName = "pb"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdpb_Click:

Exit Sub

Err_cmdpb_Click:

MsgBox Err.Description

Resume Exit_cmdpb_Click

End Sub

Private Sub cmdPe_Click()

On Error GoTo Err_cmdpe_Click

Dim stDocName As String

stDocName = "pe"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdpe_Click:

Exit Sub

Err_cmdpe_Click:

MsgBox Err.Description

Resume Exit_cmdpe_Click

End Sub

Private Sub cmdPk_Click()

On Error GoTo Err_cmdpk_Click

Dim stDocName As String

stDocName = "pk"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdpk_Click:

Exit Sub

Err_cmdpk_Click:

MsgBox Err.Description

Resume Exit_cmdpk_Click

End Sub

Private Sub cmdomsp_Click()

On Error GoTo Err_cmdomsp_Click

Dim stDocName As String

stDocName = "omsp"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdomsp_Click:

Exit Sub

Err_cmdomsp_Click:

MsgBox Err.Description

Resume Exit_cmdomsp_Click

End Sub

Form nota autorului

Option Compare Database

Private Sub Form_Load()

Me.Caption = "DESCHIS ASTĂZI: " & Date & " ORA: " & Time

Me.SetFocus

End Sub

Private Sub Form_Timer()

DoCmd.Close acForm, Me.Name

End Sub

Form sos

Option Compare Database

Private Sub cmdn1_Click()

On Error GoTo Err_cmdn1_Click

Dim stDocName As String

stDocName = "sos150"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn1_Click:

Exit Sub

Err_cmdn1_Click:

MsgBox Err.Description

Resume Exit_cmdn1_Click

End Sub

Private Sub cmdn4_Click()

On Error GoTo Err_cmdn4_Click

Dim stDocName As String

stDocName = "sos450"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn4_Click:

Exit Sub

Err_cmdn4_Click:

MsgBox Err.Description

Resume Exit_cmdn4_Click

End Sub

Private Sub cmdn2_Click()

On Error GoTo Err_cmdn2_Click

Dim stDocName As String

stDocName = "sos150-300"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn2_Click:

Exit Sub

Err_cmdn2_Click:

MsgBox Err.Description

Resume Exit_cmdn2_Click

End Sub

Private Sub cmdn3_Click()

On Error GoTo Err_cmdn3_Click

Dim stDocName As String

stDocName = "sos300-450"

DoCmd.Close

DoCmd.OpenReport stDocName, acPreview

Exit_cmdn3_Click:

Exit Sub

Err_cmdn3_Click:

MsgBox Err.Description

Resume Exit_cmdn3_Click

End Sub

Private Sub Form_Load()

Me.SetFocus

End Sub

MODULE

Modul start

Option Compare Database

Option Explicit

Function OpenStart() As Boolean

On Error GoTo Openstart_Err

If exDublura() Then

DoCmd.Close

Else

If (CurrentDb().Properties("StartupForm") = "start" Or _

CurrentDb().Properties("StartupForm") = "Form.start") Then

Forms!start!optascundesf = False

Else

Forms!start!optascundesf = True

End If

End If

Openstart_Exit:

Exit Function

Openstart_Err:

Const conPropertyNotFound = 3270

If Err = conPropertyNotFound Then

Forms!start!optascundesf = True

Resume Openstart_Exit

End If

End Function

Function optascundesf()

On Error GoTo optascundesf_Err

If Forms!start!optascundesf Then

CurrentDb().Properties("startupForm") = "nota autorului"

Else

CurrentDb().Properties("startupForm") = "start"

End If

Exit Function

optascundesf_Err:

Const conPropertyNotFound = 3270

If Err = conPropertyNotFound Then

Dim db As DAO.Database

Dim prop As DAO.Property

Set db = CurrentDb()

Set prop = db.CreateProperty("startForm", dbText, "start")

db.Properties.Append prop

Resume Next

End If

End Function

Function CloseForm()

DoCmd.Close

DoCmd.OpenForm ("nota autorului")

End Function

Function exDublura() As Boolean

On Error GoTo exDublura_Err

Dim bolValIntoarsa As Boolean

bolValIntoarsa = False

If CurrentDb().Properties("Replicable") = "T" Then

bolValIntoarsa = True

Else

bolValIntoarsa = False

End If

exDublura_Exit:

exDublura = bolValIntoarsa

Exit Function

exDublura_Err:

Resume exDublura_Exit

End Function

BIBLIOGRAFIE

a) CARȚI

Allen Browne , Alison Balter….”Bazele Access 95”…..Editura TEORA București 1996.

Bryan Pfaffenberger , David Wall …..“Dicționar calculatoare & Internet”…… Editura București TEORA 1999 .

Grupul BDASEIG ,……. “Baze de date; Fundamente teoretice și practice” ,………. Editura Infomega București 2002 .

Joe Habraken ,……”Microsoft Office 2000 8 in 1”,……..Editura TEORA, București 2001.

John Clark Craig , Jeff Webb…“Microsoft Visual Basic 5.0 –Manualul Programatorului”………Editura TEORA București 1997.

Jones Edward,……”Access 2000 și VBA. Ghid de dezvoltare.”,….. Editura MULTIMEDIA 1999.

Kovacs Sandor,…….”ACCESS; Implementarea bazelor de date”,….Editura Albastră, Cluj-Napoca 2003

Paul McFedries……”Ghidul boboculiui pentru Access”…….Editura TEORA București 1996.

Kovacs Sandor,…….”ACCESS; Programarea bazelor de date”,….Editura Albastră, Cluj-Napoca 2003

* * * , “Visual Basic 6 ; Baze de date”,…….Editura TEORA , București 2001.

* * * , ……. “Baze de date; Organizare, Proiectare și Implementare.”…..Editura ALL EDUCAȚIONAL, București, 1995.

* * * ,……….”Baze de date”,……Editura ECONOMICĂ , București, 1999.

* * * , ……”Tehnlogia bazelor de date Access 2000”,………Editura ECONOMICĂ, București,2000

* * * ,……..”Baze de date Access”,……..Editura CISON, București, 2000.

* * * ….”Visual Basic 6; Baze de date.”,………Editura TEORA, Bucure;ti , 2001.

* * * ,…..” Utilizare Microsoft Access 2000”,…………..Editura TEORA, București, 2000,

b)REVISTE DE SPECIALITATE

PC Magazine ROMÂNIA, Iunie 2001

PC Magazine ROMÂNIA, Iulie 2002

Chip ROMÂNIA, APRILIE 2003

Computerworld ROMÂNIA, Iulie 2001

NET REPORT ROMÂNIA, MARTIE 2003

c) SITE-URI

http://www.kappa.ro/idgro/pcworld/pw7r10-6.html

http://www.infoiasi.ro/~val/VBA/

http://www.epress.ro/er/online/no23/er/vbasic.html

http://microsoft.com/office/

http://www.training.computerland.ro/Courses/PC4104E.HTML

http://www.pcconcrete.ro/phtml/r11238n.html

http://lci.cs.ubbcluj.ro/~tzutzu/Appl/Aplicatii.htm

http://lci.cs.ubbcluj.ro/~tzutzu/Didactic/Didactic.htm

http://books.anet.ro/

http://tech.republic.ro/

Similar Posts

  • Controlul Adaptiv al Traficului Dintr O Intersectie Semaforizata

    Controlul adaptiv al traficului dintr-o intersecție semaforizată Proiect de diplomă CUPRINS Introducere Capitolul 1. Traficul rutier 1.1 Generalități 1.2 Istoria semafoarelor 1.3 Evoluția tehnologică 1.4 Automate de dirijare a circulației Capitolul 2. Microncontrolerul ATMEGA 328 2.1 Microcontrolere – Generalități 2.2 Caracteristici generale și schema bloc 2.3 Porturi de intrare/ieșire 2.4 Timer Capitolul 3. Sistemul de…

  • Magazin Virtual

    LUCRARE DE LICENȚĂ Magazin Virtual CUPRINS: 1. Aspecte introductive 1.1 Apariția E-Business-ului 1.2 Schimbări apărute odată cu dezvoltarea economiei digitale 1.3 E-Strategy, E-Business – IBM 1.4 Managementul informației, operații cu afaceri – Bill Gates 1.5 E-Business în România: evoluții și tendințe 1.6 E-Business: Avantaje vs Dezavantaje 2. Securitatea tranzacțiilor online 2.1. Securitatea datelor pe Internet…

  • Aplicatie Informatica Pentru Evidenta Productiei LA Sc Sa

    Cuprins Introducere I. Sistemul informațional al managementului operațional al producției ……………………………………………… 1.1. Subactivitățile managementului operațional al producției……….. 1.1.1. Subactivitatea programarea producției ……………………………… 1.1.2. Subactivitatea lansarea producției……………………………………… 1.1.3. Sub activitatea urmărirea producției………………………………….. II. Analiza sistemului informațional existent privind gestiunea producției la S.C. PAN GROUP S.A……….. 2.1. Prezentarea agentului economic………………………………………….. 2.2. Prezentarea sectoarelor de producție……………………………………. 2.3 Descrierea…

  • Aplicatie Web Pentru Gestionarea Relatiei Operator Admin

    Aplicație WEB pentru gestionarea relației operator-admin INTRODUCERE Datorită faptului că trăim într-o societate care evoluează încontinuu, putem afirma că și transportul a evoluat. Transportul se referă la deplasarea dintr-un loc în altul a bunurilor, informațiilor sau persoanelor. Deși pe piața românească există numeroase agenții de transport, în special cele de autocare, foarte puține dețin o…

  • Elaborarea Paginii Web Pentru O Firma Taxi cu Posibilitati de Accesare Si Folosire a Serviciilor Prestate

    CUPRINSul INTRODUCERE………………………………………………………………………………………………………………………4 1. NOȚIUNI TEORETICE……………..…………………………………………..……………………6 1.1. Prezentarea tehnologiilor World Wide Web ……………………………………………………………………6 1.2. Arhitectura Client – Server………………………..……………………………..…………………………7 1.2.1. Noțiuni generale………………….……………..……………………………………………..7 1.2.2. Arhitectura two-tier……………………………………………………….…………….10 1.2.3. Arhitectura trhee-tier …………………………….……………….……………………………..10 1.3. Concepția de bază de date ……………………………………….……………………………….11 1.3.1. Definirea sistemului de gestiune a bazelor de date………….……………………………11 1.3.2. Etapele de realizare a bazelor de date…………………………….………………………11 1.3.3. Obiectivele unui sistem…

  • Gestiunea Cd Urilor Dintr O Biblioteca de Firma

    INTRODUCERE Informația este o notiune de larga generalitate si reprezinta traducerea legaturilor cauza-efect din lumea reala. Pentru a utiliza corect aceasta notiune este necesar sa se faca distinctia intre informatii si date. Informatia trebuie privita ca o triada a elementelor : entitate, atribut, valoare. Entitatea formeaza obiectul informatiei si este complet definita doar daca se…