CATEGORII DOCUMENTE |
Limbaje de programare folosite în informatice de gestiune
O aplicatie ACCESS este realizata în totalitate din configurarea corespunzatoare a unor obiecte si este plasata într-un singur fisier cu extensia MDB sau MDE, care contine deci atât schema, datele efective cât si modulele de manipulare.
Obiectele aplicatiei sunt plasate în colectii de obiecte, într-o structura ierarhic-arborescenta, din care asa cum am mai aratat, 7 sunt de rang superior - Tabele (Tables), Relatii ( Relationships),Cereri (Queries), Formulare (Forms), Rapoarte (Reports), Macro-instructiuni (Macros si Module de cod (Modules
Explicatie. * Colectie de obiecte = Obiecte care provin din aceeasi clasa** de obiecte - deci au acelasi tip de proprietati si metode – si care pot fi privite (si folosite) ca un tablou de obiecte. Concept care defineste tipurile de proprietati si metode dupa care se pot materializa (crearea unei entitati a clasei de obiecte, prin fixarea proprietatilor si metodelor obiectului respectiv) niste obiecte.
Explicatie. ** Clasa de obiecte = Concept care defineste tipurile de proprietati si metode dupa care se pot materializa (crearea unei entitati a clasei de obiecte, prin fixarea proprietatilor si metodelor obiectului respectiv) niste obiecte.
ACCESS este un sistem care foloseste în realizarea aplicatiilor în special, obiecte, care se gasesc în diferite biblioteci de obiecte. Automat, ACCESS lucreaza cu 3 biblioteci ale MS Office si anume Microsoft Access 8.0, DAO 3.5 si VBA.
O biblioteca de obiecte contine în general pe lânga obiecte individuale si colectii de obiecte care contin si o descriere a lor.
Pentru a se putea face deosebirea între numele obiectelor si colectiilor, acestea din urma sunt la plural (se termina cu s).
Colectiile de obiecte si obiectele individuale se gasesc într-o structura ierarhic-arborescenta, între ele existând relatii de dependenta care vor fi prezentate în schemele de mai jos.
Observatie. Schemele prezentate vor fi folosite în special la referirea obiectelor în sectiunea de programare la nivel obiect.
Contine obiectele generale necesare realizarii unei aplicatii, îndeosebi prezentarea si preluarea datelor.
Aceste obiecte, sunt folosite pentru crearea interfetei utilizator a aplicatiilor proiectate în ACCESS. Ele permit realizarea unor aplicatii deosebit de 'prietenoase', cu un efort minim, care sunt concepute în 'standardul' aplicatiilor ce ruleaza pe platforma Windows 95/98. În acest moment, ACCESS este considerat cel mai performant produs pentru realizarea aplicatiilor client.
Biblioteca Microsoft Access 8.0 contine în principal 4 obiecte de rang superior: formulare, rapoarte, macro-uri(cea mai mare parte dintre comenzile acestora se preiau din obiectul DoCmd) si module.
Aceasta biblioteca mai cuprinde:
Application – care reprezinta chiar aplicatia Access.
Screen – se refera la aranjarea obiectelor pe ecran.
References – contine legaturile catre alte biblioteci care se gasesc pe platforma Windows, si pe care aplicatia Access le poate eventual folosi, daca se precizeaza acest lucru (în Tools | References).Asa cum am aratat, automat cele trei biblioteci prezentate mai sus sunt setate pentru a putea fi folosite.
Structura obiectelor din biblioteca Microsoft Access 8.0 este prezentata în schema de mai jos
References FormsModules ReportsDoCmd Screen
Controls Module Controls Module**
Application
Legenda : = colectie de obiecte; = obiect.
Forms - Colectia formularelor aplicatiei, care se gasesc la un moment dat deschise.
Controls Controalele care se gasesc în formulare.
Module Cod VBA care poate fi folosit numai în formularul parinte
Reports - Colectia rapoartelor aplicatiei, care se gasesc la un moment dat deschise.
Controls Controalele care se gasesc în rapoarte.
Module Cod VBA care poate fi folosit numai în raportul parinte
Modules - Colectia modulelor de cod ale aplicatiei. Asa cum se observa, codul VBA introdus la acest nivel poate fi folosit de catre toate obiectele aplicatiei.
DoCmd - Contine majoritatea comenzilor pe care le pune la dispozitie Access-ul si care pot fi folosite fie în codul VBA fie la formarea macro-instructiunilor.
Contine obiectele generale necesare realizarii bazei de date. Ea poate sa lucreze cu trei tipuri de formate de baze de date si anume:
Microsoft Jet – folosit de Access ,VB,VC++ sau Excel, pe care o vom studia în continuare.
Microsoft ISAM – folosit de FoxPro, Dbase, Paradox, Lotus sau HTML
ODBC(Open DataBase Connectivity) – folosit pentru Microsoft SQL Server
Principalele obiecte si colectii de obiecte continute de Microsoft Jet, sunt urmatoarele:
DBEngine – Obiectul superior în ierarhia DAO
Workspace – Sesiunea DAO activa
Error – Informatii despre erorile din baza de date
Database – Data de baze deschisa
User, Group – Utilizatorii si grupele de utilizatori, folosite la securizarea BD.
TableDef – Tabelele BD.
QueryDef – Cererile BD.
Relation – Relatiile BD.
Field – Câmpurile tabelelor, cererilor, indecsilor, relatiilor sau ale recordset-urilor.
Index – Tabelele de indecsi asociate câmpurilor din tabele sau recordset-uri.
Parameter – parametrii folositi de cereri.
Recordset – Înregistrarile folosite de o tabela sau cerere.
Container – Informatii de securitate despre obiectele din BD.
Document – Informatii de securitate despre un anumit obiect al BD.
Structura obiectelor din biblioteca DAO 3.5 este prezentata în cele doua scheme de mai jos
Databases
TableDefsQueryDefs Relations Recordsets Containers
Fields Indexes FieldsParameters Fields Fields Documents
Fields
Pentru simplificare nu s-au reprezentat decât colectiile. Se va tine cont ca în structura ierarhica, la o colectie se va atasa un obiect, de care se va lega în continuare o colectie s.a.m.d.
Structura folosita pâna la Database este prezentata în schema de mai jos.
Databases
Workspace
DBEngine Users
Errors
Groups
În general, aceasta structura se foloseste mai putin în realizarea aplicatiilor ACCESS.
Contine obiectele generale necesare scrierii codului de program, a testarii si corectarii acestuia (Debug) sau a gestionarii erorilor (ErrObject).
Observatie. S-ar parea ca exista o contradictie între denumirea de obiect de rang superior si plasarea acestora destul de jos în ierarhiile prezentate mai sus. Acest lucru se datoreaza în primul rând faptului ca bibliotecile de obiecte prezentate, sunt create pentru a fi folosite si de alte aplicatii de pe platforma Windows –caz în care este necesara descrierea detaliata a obiectelor folosite - iar în al doilea rând faptului, ca în Access, descrierea partii superioare a ierarhiei prezentate, este optionala, majoritatea aplicatiilor ne având nevoie sa foloseasca decât ierarhii care pornesc de la cele 7 obiecte de rang superior.
Astfel, în Access, baza de date cu care se lucreaza este automat folosita de colectia de obiecte Databases. Deci, ierarhia DAO nu mai trebuie sa porneasca de la DBEngine si nici macar de la colectia Databases, ci de la colectiile continute de obiectul Database - care este chiar baza de date a aplicatiei Access –. adica de la tabele, relatii sau cereri, care sunt tocmai obiectele de rang superior.
Tot asa, în MS ACCESS Objects, obiectul Application este implicit aplicatia cu care lucram, ne fiind necesar a fi declarat. Deci si în acest caz, se porneste în construirea aplicatiei tot de la obiectele de rang superior, si anume de la formulare, rapoarte, macro-uri sau module.
Asa cum am aratat obiectele se gasesc într-o structura ierarhic-arborescenta. Obiectele au de asemenea un nume, care poate fi implicit(adica stabilit de sistem) sau dat de utilizator.
Deoarece exista posibilitatea ca mai multe obiecte sa aiba acelasi nume, atunci când se face referire la un obiect este necesara calificarea numelui cu întreaga structura ascendenta a obiectelor de care acesta este dependent.(asemanator cu descrierea caii unui fisier sau folder de pe un disc). Acest lucru nu este obligatoriu daca nu se creeaza ambiguitati.
Semnele de calificare sunt punctul <.>, care se foloseste în general pentru obiecte ale caror nume sunt date de sistem, sau semnul exclamarii(bang) <!>, folosit la obiectele cu numele stabilit de utilizator. Tot la fel se pot referiri si proprietatile sau metodele unui obiect.
Am vazut ca obiectele apartin unor colectii. Referirea la un obiect dintr-o colectie - modalitatea de referire a colectiei se face potrivit metodei prezentate mai sus - se poate face în 3 feluri
Fie folosind modalitatea de calificare a obiectului cu colectia din care face parte( deci <referirea la colectie> , <semn de calificare>, <numele obiectului>)
Fie folosind indexarea colectiei cu un numar care reprezinta pozitia în colectie a obiectului respectiv (asemanator cu referirea unui element dintr-un tabel Numerotarea elementelor unei colectii de obiecte se porneste de la 0(zero). Deci <referirea la colectie> , <(>, <numar în cadrul colectiei>, <)>.
Fie la fel ca mai sus dar folosind - ca pe un sir de caractere - numele obiectului în loc de index Deci <referirea la colectie> , <(>, <'nume obiect'>, <)>.
Observatia 1. Daca se doreste sa se faca referire în codul VBA la formularul sau raportul parinte , fara a se mai face descrierea structurii ierarhice superioare, se poate folosi cuvântul cheie ME.
Observatia 2. Semnele care se pot folosi pentru a se specifica un obiect sunt parantezele drepte <[nume_obiect]>. Ele sunt folosite obligatoriu atunci când în numele obiectului se gasesc spatii.
Exemple cu obiecte din biblioteca ACCESS 8.0
Forms!Date - se face referire la formularul deschis cu numele DATE
Forms! date de bilant se refera formularul deschis 'date de bilant'. Observati parantezele drepte folosite pentru ca numele formularului contine spatii.
Forms![vinzari].RecordSource - se face referire la proprietatea Record Source al formularului deschis 'vinzari'. Parantezele drepte pot fi scoase. Observati punctul - semnul de calificare pentru o denumire data de sistem.
Forms![vinzari]!valoare se refera controlul 'valoare' a formularul deschis vinzari'.
Forms!('vinzari')!valoare identic cu mai sus, dar se foloseste a treia posibilitate de precizare a unui obiect dintr-o colectie si anume printr-un sir de caractere care reprezinta numele obiectului.
Forms!(0)valoare identic cu mai sus, dar se foloseste a doua posibilitate de precizare a unui obiect dintr-o colectie si anume prin folosirea numarului de ordine al obiectului în cadrul colectiei. (am presupus ca formularul vinzari' a fost primul deschis, primind indexul 0 in cadrul colectiei Forms.
Me.FilterOn - se refera proprietatea FilterOn a formularului în care se gaseste codul VBA.
Me!Altul.Visible - se refera proprietatea Visible a controlului 'Altul' a formularului în care se gaseste codul VBA
Exemple cu obiecte din biblioteca DAO 3.5
DBEngine.Workspaces(0).NAME - se refera la 'spatiul de lucru implicit, activ, în care se va gasi o baza de date DAO / Proprietatea 'NAME'. Aceasta este 'Default Workspace
DBEngine.Workspaces(0).Databases(0).NAME - se refera la baza de date DAO, deschisa în spatiul de lucru activ / Proprietatea 'NAME'. Aceasta este daca se lucreaza din Access, chiar numele fisierului MDB al aplicatiei.
DBEngine.Workspaces(0).Databases(0).TableDefs(2).NAME - se refera la a treia tabela din baza de date DAO, deschisa în spatiul de lucru activ / Proprietatea 'NAME'. Aceasta este în exemplul dat MISCARE
DBEngine.Workspaces(0).Databases(0).TableDefs!Miscare.Fields(0).NAME - se refera la numele primului câmp al tabelei descrise mai sus, 'MISCARE'. Aceasta este în exemplul dat 'CodProdus'.
DBEngine.Workspaces(0).Databases(0).TableDefs!Miscare!CodProdus.Type - se refera la tipul câmpului descris mai sus, 'CodProdus'.
Observatie. În exemplele de mai sus DBEngine, poate lipsi, fiind implicit.
În general, formularele sunt de doua feluri:
Formulare legate de o tabela. Acestea permit actualizarea datelor într-una sau mai multe tabele, direct sau prin intermediul unui select query (creat anterior sau definit direct în limbajul SQL) - care evident nu trebuie sa fie read only Aceasta modalitate de lucru, permite o asistare(îndrumare) a utilizatorului în aceasta activitate, functie de contextul respectiv.
Termenul folosit pentru a defini un obiect care este configurat în functie de un anumit context este “personalizare”.
Putem considera un formular legat ca pe un obiect care faciliteaza operatiile de actualizare într-o tabela a unei baze de date, permitând în principal accesarea prin intermediul unor obiecte - denumite controale si care vor fi prezentate mai târziu în acest capitol - a câmpurilor acelei tabele.
Observatie. Corect ar trebui folosit termenul de subschema deoarece se pot accesa prin intermediul unui select query mai multe tabele, dar pentru simplificare se va folosi în continuare notiunea de tabela.
Deci, putem considera acest tip de formular obiectul care permite legarea de o tabela, iar controlul, obiectul care permite legarea de câmpurile tabelei respective.
În acest capitol se va prezenta acest tip de formular.
Formulare nelegate. Acestea sunt folosite în special, pentru a permite utilizatorului sa lanseze în executie anumite formulare, rapoarte sau macro-uri.
Un asemenea formular reprezinta practic un obiect cu ajutorul caruia se pot activa dintr-o aplicatie Access, în general tot prin intermediul unor controale, evident nelegate numite butoane de comanda, a unor obiecte din respectiva aplicatie sau din afara ei, de pe platforma Windows
Acelasi lucru se mai poate face si prin crearea unui meniu personalizat pentru respectiva aplicatie.
Asa cum se observa din figura de mai jos, un formular se poate afla în trei stari. De obicei se folosesc urmatoarele doua forme:
Design View în proiectare
Form View în executie
Trecerea de la o stare la alta se poate face prin meniul contextual sau prin pictograma specifica de pe toolsbar
Formularele au în general 3 parti, care sunt optionale:
Form Header – Reprezinta partea de început a unui formular. Apare o singura data si va fi prezenta tot timpul în partea superioara a ferestrei formularului. Se foloseste de obicei numai la formularele continue* pentru a afisa “capul de tabel” al formularului.
Form Footer - Reprezinta partea de sfârsit a unui formular. Apare o singura data si va fi prezenta tot timpul în partea inferioara a ferestrei formularului. Se foloseste de obicei, pentru a introduce în formulare controale de lansare a unor comenzi, numite butoane de comanda sau de afisare a unor informatii de sinteza.
Detail – Este cea mai importanta sectiune a unui formular. Ea se repeta pentru fiecare înregistrare a tabelei legate la un formular. Deci sectiunea detail se va repeta de atâtea ori câte înregistrari are tabela sau cererea atasata la formular.
În aceasta sectiune se vor introduce controale**, care vor fi legate la câmpurile tabelei formularului, în triplu scop si anume:
Vizualizarea înregistrarilor tabelei legate la formular.
Modificarea înregistrarilor tabelei.
Adaugarea de noi înregistrari în tabela legata la formular.
În functie de numarul de zone de detail deci de înregistrari ale tabelei legate la formular - care se pot vizualiza în acelasi timp în fereastra formularului (proprietatea Default View), acestea se clasifica în:
Continous Forms* sau Tabular Form care prezinta toate înregistrarile în mod continuu, în scroll în asa fel încât într-o fereastra vor apare mai multe sectiuni detail si anume atâtea câte încap. Este cel mai indicat tip de formular, pentru introducerea de date, cu conditia ca numarul de câmpuri sa nu fie prea mare sau de mari dimensiuni (practic este bine ca toate câmpurile sa încapa pe o linie a formularului).
Single Form sau Columnar Form – se caracterizeaza prin aceea ca în fereastra formularului nu se va afisa decât o înregistrare (o singura sectiune de detail se poate vedea la un moment dat). Este folosit în general pentru introducerea de date în tabele în care nu încap pe o linie toate câmpurile tabelei(în general în tabele cu foarte multe câmpuri sau în tabele cu un numar nu prea mare de câmpuri dar care au dimensiuni mari).
Asa cum am aratat deja, câmpurile din tabela legata la formular sunt introduse în acesta prin intermediul unui anumit tip de obiecte programabile, denumite controale legate. Un asemenea control se va lega la un câmp din tabela atasata formularului, permitând vizualizarea într-un mod prietenos' a informatiilor din acesta referitoare la înregistrarile din zonele de detail vizibile si / sau modificarea datelor corespunzatoare înregistrarii curente – adica ale aceleia care se gaseste în sectiunea de detail activa (cea care are cursorul.).
Obiectele programabile, sunt niste obiecte independente care au ca toate obiectele proprietati si metode. Totusi principala caracteristica a acestora este gradul foarte mare de personalizare care poate ajunge pâna la introducerea unor module de cod în acesta. Deci practic un asemenea obiect pe lânga posibilitatea de a îsi seta proprietatile(caracteristicile) la anumite valori, poate defini chiar unele metode personalizate, noi, - deoarece, evident o succesiune de instructiuni vor provoca o anumita actiune în sistemul de calcul.
Explicatie. *Personalizare reprezinta posibilitatea de modificare a caracteristicilor unui obiect în functie de contextul în care este folosit.
În afara de controale, sectiunile si chiar formularul sunt obiecte programabile.
Obiectele programabile, cu toate ca au un grad ridicat de personalizare, au si un mare grad de polimorfism – caracteristica unui grup de obiecte, de a prezenta utilizatorului o interfata foarte asemanatoare pentru configurarea acestora. Acest polimorfism este realizat prin intermediul unui control tab, care poate fi lansat prin activarea proprietatilor obiectului respectiv, ori din meniul contextual, ori prin pictograma specifica de pe toolsbar.
Asa cum se vede din figura alaturata, un asemenea obiect ofera o caseta cu 4 pagini, pentru fixarea caracteristicilor (a cincia pagina – All reprezinta o regrupare a celorlalte 4 pagini), care au urmatorul rol:
Pagina Format – cuprinde proprietatile referitoare la modul de prezentare a obiectului.
Pagina Data – cuprinde informatiile necesare pentru legarea controlului respectiv la datele din baza de date. De exemplu pentru un formular, exista proprietatea Record Source – stabilirea tabelei sau a cererii de care se leaga formularul - , iar pentru un control Text Box, proprietatea Control Source fixeaza câmpul din tabela asociata de care se leaga respectivul control.
Pagina Other – contine restul informatiilor, cea mai importanta fiind Name care va stabili numele controlului, necesar atunci când se face referire la acesta ori din VBA ori din macro-uri ori din expresii(de exemplu cele folosite în cereri)
Pagina Event este folosita pentru introducerea modulelor de cod necesare obiectului respectiv, scrise în VBA(Visual Basic for Application
În ACCESS, codul de program indiferent de locul unde se gaseste, nu este ca în programarea clasica o secventa de instructiuni care au un început si un sfârsit si care reprezinta actiunile pe care le va efectua sistemul de calcul într-o ordine precisa, stabilita (programare continua), ci niste module (subrutine) care se executa numai atunci, când, anumite obiecte ale aplicatiei, trec în anumite stari precise, definite, numite evenimente (programare discontinua).
De exemplu miscarea mousu-lui sau click pe mouse sau apasarea pe o tasta când focusul se afla pe un anumit obiect(un formular, o caseta de text, un buton de comanda etc.) sau aparitia unei erori sau scurgerea unui anumit interval de timp reprezinta evenimente ale obiectelor respective.
Deci în aceasta pagina sunt afisate toate evenimentele la care obiectul respectiv poate raspunde. În acest fel utilizatorul poate atasa evenimentului respectiv o metoda noua, în general printr-o procedura VBA (sau printr-o macro-instructiune sau o expresie) care se va executa numai atunci când se va produce respectivul eveniment. Construirea metodei, care se va declansa la producerea evenimentului respectiv, este asistata de un Wizard
Explicatie. Focusul reprezinta obiectul care este activ (care are cursorul) deci asupra caruia se vor face toate actiunile în momentul respectiv.
În Windows, obiectele programabile(în special controale) sunt create de anumite sisteme de programare – Visual Basic, Visual C sau Delphi numite servere de aplicatii, care eventual pot sa si le foloseasca.
Alte aplicatii pot numai folosi obiectele programabile – ca de exemplu Access. Acestea se numesc aplicatii client.
Acest procedeu este cel mai înalt nivel de transmitere a informatiilor între aplicatiile care functioneaza pe o platforma Windows si se numeste “Automation
Observatie. Reamintesc, ca mai exista doua nivele de transmitere a datelor pe o platforma Windows, si anume:
transferul simplu prin Cut sau Copy si Paste, care se realizeaza prin intermediul memoriei clipboard
transferul prin procedeul OLE, prin Cut sau Copy si Paste Special, care permite odata cu transferul obiectului între aplicatii si posibilitatea de a activa respectivul obiect, la noua destinatie prin lansarea în executie a aplicatiei care l-a creat. În functie de felul în care se face transferul avem
Transfer încapsulat(embedded), care copiaza efectiv obiectul la noua destinatie.
Transfer prin legatura(linked), care nu transfera obiectul ci numai adresa acestuia, permitând accesul la obiectul original prin aceasta.
Procedeul Automation s-a realizat în prima etapa prin tehnologia OLE 2.1, acum folosindu-se cea denumita ActiveX.
Ceea ce este foarte important de retinut este ca un ActiveX este un obiect independent care poate fi folosit si personalizat într-o aplicatie, fara a fi necesara prezenta obiectului care la creat (aplicatia server).
Un ActiveX se executa în general în propriul sau fir de executie Deci o aplicatie Access se va executa pe mai multe fire de executie.
Explicatie. Fir de executie
Un sistem de calcul are în general un microprocesor care permite executarea instructiunilor. O aplicatie o privim ca pe un obiect care are instructiuni pe care le executa microprocesorul.
Daca lucram în sistem multitask (la un moment dat se executa mai multe aplicatii) microprocesorul trebuie sa execute simultan instructiuni din mai multe aplicatii. Pentru a face acest lucru se foloseste procedeul time-sharing. Prin acesta se împarte timpul microprocesorului în cuante de timp si se repartizeaza acestea - functie de o anumita politica de prioritati - fiecarei aplicatii. De exemplu daca avem 3 aplicatii atunci în cuanta 1 de timp se va executa aplicatia 1, în cuanta 2 aplicatia 2, în cuanta 3 aplicatia 3, dupa care în cuanta 4 se va relua executia aplicatiei 1 s.a.m.d. Viteza microprocesorului fiind mult mai mare decât a celorlalte componente ale sistemului de calcul practic un numar rezonabil de aplicatii pot fi executate simultan fara a se micsora simtitor viteza de executie a acestora. În acest caz spunem ca fiecare aplicatie are propriul ei fir de executie, care în afara timpului de calcul, va contine si alte resurse ale sistemului de calcul care se vor partaja între aplicatii (de exemplu memoria interna).
Observatie. Programarea prin ActiveX se numeste programare prin componente.
Scopul creierii formularelor este în general acela de a oferi utilizatorului, o modalitate asistata de întretinere a bazei de date. Acest lucru are evident, în vedere
informarea utilizatorul asupra actiunilor pe care le are de facut;
limitarea la maximum a posibilitatilor utilizatorului de a “strica ceva”;
dar si un aspect, deosebit de important, care a dus practic la impunerea sistemului Windows, si anume:
folosirea unui semi-standard în realizarea acestor obiecte, ceea ce ofera unui utilizator care lucreaza pe platforma Windows, comenzi si aplicatii care au interfata utilizator foarte asemanatoare, permitându-se astfel o implementare rapida si comoda a unor aplicatii noi.
Realizarea acestui lucru e posibila prin folosirea de catre aplicatii, indiferent de limbajul în care sunt create, a acelorasi controale – de exemplu controlul Common Dialog prin intermediul caruia se realizeaza comenzi de genul Open, Save sau Save As.
Plasarea controalelor în formular, se realizeaza prin intermediul casetei de instrumente – ToolsBox Aceasta, se va activa în general automat, atunci când un formular trece în Design sau daca nu este prezenta, se poate aduce ori prin folosirea pictogramei specifice de pe bara cu pictograme – ToolsBar - ori direct din meniul View | ToolsBar
Pe ToolsBox - care se utilizeaza la fel si la proiectarea rapoartelor - se gasesc cele mai folosite controale necesare în proiectare.
Controalele se pot împarti în patru grupe:
Controale legate la câmpurile tabelelor sau cererilor atasate formularelor – de exemplu “Text Box” sau listele derulante “Combo” sau “List”.
Controale de prezentare a unor informatii text, grafice, desene(poze) etc. – de exemplu “Label 'Line'. Image
Controale de lansare a unor comenzi – de exemplu “Command Button Evident, asemenea controale se vor întâlni numai în formulare, nu si în rapoarte.
Controale invizibile – de exemplu “Common Dialog controale multimedia(pentru sunete sau imagini filmate) - care permit prin activarea lor anumite actiuni specifice.
Observatie. Access foloseste în proiectare si în executie, meniuri si bare cu pictograme. Implicit, acestea sunt configurate variabil, functie de locul în care sunt folosite. De asemenea utilizatorul poate sa le modifice sau sa creeze altele noi, folosind comanda Customize care se gaseste în View | Toolbars.
Access foloseste urmatoarele bare pentru lansarea comenzilor:
Menu Bar – meniurile folosite de aplicatie.
ToolsBars Bare de pictograme cu cele mai importante comenzi, grupate pe categorii – de exemplu ToolBox, Formatting, Database etc.
Shortcut Menu Bar meniul contextual al obiectelor, care se lanseaza prin efectuarea unui clic dreapta pe obiectul respectiv.
Plasarea controalelor pe formular, se face asistata de un wizard Ea se produce prin selectia prin clic pe controlul din ToolsBox a pictogramei care reprezinta controlul dorit a fi introdus pe formular, urmat imediat de eliberarea butonului mouse-ului. (deci NU ca la 'Drag and Drop' Acest lucru va duce la atasarea de cursorul grafic al mouse-ului a unei pictograme care reprezinta controlul respectiv, aducerea acesteia pe formular în pozitia dorita si plasarea pe locul respectiv printr-un nou clic.
Controalele vor fi configurate initial, în functie de setarile pe care le are implicit acesta - Default Control. Acestea se pot vizualiza si eventual reconfigura prin actionarea pictogramei de proprietati, dupa selectarea controlului respectiv.
Este indicat ca initial sa se realizeze formularul, prin folosirea Wizard-ului specific. Acesta cere sa se precizeze tabela atasata, câmpurile din aceasta care se vor introduce în formular, felul acestuia –columnar sau tabular – precum si “stilul” de prezentare. Folosirea acestuia va duce la preluarea de catre controalele legate, a proprietatilor câmpurilor respective atribuite la crearea tabelelor, precum si stabilirea într-un mod unitar a proprietatilor implicite ale controalelor, functie de stilul folosit. Dupa aceasta activitate, care dureaza câteva minute, se intervine direct pentru a se reconfigura proprietatile formularului si a obiectelor pe care le contine.
Controalele de pe ToolsBox
Wizardul pentru configurarea controalelor. Trebuie mentinut selectat.
Trebuie sa fie apasat, pentru a permite selectia controalelor de pe toolsbox
Label control – eticheta : permite afisarea unor informatii. Nu se leaga de câmp.
Text Box – caseta de text : este cel mai folosit control pentru legarea la un câmp
Option Group – grup de optiuni : contine mai multe controale de tip boolean, din care numai unul poate fi selectat. Se poate lega de un câmp numeric.
Toggle button – buton boolean cu doua pozitii* : apasat sau neapasat. Se poate lega de câmpuri de tip Yes/No sau de câmpuri întregi si pozitive.
Option button – buton radio : tip boolean.Se foloseste la fel ca Toggle button.
Check Box – caseta de validare : tip boolean. Se foloseste la fel ca Toggle button.
Combo Box – lista ascunsa. Se poate lega de orice câmp.
List Box – lista derulanta. Se poate lega de orice câmp.
Command Button – buton de comanda : permite lansarea unor actiuni, foarte multe putând fi configurate cu wizardul atasat. Nu se leaga de câmpuri.
Image Button folosit pentru afisarea fisierelor cu imagini, de diferite tipuri. Acestea sunt aduse prin metoda OLE, deci pot fi încapsulate sau legate. Nu se leaga de câmpuri.
Bound sau Unbound Object Frame controale pentru obiecte, legate sau nelegate.
Page Break control invizibil. Nu se leaga de câmpuri.
Tab Control controale cu mai multe pagini pe care se pot introduce controale
Control pentru subformulare.
Line Control. Control grafic, nelegat.
Rectangle Control. Control grafic, nelegat.
Toate celelalte controale ActiveX**, care se gasesc pe platforma Windows. Daca se doreste, se pot plasa direct pe aceasta bara o parte din aceste controale, pentru a fi accesate mai usor.
Observatia 1. Butoanele booleane pot fi setate si pentru trei stari: False, True si Null, dar în acest caz ele trebuiesc legate de câmpuri numerice Integer, si nu booleane.
Observatia 2. ** - Controalele ActiveX (fisiere cu extensia OCX) noi, trebuie sa fie înregistrate. Acest lucru se face prin comanda Tools | ActiveX. Acest lucru se datoreaza faptului ca un ActiveX reprezinta de fapt - asa cum am mai aratat - o aplicatie independenta.
Asa cum am aratat, prin meniul contextual sau prin actionarea pictogramei de proprietati a obiectului selectat – formular, sectiune sau control – se lanseaza caseta tab cu proprietatile si evenimentele obiectului respectiv. Proprietatile pot fi modificate, fie static(în faza de proiectare - Design View); fie dinamic(în timpul executiei formularului - Form View) prin secvente de cod VBA, lansate de anumite evenimente care se produc.
Observatia 1. Exista proprietati ale obiectelor programabile, numite dinamice, care nu pot fi setate decât în modul executie si care, evident, nu sunt incluse în caseta tab cu caracteristici. Acestea cât si metodele obiectelor programabile se gestioneaza numai prin cod VBA, sau prin macro-uri (obiectul DoCmd).
Observatia 2. Exista un mare numar de proprietati, metode si evenimente(85%) comune mai multor obiecte. Ele vor avea acelasi nume.
Observatia 3. Numele proprietatilor care contin spatii, când se folosesc în VBA, se scriu fara acestea.
Observatia 4. Aproape toate proprietatile au liste ascunse sau wizard-uri(existenta lor este semnalizata cu trei puncte), care face ca procesul de stabilire a acestora sa fie foarte mult simplificat.
Observatia 5. Cele mai importante proprietati sunt subliniate în acest material.
Observatia 6. Metodele obiectelor vor putea fi lansate numai prin cod VBA, sau prin macro-uri (obiectul DoCmd).
Stabilirea numelui formularului se face în fereastra Database la fel ca la tabele sau cereri. Acesta este foarte important deoarece se va folosi pentru a se face referire la acest obiect de oriunde, dar evident calificat daca este necesar.
În ACCESS exista colectia de formulare deschise – FORMS, prin care se poate referi un formular daca este deschis. De exemplu Forms!Miscari. De asemenea pentru a se referi direct la formularul curent se poate folosi expresia Me
Caption Titlul formularului. Apare în bara de titlu a acestuia. Nu trebuie confundat cu numele formularului. Implicit, daca proprietatea nu este completata, numele formularului se va folosi si ca titlu.
Default View – Tipul formularului, Continous sau Single.
Views Allowed – Daca formularul este sau nu accesibil atât în executie cât si în proiectare.
Scroll Bars – Daca exista sau nu bare de derulare, orizontale si/sau verticale
Record Selectors – Daca exista sau nu în stânga înregistrarii, buton de selectie a acesteia
Navigation Buttons – Daca exista sau nu în partea de jos a formularului, butoane pentru accesarea anumitor înregistrari. Prin acesta se poate ajunge la prima sau la ultima înregistrare a formularului – se considera ordinea de afisare si nu aceea a plasarii fizice a înregistrarilor în tabelele legate – la înregistrarea precedenta sau urmatoare sau la o noua înregistrare în vederea adaugarii. De asemenea se afiseaza numarul curent al înregistrarii si câte înregistrari sunt în formular. De asemenea se specifica daca formularului i se aplica un filtru de selectie.
Dividing Lines - Daca exista sau nu, linii de separare a înregistrarilor
Auto Resize – Daca formularul îsi modifica forma, prin tragere, daca se recalculeaza sau nu dimensiunile obiectelor care sunt cuprinse în acesta
Auto Center – Daca se pozitioneaza sau nu formularul la mijlocul ecranului
Border Style – exista urmatoarele posibilitati:
Sizable – Formularul poate fi maximizat, minimizat sau i se poate schimba forma prin tragere de margini.
None – Nici una din facilitatile de mai sus nu este valabila, si de asemenea nu are nici buton X de închidere
Thin – E ca Sizable, dar nu are margini de tragere.
Dialog – E ca None, dar are buton X de închidere
Control Box – Daca exista sau nu caseta de butoane din stânga barei de titlu.
Min Max Button - Daca exista sau nu butoanele de maximizare/minimizare în Control Box
Close Button – Daca exista sau nu buton X de închidere
Width – Latimea efectiva a formularului (nu a ferestrei de vizualizare a acestuia), în unitatea de masura stabilita în Windows | Control Panel | Regional Settings
Whats This Button – Se poate seta pe Yes numai daca Min Max Button este No, si duce la introducerea în Control Box a butonului specific de Help asistat din MS Office.
Picture - Formularele pot avea, eventual, o imagine de fundal, Background. Adresa fisierului care contine imaginea (sunt acceptate mai multe tipuri: bmp, ico, wmf, emf, dib) se introduce în aceasta proprietate.
Picture Type : Se stabileste daca fisierul respectiv este încapsulat (embedded) sau legat (linked). Încapsularea în mai multe formulare a aceluiasi fisier grafic, duce totusi la ocuparea spatiului pentru fiecare fisier în parte.
Picture Size Mode : exista urmatoarele posibilitati:
Clip – Imaginea este preluata la dimensiunile ei reale.
Zoom – Imaginea va fi marita pâna la dimensiunea ferestrei formularului dar îsi pastreaza proportiile
Stretch - Imaginea va fi marita pentru a ocupa întreaga fereastra dar nu îsi pastreaza proportiile
Picture Alignement - Se stabileste unde se plaseaza în fereastra formularului imaginea grafica.
Picture Tiling – Setata pe Yes, duce la repetarea imaginii grafice pentru a ocupa întreaga fereastra a formularului.
Grid X, Grid Y – Distanta dintre liniile grilei de proiectare, în pixeli. Afisarea grilei de proiectare, sau neafisarea ei se face din View | Grid. Alinierea sau nu a controalelor la aceasta grila se face din Format | Snap To Grid
Record Source – Tabela sau cererea, de care este legat formularul.
Filter – Se poate introduce o expresie – folosind regulile prezentate la cereri - care are rolul de a face o selectie a înregistrarilor din sursa. Daca se creeaza un filtru prin meniul Records, atunci când formularul este în executie, atunci acesta va fi introdus automat în aceasta proprietate.
Order By -Se introduc câmpurile dupa care se sorteaza înregistrarile din formular.(aranjarea tuturor înregistrarilor din formular dupa ordinea ascendenta sau descendenta a unuia sau mai multor câmpuri) Daca se doreste sortare descendenta se introduce dupa numele câmpului respectiv un spatiu si DESC. Implicit se considera sortarea ascendenta. Daca sunt mai multe câmpuri de sortare, acestea se separa prin virgula. Ca si la filtre, daca se stabileste un câmp de sortare prin meniul Records, atunci când formularul este în executie, atunci acesta va fi introdus automat în aceasta proprietate.
Observatie. Crearea unui filtru sau al unui criteriu de sortare nu implica si activarea automata a acestuia. Activarea sau dezactivarea lor se poate face în timpul executiei formularului în doua moduri
Fie din meniul de comenzi prin Records Apply Filter,Sort sau Records Remove Filter,Sort
Fie din cod VBA, prin setarea la True sau False, a proprietatilor dinamice ale formularului:
FilterOn
OrderByOn
Allow Filters, Allow Edits, Allow Deletions, Allow Additions – setate pe No, blocheaza comanda respectiva.
Record Locks. Se întâlneste si la cereri. Are rolul de a stabili ce înregistrari se blocheaza, când se lucreaza în retea si mai multi utilizatori acceseaza aceiasi tabela sau cerere încercând sa scrie în ea. Blocarea se refera la faptul ca numai primul utilizator care modifica zona respectiva poate sa o faca, ceilalti fiind Read Only. Posibilitatile de blocare oferite de sistem sunt :
No Loks – Înregistrarile nu sunt blocate, toti utilizatorii putând scrie în acelasi timp în aceiasi înregistrare, ceea ce face ca sistemul sa ceara ce modificare ramâne valabila, printr-un mesaj specific. Se foloseste când aplicatia nu este folosita în retea.
All Records – Întreaga tabela este blocata, numai un singur utilizator având dreptul sa efectueze modificari, ceilalti putând numai sa citeasca din tabela respectiva.
Edited Record – Numai înregistrarea curenta este blocata. Practic se blocheaza o zona de 2KB ceea ce poate duce si la blocarea altor înregistrari.
Pop Up – daca fereastra formularului va fi sau nu deasupra celorlalte ferestre.
Modal – un formular modal se caracterizeaza prin aceea ca o data preluat controlul nu îl mai cedeaza decât la închiderea lui. Acest lucru poate fi valabil numai pentru aplicatia Access sau pentru toate aplicatiile aflate în executie în momentul respectiv.
Cycle – stabileste care este ordinea de accesare a înregistrarilor când se trece cu <Enter> sau <Tab> de la un control la altul si se ajunge la ultimul control din sectiunea de detail, stabilit conform ordinii tab (care se lanseaza din meniul contextual al formularului, si prin care se fixeaza care este ordinea de parcurgere a controalelor dintr-o sectiune atunci când se trece de la un control la altul prin tastatura - cu <Enter> sau <Tab> - si nu cu mouse-ul.). Daca proprietatea este setata pe All Records, se va continua cu înregistrarea urmatoare, iar daca este Current Record, se va reveni la primul control din aceeasi înregistrare.
Menu Bar – numele unei alte bare de meniu creata de proiectant, care sa înlocuiasca meniul standard din Access.
Toolbar - numele unei alte bare de pictograme creata de proiectant, care sa înlocuiasca bara de pictograme standard din Access, care apare la executia unui formular, si anume Form View.
Shortcut Menu – Daca se va permite sau nu aparitia meniului contextual al formularului.
Shortcut Menu Bar - numele unui meniu contextual creat de proiectant, care sa înlocuiasca pe cel standard care apare la executia unui formular.
Cele mai importante sunt:
On Open si On Close – Se produc la deschiderea, respectiv închiderea formularului.
Aceste evenimente pot fi anulate, adica, nu se va mai produce deschiderea / închiderea formularului. În general se folosesc pentru ca utilizatorul sa confirme aceste actiuni.
Tinând cont ca sunt prima ultima actiune care se produce în existenta unui formular, ele pot fi folosite si la anumite setari necesare în codul VBA.
Exemplu On Open.
Pentru a se crea o actiune care sa se execute la deschiderea unui formular(adica se ataseaza o metoda evenimentului On Open) se va selecta în pagina de evenimente a obiectului FORM, 'Event Procedure',. Prin apasarea pe cele trei puncte din dreapta, se va lansa un Wizard care va afisa modulul de cod VBA al acestui formular, în care va însera prima si ultima linie a procedurii corespunzatoare acestui eveniment, urmând ca utilizatorul sa scrie secventa de instructiuni în cod VBA.
----- ----- --------
' procedura atasata evenimentului open a formularelor
Private Sub Form_Open(Cancel As Integer)
' Se foloseste MsgBox ca functie.
Ea va afisa o caseta cu mesajul respectiv si cu doua butoane, Yes si No
' Daca utilizatorul apasa pe :
' -Yes - functia va retura valoarea 'vbYes'
' -No - functia va retura valoarea 'vbNo'
If MsgBox('Doriti deschiderea formularului . ?', vbYesNo) = vbYes Then
' Ramura TRUE a instructiunii IF.utilizatorul a apasat pe Yes.
' Folosirea MsgBox ca procedura pentru afisarea unui mesaj
MsgBox 'Se deschide formularul .'
Else ' Ramura FALSE a instructiunii IF.utilizatorul a apasat pe No.
Cancel = True ' Se anuleaza deschiderea formularului prin setarea la TRUE
' a parametrului CANCEL al procedurii
MsgBox 'A-ti anulat deschiderea formularului '
End If
End Sub
----- ----- --------
Observatia 1. O procedura eveniment va avea un nume care va contine numele obiectului (în cazul nostru FORM) si numele evenimentului(OPEN), pe care sistemul îl va crea automat.
Observatia 2. Procedurile eveniment pot avea parametrii (declarati în aceeasi linie de definire a procedurii, între paranteze rotunde), pe care tot sistemul îi va introduce daca e cazul.
Acesti parametrii pot fi de
intrare - contin niste valori pe care sistemul îi încarca functie de un anumit context si care pot fi folositi în interiorul procedurii.
iesire - care vor fi eventual setati de utilizator, pentru ca la terminarea procedurii (instructiunea END SUB sau EXIT) sistemul sa execute anumite actiuni.
Astfel parametrul CANCEL, atunci când apare într-o procedura eveniment arata ca daca se va seta pe TRUE, evenimentul respectiv va anula actiunea care l-a produs, iar daca se seteaza pe FALSE, atunci actiunea care a declansat evenimentul se va termina normal.
Observatia 3. MsgBox este foarte mult folosit în aplicatii (va fi prezentat în alt capitol). În principal el va afisa o caseta (un formular - Pop-up si modal) care poate fi configurat cum doreste proiectantul, - cu titlu, mesaj, butoane si pictograme - si care va fi vizibil pâna când utilizatorul va apasa pe un buton.
Acesta poate fi folosit ca
Functie (parametrii se pun între paranteze) - va retura o valoare functie de butonul pe care se apasa.
Procedura (parametrii nu se pun între paranteze) - se va folosi numai pentru afisarea unui mesaj.
On Load si On Unload - Se produc la încarcarea în memorie a formularului, respectiv eliberarea spatiului ocupat de el. Se produc dupa, respectiv înainte de On Open / On Close. Nu pot fi anulate.
Before Update – Se produce dupa modificarea unei înregistrari, atunci când se iese din înregistrarea respectiva. Poate fi anulat.
Se foloseste în general pentru a verifica anumite corelatii între câmpurile unei înregistrari si a nu permite utilizatorului trecerea la o alta înregistrare (deci modificarile efectuate) daca acestea nu sunt corespunzatoare(se va face parametrul CANCEL TRUE).
----- ----- -------- Exemplu BeforeUpdate
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (Me!DataNasterii.Value < Me!DataAbsolvireLiceu.Value) And _
(Me!DataAbsolvireLiceu < Me!DataAbsolvireFacultate.Value) Then
' Un spatiu urmat de <_> reprezinta semnul de continuare a liniei in VBA
' Semnul apostrof este folosit pentru inserarea comentariilor in codul VBA
Else
MsgBox 'Corectati corelatiile intre date'
Cancel = True ' Nu se va permite trecerea la o noua inregistrare
End If ' deoarece conditia testata nu este adevarata
End Sub
----- ----- --------
Observatia 1. În exemplul de mai sus s-au folosit obiectele DataNasterii, DataAbsolvireLiceu si DataAbsolvireFacultate, care sunt niste controale text box, legate de câmpurile tabelei atasate formularului si care în proprietatea VALUE, contin datele din câmpurile respective ale înregistrarii curente.
Observatia 2. Proprietatea VALUE fiind implicita la controalele text box, putea fi omisa.
After Update – Se produce dupa modificarea unei înregistrari, atunci când se iese din înregistrarea respectiva. Acest eveniment nu se poate anula, modificarea devenind definitiva.
Se foloseste în general pentru a calcula anumite valori si a le introduce în controale, la terminarea modificarilor dintr-o înregistrare(în formulare single, de obicei).
Exemplu AfterUpdate
Avem un single formular legat la o tabela care contine doua câmpuri, legate la rândul lor de controale tip text box, cu numele Cantitate si Pret. Al treilea control, Valoare nu este legat de tabela si este Read Only, ne permitând utilizatorului sa modifice datele în el. Totusi dorim ca în cazul în care cantitatea sau pretul se modifica, sa se schimbe corespunzator si valoarea din acest control, la terminarea modificarii înregistrarii.
Private Sub Form_AfterUpdate()
Me!Valoare = Me!Cantitate * Me!Pret
' Proprietatea Value a controalelor nu este obligatorie, fiind implicita. _
Se poate folosi aceasta proprietate atât pentru citirea, cât si pentru introducerea datelor in control _
functionarea fiind deci asemanatoare cu a unei variabile.
End Sub
Observatie. Daca un control nelegat se gaseste în sectiunea Detail a unui formular(sau raport) atunci valoarea care se gaseste în el(calculata cu datele din înregistrarea curenta - care are cursorul -) va fi afisata în toate detail-urile care se vad pe ecran(deci aceeasi valoare la toate înregistrarile),. Din aceasta cauza am specificat un formular single.
Totusi, exemplul prezentat, desi corect, este cam ilogic. Gânditi-va de ce
Before Insert si After Insert - Este la fel ca cele dinainte dar se produc numai când se introduc înregistrari noi.
On Current – Se produce când se trece pe o alta înregistrare. Se foloseste în general, pentru a efectua calcule, la întrarea într-o înregistrare, cu datele din aceasta.
Exemplu On Current
La aceeasi aplicatie prezentata mai sus, dorim sa facem acelasi calcul al valorii si la intrarea în înregistrare.
----- ----- --------
Private Sub Form_Current()
Me!Valoare = Me!Cantitate * Me!Pret
End Sub
----- ----- --------
Observatie. Daca nu am fi creat aceasta metoda pentru acest eveniment atunci la intrarea într-o înregistrare am fi avut în controlul Valoare, rezultatul calculului anterior.
On Timer – Se produce daca proprietatea Timer Interval este diferita de zero, si anume la intervalele de timp(în milisecunde) definite de proprietatea amintita.
Exemplu On Timer
Private Sub Form_Timer()
' Se va executa la intervalul de timp _
care se gaseste în proprietatea TimerInterval _
de pe pagina de evenimente a formularului. _
Aceasta având valoarea 60.000, înseamba ca _
aceasta procedura se va executa la fiecare minut.
MsgBox 'A mai trecut 1 minut !!'
End Sub
On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move – Se produc la actiunea respectiva a mouse-lui pe formular.
On Key Down, On Key Up, On Key Press – Se produc la actiunea respectiva a tastaturii
On Error – Se produce la o eroare datorata datelor.
On Got Focus, On Lost Focus. Se produc la primirea, respectiv pierderea focusului formularului.
Activarea acestor metode se face de obicei din modulul de cod VBA atasat formularului.
În continuare prezentam cele mai utilizate metode ale formularelor.
Metoda Refresh - va determina o reîmprospatare a unui formular cu datele actualizate ale tabelei atasate, daca aceasta se modifica printr-un proces din afara modificarilor directe efectuate în tabela prin formular(acestea evident vor fi imediat sesizate).
Un astfel de proces se poate efectua de exemplu daca:
printr-o cerere actiune se modifica tabela atasata formularului
aplicatia ruleaza într-un mediu multiutilizator (într-o retea de calculatoare) si un alt utilizator modifica aceasta tabela.
Observatia 1. Refresh se poate face si direct în view prin actionarea comenzii Records | Refresh.
Observatia 2. Aceasta actiune sistemul o face si automat la un interval de timp care se stabileste pentru toate formularele deschise, prin completarea proprietatii bazei de date Refresh Interval (în sec) din meniul Tools | Advanced Evident când se doreste o reîmprospatare imediata a afisajului unui formular se va folosi metoda sus amintita.
Observatia 3. Metoda aceasta actioneaza numai asupra setului de înregistrari care exista la lansarea formularului, ea ne având efect asupra
Înregistrarilor noi introduse sau sterse
Cererilor folosite în diferite controale.(De exemplu avem un control combo care afiseaza date dintr-o alta tabela care se modifica dupa lansarea formularului. Metoda refresh nu va actualiza acest control)
Metoda Requery - actioneaza ca si metoda Refresh dar este mult mai puternica deoarece ea re-executa toate cererile aferente formularului(deci se rezolva si problemele expuse la observatia 3 de la metoda Refresh). Aceasta metoda este destul de lenta, deoarece ea se comporta ca si cum s-ar lansa din nou formularul.(inclusiv pozitionarea focusului pe prima înregistrare)
Asa cum am mai aratat, într-un formular pot exista controale calculate, care vor afisa expresii în care pot interveni date din alte controale legate la câmpurile tabelei atasate formularului. În momentul în care se modifica definitiv(se iese din control sau se trece la alta înregistrare) un control(câmp), se vor reface si calculele controalelor calculate în care acesta intervine. Sunt însa cazuri în care este necesara refacerea imediata a calculelor controalelor calculate, fara a modifica pozitia cursorului dintr-un control. Metoda Recalc are aceasta actiune. Deci ea se comporta ca si cum s-ar da o comanda de trecere pe un alt control si o alta înregistrare, cu mentinerea însa a cursorului pe pozitia sa.
Cu aceasta metoda se poate muta focusul(cursorul) într-un formular, care evident este în executie.
În general este folosita pentru mutarea focusului între doua formulare care se afla în executie.
Exemplu : Forms('form1').SetFocus
Aceasta instructiune va ceda cursorul(focus) formularului form1, evident cu conditia ca acesta sa fie deschis.(obiectul Forms recunoaste numai formularele care sunt deschise!)
Toate aceste sectiuni au aceleasi proprietati si evenimente. Pagina de Date, evident, nu are proprietati. Sunt putin folosite în practica proiectarii formularelor, configurarea acestor obiecte. Singura proprietate mai folosita este:
Back Color prin care se stabileste culoarea de fundal.
Text Box este cel mai utilizat control folosit atât în formulare cât si în rapoarte. Este un control care se poate lega la un câmp al unui tabel. Reprezinta practic o caseta în care se vor vizualiza datele din câmpul de care este legat, permitând actualizarea acestora. De obicei este însotit de un control label (eticheta), în care se va specifica ce reprezinta datele din Text Box.
Prezentam în continuare proprietatile cele mai utilizate ale acestui control, cu observatia ca exista o serie de proprietati pe care le-am mai studiat anterior
Pagina de Format contine proprietatile prin care se configureaza formatul si stilul textului din caseta.
Font Name - felul fontei, adica tipul de litera folosit Fontele care accepta diacriticele românesti sunt cele cu terminatia 'CE'. (alta fonta care accepta caractere românesti este si 'MS Sans Serif').
Observatie. Pentru a se putea lucra cu diacritice românesti, tastatura trebuie setata corespunzator, pentru a doua limba, în Control_Panel | Keyboard.
Fore Color - culoarea fontei.
Font Size marimea în pixeli a fontei.
Font Weight grosimea fontei
Font Italic litera aplecata.
Font Underline subliniere.
Text Align alinierea textului în casuta
Border Style, Border Color, Border Width - se folosesc pentru configurarea marginii controlului.
Special Effect - Stabileste un tip standardizat de margine pentru control. Uneori setarea acestei proprietati are efect si asupra celor trei proprietati de mai sus. Exista 6 tipuri:
Flat - plat
Raised - în relief
Sunken - îngropat
Etched - poansonat, zgâriat
Shadowed - cu umbra
Chiseled - subliniat
Back Color - culoarea fundalului.
Back Style - Daca fundalul este sau nu transparent. În cazul transparentei se va vedea obiectul de sub control, de obicei culoarea sectiunii în care se gaseste acesta.
Observatia 1. În bara de meniu, în format, exista doua proprietati, care atunci când sunt activate, vor seta toate obiectele selectate în momentul respectiv, în felul urmator:
Bring to Front - aduce obiectele la suprafata
Send to Back - duce obiectele la fund.
Prin aceste proprietati se poate stabili cum 'se vad' obiectele suprapuse.
Observatia 2. Aceasta proprietate poate fi folosita pentru a se marca explicit care este controlul în care se gaseste cursorul(este activ). Aceasta se va realiza prin folosirea unei culori unice pentru controlul activ. Pentru aceasta se procedeaza astfel:
Se face controlul cu Back Color culoarea controlului activ (de exemplu verde) si Back Style - transparent.
Se creeaza un control grafic, Rectangle, 'umplut' cu culoarea pe care vrem sa o aiba controlul (de exemplu galben) si de dimensiunile acestuia, care se aseaza dedesubt.
În felul acesta controlul fiind transparent, va avea culoarea dreptunghiului de dedesubt (galben), iar când va primi focusul, culoarea setata pentru el (verde).
Observatie.
Toate proprietatile
prezentate mai sus se pot configura direct de pe bara cu pictograme 'Formatting'
Format - În casuta de text avem o data de tipul câmpului de care controlul este eventual legat. Avem posibilitate sa alegem între mai multe tipuri de afisare specifice tipului respectiv de data. De asemenea acesta se poate crea si cu caracterele specifice de construire a formatelor.
Decimal Places - numarul de zecimale al datelor de tip numeric.
Visible Permite ca un control construit sa poata fi facut vizibil sau nu, functie de un anumit context.
Scroll Bars - exista posibilitatea ca acest control sa poata contine mai multe linii de date. În acest caz este indicat sa I se ataseze bara derulanta verticala.
Can Grow - permite ajustarea controlului pe verticala, în cazul în care în control sunt un numar variabil de linii
Can Shrink acelasi efect, dar pe orizontala.
Observatie. Aceste proprietati sunt valabile numai la tiparire nu si la afisarea pe ecran. Deci ele sunt folosite în special la rapoarte.
Left, Top, Width, Height pozitia(relativa la sectiunea unde se gaseste) si marimea controlului pe ecran, data în cm sau inches, functie de cum e setata unitatea de masura în Windows. Ele se vor completa automat în momentul în care se va 'aseza' pe ecran controlul.
Observatia 1. Access, foloseste si celelalte setari din Widows | Control Panel | Regional Settings ca punctul zecimal, formatul pentru ora si data, perioada anului din 2 cifre, etc.
Observatia 2. Unitatile de masura folosite în Access sunt
Pixel - unitate dependenta de rezolutia ecranului.
Inches sau Cm functie de setarea din Windows. Se foloseste de obicei în paginile de proprietati - 1 Inch=2,54 cm.
Punct 72 / inch
Twips 1440 / inch, 567 / cm, 20 / punct Se folosesc când se introduc prin VBA dimensiuni pentru controale.
Control Source Numele câmpului (din tabela atasata la formular sau raport) de care se leaga controlul. Este cea mai importanta proprietate a controlului.
Tot aici putem sa ne legam nu de un câmp , ci de o expresie(câmp calculat). Pentru aceasta este obligatoriu sa pun < =expresie > la Control Source. În felul acesta putem sa introducem calcule cu câmpurile din înregistrare, sa folosim functii standard sau utilizator( din obiectul Module), sau chiar functii agregate de domeniu cu date din alte tabele.
Exemplu: Avem un formular care în zona de Detail are doua controale legate, Pret si Cantitate si un control Valoare, care la Control Source are: =[Pret] * [Cantitate]. În acest fel mereu vom avea în controlul Valoare produsul datelor din celelalte doua controale, care la rândul lor vor avea valorile câmpurilor din înregistrarile tabelei atasate.
De asemenea putem lucra cu controale nelegate (unbound În acest caz de obicei vom introduce date în control prin cod VBA, prin proprietatea dinamica (nu se poate seta decât când formularul este în executie (Form View Value care este implicita.(daca nu se specifica explicit nici o proprietate a controlului atunci aceasta va fi folosita). Aceasta proprietate este Input / Output
Observatie. În faza de proiectare, în interiorul controlului este afisata valoarea proprietatii Control Source.
Input Mask, Default Value, Validation Rule, Validation Text - functioneaza la fel ca la proprietatilor tabelelor. Daca nu se completeaza se preiau setarile facute câmpului respectiv la crearea tabelei, iar daca se seteaza aici, sunt valabile numai în obiectul respectiv, ne modificând proprietatile tabelei.
Observatie. La Default Value, Validation Rule, Validation Text putem sa ne referim si la alte nume de obiecte accesibile, spre deosebire de tabele în care nu puteam sa ne referim la alt câmp.
Enabled, Locked: ne permit sau nu sa intram în control respectiv sa modificam sau nu datele din el. Deci avem posibilitatea sa cream controale Read Only (numai citeste). Avem mai multe posibilitati:
Daca Enabled = Yes si Locked = No - putem sa intram în control(pozitionez cursorul în control) si sa modificam datele din el.
Daca Enabled =No - nu putem sa plasam cursorul în control(evident nici sa modificam).
Daca Enabled = Yes si Locked = Yes - se poate pozitiona cursorul în control dar nu se pot modifica datele.
Daca Enabled = No si Locked = No (nu are sens) controlul apare sters.
Name - numele controlului. Acesta este numele obiectului pe care îl folosim când vrem sa ne referim la acest control. Desi nu este obligatoriu este bine ca în cazul controalelor legate numele acestora sa fie identic cu numele câmpului.
Status Bar Text când focusul ajunge în control, pe bara de stare (care se gaseste în partea de jos a ecranului) va apare textul introdus aici.
Tab Stop - în momentul în care terminam de bagat datele într-un control focusul se va pozitiona pe urmatorul control din sectiune care are setata aceasta proprietate cu Yes
Observatie. Ordinea de parcurgere a controalelor se stabileste prin comanda Tab Order, care se gaseste în meniul contextual sau în View. În aceasta comanda prin 'tragere', se vor aseza controalele din sectiuni în ordinea dorita.
Auto Tab - Trecerea de la un control la altul se face când:
vom apasa pe tasta <ENTER> sau <TAB>.
Daca Auto Tab Yes atunci trecerea la urmatorul control se va face si automat în momentul în care s-au completat toate datelor din acesta conform formatului specificat. Astfel daca avem un control legat la un câmp de tip text cu lungimea de 3 caractere, dupa introducerea celui de-al treilea caracter, fara sa se apese pe <ENTER> sau <TAB> se va trece automat la urmatorul control stabilit prin ordinea tab
Enter Key Behavior Daca aceasta proprietate este = New Line in Field, atunci la apasarea lui <ENTER> cursorul se va pozitiona pe urmatoarea linie din control iar trecerea la urmatorul control se va face numai prin apasarea tastei <TAB>. Evident proprietatea are sens daca controlului are mai multe rânduri.
Shortcut Menu Bar - se poate sa crea un meniu contextual specific pentru control. Acesta se face prin comanda Customize.
Control Tip Text - va apare textul introdus în aceasta proprietate când vom pozitiona focusul cu mous-ul deasupra controlului.
Allow Auto Correct Setata pe Yes, se vor face automat corectiile textului introdus conform specificatiilor stabilite prin meniul Tools | AutoCorrect.
Generarea obiectelor dintr-o clasa de obiecte se face prin setarea corespunzatoare a proprietatilor obiectului si prin atasarea de metode evenimentelor. În momentul în care se creeaza o clasa de obiecte se stabilesc practic care sunt proprietatile, metodele si evenimentele obiectelor care sunt create din aceasta. Obiectele provenite dintr-o clasa, vor avea evident aceleasi metode, evenimente si tipuri de proprietati. Ele vor forma o colectie de obiecte, care este privita ca un tablou cu o dimensiune(vector), în care elementele sunt indexate(de la 0). Crearea controlului Text Box, se face prin generarea acestuia din clasa de obiecte cu acelasi nume, folosind metoda prezentata anterior - luarea si plasarea controlului din ToolsBox. În momentul creierii acestui obiect, evident proprietatile lui trebuiesc setate la anumite valori, implicite(default) urmând ca proiectantul sa le personalizeze ulterior functie de contextul în care va fi folosit. Aceste proprietati implicite se pot modifica prin actionarea în caseta tab : Default Text Box, care se poate obtine prin selectia de pe ToolsBox a controlului si actionarea pictogramei de proprietati.
Evident la generare, controlul trebuie sa primeasca un nume, unic, care va fi constituit din numele controlului plus un numar de ordine în cadrul formularului sau raportului unde este plasat.
Din proprietatile implicite mai interesante sunt:
Auto Label yes, ataseaza o eticheta controlului.
Add Colon yes, eticheta se va termina cu doua puncte.
Label X, Label Y pozitia etichetei fata de control.
Proprietatile unui obiect pot fi statice si sau dinamice.
Proprietatea statica este proprietatea care se poate modifica când formularul este în proiectare, prin caseta tab
Proprietatea dinamica este proprietatea care poate fi modificata în momentul când obiectul este în executie, în general prin cod VBA, lansat de obicei printr-o procedura eveniment.
Majoritatea proprietatilor sunt atât statice cât si dinamice. Anumite proprietati sunt numai dinamice, ele ne regasindu-se în caseta tab a controlului.
Dintre proprietatile dinamice, cea mai importanta este VALUE. Aceasta proprietate este implicita, numele ei putând fi omis. Ea este Input / Output, putând fi deci si citita si scrisa. Reprezinta valoarea care se gaseste în control. Daca acesta este legat, aceasta valoare se va gasi si în câmpul atasat.
Observatie. Daca controlul este calculat, atunci Value nu mai poate fi decât citita.
SelLength, SelStart, SelText - se folosesc pentru a manevra cursorul si valoarea din interiorul unui control Text Box. Sunt proprietati Input / Output.
SelStart reprezinta pozitia de start a cursorului în control.
SelLength reprezinta lungimea textului selectat din control.
SelText reprezinta valoarea textului selectat.
Exemplu urmatoarea secventa de instructiuni înlocuieste în controlul UM, primele 3 caractere daca sunt 'xxx' cu 'buc'.
UM.SetFocus ' plaseaza focusul in cursor
Me!UM.SelStart = 0 ' numerotarea incepe de la 0
Me!UM.SelLength = 3 'selecteaza primele 3 caractere din control (0,1,2)
If Me!UM.SelText = 'xxx' Then Me!UM.SelText = 'buc' 'proprietatea SelText folosita si Input si Output
Before Update - este evenimentul care se produce dupa ce a avut loc o modificare a datelor în control, dar aceasta nu este definitiva putând fi anulata, prin setarea parametrului procedurii eveniment atasate, Cancel la True. În acest caz, la terminarea procedurii eveniment, focusul va ramâne în control pâna când utilizatorul va introduce o valoare care sa nu mai produca în procedura eveniment Cancel True.
Acest eveniment se foloseste în general pentru a executa o metoda mai complexa de verificare a datelor introduse în control, care depaseste în general posibilitatile oferite de proprietatea Validation Rule
After Update - se produce imediat dupa evenimentul Before Update, modificarile fiind acum însa definitive, ne mai putând fi anulate. Se foloseste când valoarea introdusa aici va furniza datele necesare calculelor din alte controale.
On Change - se produce dupa fiecare tastare în interiorul controlului.
On Enter si On Exit - se produc la intrare si la iesirea din control
Got Focus si Lost Focus se produc la primirea pierderea cursorului în/din control
Lost Focus pierd cursorul.
On Click, On Dbl Click, On Mouse Down, On Mouse Up, On Mouse Move – Se produc la actiunea respectiva a mouse-lui pe control.
On Key Down, On Key Up, On Key Press – Se produc la actiunea respectiva a tastaturii când focusul se gaseste în control.
Metodele cele mai folosite sunt
Set Focus - plaseaza focusul în controlul text.
Requery, Recalc - acelasi efect ca si la metodele similare de la formulare, dar referitoare numai la controlul asupra caruia se aplica metoda.
------------ Exemplu
Before Update, After Update, Set Focus
În formularul de mai sus dorim ca în câmpul 'Cantitate' sa avem o valoare în intervalul:
[10.000.. 100.000] daca 'UM' = buc
[100.. 10.000] daca 'UM' = Kg
[1.. 10] daca 'UM' = Tone
Daca 'UM' nu e completata corespunzator atunci se va introduce 'null la 'Cantitate' si 'UM' si se va trimite focusul în controlul 'UM'
Private Sub Cantitate_BeforeUpdate(Cancel As Integer)
If Me!UM = 'buc' Then
If Me!Cantitate >= 10000 And Me!Cantitate <= 100000 Then corect… instr.vida
Else
Cancel = True incorect se anuleaza evenimentul, deci focusul ramâne în control
End If
ElseIf Me!UM = 'Kg' Then o alta forma a instructiunii IF asemanatoare CASE
If Me!Cantitate >= 100 And Me!Cantitate <= 10000 Then corect… instr.vida
Else
Cancel = True incorect se anuleaza evenimentul, deci focusul ramâne în control
End If
ElseIf Me!UM = 'Tone' Then corect… instr.vida
If Me!Cantitate >= 1 And Me!Cantitate <= 10 Then
Else
Cancel = True incorect se anuleaza evenimentul, deci focusul ramâne în control
End If
Else partea ELSE de la instr. IF, ELSEF…se ajunge aici numai daca UM este incorecta
' Me!Cantitate = Null Aceasta instructiune nu se poate executa _
deoarece nu se poate schimba valoarea din control pâna când _
modificarea nu devine definitiva. _
Deci vom fi nevoiti sa introduce aceasta instructiune în _
procedura evenimment AafterUpdate, a aceluiasi control.
Me!UM = Null 'aceasta instructiune functioneaza pentru ca se modifica datele din alt control
End If
If Cancel Then MsgBox 'Cantitatea nu este corelata cu UM'
se afiseaza un mesaj daca în acest moment CANCEL = TRUE pentru ca _
utilizatorul sa stie ca a gresit
End Sub
----- ----- --------
Private Sub Cantitate_AfterUpdate()
If IsNull(Me!UM) Then testarea valorii null se poate face numai cu functia ISNULL
Me!Cantitate = Null 'Numai în acest moment se pot modifica datele din acest control
Me!UM.SetFocus' Metoda a controlului UM, prin care acesta preia focusul
MsgBox 'Completati corect mai intii UM'
End If
End Sub
Acest control este asemanator cu Text Box, dar are posibilitatea derularii unei liste din care se pot prelua datele care se introduc. Acest stil de lucru s-a mai folosit la proprietatea Look Up studiata la tabele.
Observatie. În momentul când într-o tabela un câmp a fost creat cu proprietatea Look Up, iar acel câmp îl legam într-un formular la un control Combo Box, proprietatile definite în tabela nu trec automat si în formular. Acest lucru se face însa automat daca formularul este creat cu WIZARD-ul de formulare.
Controlul Combo Box are aceleasi proprietati si evenimente ca ale lui Text Box. În plus va mai avea urmatoarele proprietati si evenimente, care se refera la lista ascunsa
Astfel în pagina DATA, avem:
Row Source Type - tipul sursei de date care va afisat în lista derulanta.
Aici putem folosi în principal ori câmpuri din alta tabela sau cerere (Table/Query) (sau cerere introdusa direct în SQL) sau o lista de valori (Value List) ca în exemplu.
Row Source
în cazul Table/Query vom avea numele unei tabele, cereri sau direct o instructiune SQL care genereaza o cerere (ca la legarea formularului la o tabela);
în cazul Value List vom avea o lista de valori, separate prin <;>.
Bound Column numarul coloanei de legatura(datele din aceasta coloana vor fi preluate ca valoare pentru control)
Limit To List - daca proprietate este Yes nu se vor putea introduce în control decât datele care se gasesc în lista derulanta iar daca este No, se pot introduce si alte date decât cele din lista.
Auto Expand - daca proprietate este Yes, atunci se cauta si se afiseaza cea mai apropiata denumire din lista care sa aiba în partea de început caracterele introduse în control, pâna în acel moment, de la tastatura.
În pagina de FORMAT avem urmatoarele proprietati:
Column Count numarul de coloane care apar când desfac lista.
Column Head daca se afiseaza sau nu denumirea coloanelor.
Column Widths latimea coloanelor. Se separa cu <;>.
List Rows numarul de rânduri care se afiseaza când desfacem lista. Daca lista are mai multe rânduri decât sunt setate a se afisa, vor apare barele de derulare verticale.
List Width Latimea listei derulante. Daca aceasta este mai mica decât suma tuturor coloanelor afisate, vor apare barele de derulare verticale. Setata pe Auto, latimea listei va fi la fel cu latimea controlului Combo Box.
Observatie. Toate dimensiunile se dau în unitatea de masura setata în Windows Aceasta caracteristica este generala în tot mediul Access. Reamintim ca în VBA, dimensiunile sunt cerute în Twips.
Not In List evenimentul se produce daca proprietatea Limit To List=Yes. Se foloseste când dorim ca atunci când utilizatorul încearca introducerea unei valori din afara listei, dupa o confirmare, aceasta valoare sa completeze lista derulanta, si sa poata fi folosita în continuare, ca în EXEMPLUL urmator, care va crea aceasta posibilitate pentru controlul combo 'UM' prezentat mai sus.
----- ----- --------
Private Sub UM_NotInList(NewData As String, Response As Integer)
Dim RaspunsUtilizator As Integer 'variabila in care stocam raspunsul utilizatorului
' NewData - parametru de intrare care va avea valoarea datei introduse _
in control si care nu s-a gasit in lista. _
Response - parametru de iesire care poate lua 3 valori care vor fi explicate mai jos
RaspunsUtilizator = MsgBox('Doriti introducerea in lista derulanta a valorii ' & NewData & ' ?', _
vbQuestion + vbYesNoCancel)'genereaza o caseta cu 3 butoane
If RaspunsUtilizator = vbYes Then
'completez proprietatea cu noua valoare
Me!UM.RowSource = Me!UM.RowSource & ';' & NewData
Response = acDataErrAdded
'daca se da valoarea de mai sus se va determina:
- blocarea mesajului standard al sistemuluisi, _
- se va face automat requery pe control pentru ca acesta sa-si modifice lista derulanta
ElseIf RaspunsUtilizator = vbNo Then
' in cazul in care se da NO, atunci se va bloca mesajul standard de eroare
Response = acDataErrContinue
Me!UM = Null 'se sterge valoarea din control, asteptindu-se o noua valoare
Else ' cazul cancel
' in cazul in care se da NO, atunci se va afisa mesajul standard de eroare _
si se va cere introducerea unei date din lista derulanta
Response = acDataErrDisplay ' e implicita aceasta valoare, deci poate lipsi instructiunea
End If
End Sub
List Box este asemanatoare cu combo box dar lista nu este ascunsa, ci este afisata tot timpul.
Sunt controale booleene. În Access valoarea booleana poate lua 3 valori si anume:
True (adevarat)
False (fals)
NULL (ne determinat - nu se stie).
Pentru aceasta aceste butoane au o proprietate: Triple State. Daca aceasta are valoarea No, butonul are 2 stari: True si False, iar daca este setata pe Yes, butonul va avea toate cele trei stari. În acest din urma caz controlul trebuie legat numai de un câmp integer sau long. Valoarea NULL se va reprezenta printr-o imagine stearsa a controlului.
Option Group este un control în care se pot introduce doua sau mai multe dintre controale booleene prezentate mai sus (toate vor fi de acelasi fel).
Specific acestui grup este ca numai unul dintre controalele din interiorul lui se poate pozitiona pe True, celelalte devenind automat False.
Un control individual boolean se leaga asa cum am vazut la câmpuri de tip boolean sau integer, putând lua doua sau trei valori booleene.
Câmpul de care se leaga Option Group este o data de tip integer. Valoarea introdusa va fi în general numarul de ordine în grup al controlului boolean care este pe True.
Pe Tools Box se afla un buton pentru activarea unui Wizard. Daca este apasat atunci când facem controlul grup, sistemul ne va îndruma în configurarea lui, punându-ne întrebari referitoare la numele controlului Option Group, la ce si câte controale booleene sa contina, la ordinea si valoarea butoanelor în grup, la câmpul de legatura si la care dintre butoane va fi implicit pe True.
Este cel mai utilizat control ne legat de un câmp. Proprietatea cea mai importanta a controlului este Caption, care va contine textul afisat de control. Forma controlului se configureaza la fel ca la Text Box
Aceste controale sunt ne legate de câmpuri. Ele vor crea figura specificata în titlu. Controlul Rectangle, poate fi si umplut în interior.
În general se ataseaza evenimentului Click o metoda care sa efectueze o comanda specifica.
Raportul este ca si formularul un obiect de rang superior.
El permite afisarea pe ecran sau tiparirea pe hârtie a unor date extrase din baza de date.
Ca si formularul se poate lega la o tabela sau cerere.
În comparatie cu formularul care este dinamic - dupa afisare, pe ecran, se pot modifica datele din acesta, raportul este static - dupa tiparirea lui evident nu va mai suporta modificari.
În general proiectarea rapoartelor este foarte asemanatoare cu cea a formularelor. Din aceasta cauza în cele ce urmeaza nu se vor prezenta decât problemele specifice ale proiectarii rapoartelor.
Un raport poate fi în una din urmatoarele 3 stari
Proiectarea raportului
Afisarea pe monitor a raportului cu toate datele
Afisarea pe monitor a raportului cu un set redus de date
Observatia 1.
În modul Preview, exista o bare de pictograme, care, în scopul
punerii la punct a unor detalii, permite anumite comenzi ca: zoom, afisarea
concomitenta a mai multor pagini etc.
Observatia 2. Pentru ca sa se permita proiectarea rapoartelor, este necesar ca sa se instaleze minim o imprimanta în Windows
Primul lucru cu care începe proiectarea unui nou raport este setarea formatului paginii de imprimare. Acest lucru se face prin comanda File | Page Setup… Imprimarea raportului se face cu comanda File | Print, sau prin pictograma specifica.
Obiectul raport are obiecte sectiuni, care la rândul lor vor contine controale legate sau ne-legate.
În afara sectiunilor prezentate la formularele, în rapoarte se folosesc si sectiunile de pagina(care se pot utiliza si în formulare) si de grupare.
Report Header – Reprezinta partea de început a unui raport. Apare o singura la începutul acestuia. Se foloseste de obicei pentru a pune titlul raportului si antetul institutiei care îl editeaza.
Report Footer - Reprezinta partea de sfârsit a unui raport. Apare o singura data la sfârsitul acestuia. Este folosita de obicei pentru introducerea unor controale calculate cu date totalizatoare referitoare la întregul raport. De asemenea se mai foloseste pentru introducerea unui modul 'de semnaturi'.
Page Header – Apare la fiecare început de pagina. Este folosita de obicei pentru afisarea 'capului de tabel' a raportului, creata cu controale Label.
Page Footer - – Apare la fiecare sfârsit de pagina. Este folosita de obicei în felul urmator:
La stânga se pune ora si data executiei raportului, cu comande Insert | Date and Time;
La mijloc se pune titlul raportului
La dreapta se pune numarul paginii curente numarul total de pagini al raportului (ex.3/10), cu comande Insert | Page Numbers;
Detail – Ca si la formulare se repeta pentru fiecare înregistrare a tabelei (cererii) legate la raport. Deci sectiunea detail se va repeta de atâtea ori câte înregistrari are tabela sau cererea atasata.
În aceasta sectiune se vor introduce controale, care vor fi legate la câmpurile tabelei atasate raportului, în scopul vizualizarii înregistrarilor acesteia.
De asemenea se mai folosesc si controale calculate, cu expresii care vor actiona pe câmpurile unei înregistrari.
Sortarea (Order - aranjarea într-o ordine crescatoare sau descrescatoare a înregistrarilor unei tabele sau cereri dupa o cheie sau mai multe (o cheie fiind un câmp).
Sortarea se poate realiza în Access în 2 moduri:
Un prim mod se face prin rearanjarea fizica a tuturor înregistrarilor conform cheilor de sortare. Aceasta prelucrare cere foarte mult timp de executie si foarte multa memorie
Un al doilea mod de realizare a sortarii foloseste indexarea, mai precis tabelele de indecsi care se pot atasa câmpurilor unei tabele. Marele avantaj este acela ca nu se schimba fizic ordinea înregistrarilor în tabela. Sortarea se va face practic prin sortarea fizica numai a tabelei de index asociat cheii(câmpului) de sortare. Înregistrarile tabelei vor putea fi accesate în ordinea sortata folosindu-se de adresele înregistrarilor, care se gasesc în tabela de indecsi.
Calculatorul va face sortarea în functie de cum a fost creata tabela si anume daca am indexat sau nu câmpul care este cheie de sortare. Astfel daca acesta este indexat, sortarea tabelei se va realiza prin sortarea tabelei de indecsi asociata câmpului , iar daca nu, sortarea tabelei se realizeaza prin aranjarea fizica a tuturor înregistrarilor din tabela.
Gruparea
Toate înregistrarile unei tabele care pentru un anumit câmp, numit cheie de grupare, au aceiasi valoare, reprezinta o grupa de înregistrari. Fiecarei grupe de înregistrari, I se pot atasa, la început si la sfârsit, câte o sectiune, si anume Group Header Group Footer.
Group Header - Apare la începutul unei grupe. Se foloseste de obicei pentru a afisa valoarea câmpului care este cheie de grupare.
Group Footer - apare la sfârsitul unei grupe. Este folosita de obicei pentru introducerea unor controale calculate cu date totalizatoare referitoare la întreaga grupa.
- În partea dreapta se afla sortata si grupata tabela(din stânga) dupa câmpul: Anul de studiu.
Vârsta |
Nume |
Anul de studiu |
|
Vârsta |
nume |
Anul de studiu |
20 |
A |
2 |
|
20 |
D |
1 |
20 |
B |
3 |
|
19 |
C |
1 |
19 |
A |
2 |
|
20 |
A |
2 |
20 |
D |
1 |
|
19 |
A |
2 |
19 |
C |
1 |
|
20 |
B |
3 |
Daca vreau sa afisam câti studenti sunt în fiecare an vom crea o sectiune Group Footer, în care vom introduce un control calculat Text Box care la control source va avea: < =Count(*) >
O grupare înseamna implicit si sortarea înregistrarilor dupa cheia de grupare.
Comanda se gaseste în meniul View. Se poate lansa si din meniul contextual sau direct de pe taskbar,
Asa cum se observa din caseta din figura, la început se completeaza în partea de sus, în ordine, care sunt cheile de sortare si felul acestora (Ascending sau Descending
Dupa aceia daca se doreste ca un câmp dupa care se face sortarea sa fie si cheie de grupare, se selectioneaza cîmpul respectiv dupa care se completeaza în partea de jos caracteristicile grupei.
Group Heder, Group Footer - se precizeaza ce sectiuni de grupare vor apare în raport.
Group On - se stabileste cum se fac grupele si anume:
Each Value - atunci fiecare valoare a câmpului creeaza o grupa, sau
Interval - grupa se creeaza pentru fiecare valoare a unui anumit numar de caractere din câmp care se precizeaza în Group Interval
Keep Together - se poate impune fiecarui grup sa fie inclus într-o singura pagina.
O functie agregata, este specifica prin faptul ca datele ei de intrare sunt valorile unui câmp dintr-o tabela sau cerere, din toate sau o parte din înregistrari.
În rapoarte se folosesc frecvent controale calculate care contin functii agregate SQL. Aceste functii au mai fost prezentate la capitolul 'cereri'. Ele calculeaza expresii al caror domeniu de aplicabilitate este un câmp al tabelei(cererii) care se utilizeaza în obiectul unde sunt folosite. În cazul raportului, functii agregate SQL, se calculeaza pe tabela(cererea) legata la acesta.
Functiile agregate SQL sunt
SUM - calculeaza suma valorilor pe un câmp.
MAX, MIN - întoarce valoarea maxima minima a unui câmp.
AVG - calculeaza media aritmetica a valorilor unui câmp.
COUNT - numarul de înregistrari ale câmpului(diferite de NULL). Daca se doreste ca sa se ia în calcul si câmpurile cu valoarea NULL, atunci se va folosi expresia COUNT(
VAR, VARP, STDEV, STDEVP - calcule statistice.
Observatie. Reamintesc ca valoarea NULL, în functiile agregate (SQL sau de domeniu), nu se ia în considerare. În celelalte functii sau operatii, valoarea NULL a unui termen duce, la rezultatul NULL al expresiei, indiferent de felul în care e constituita aceasta.
În rapoarte domeniul de aplicare al acestor functii depinde de sectiunea unde este plasat controlul calculat care contine expresii cu functii agregate SQL. Astfel:
daca controlul este în sectiunile: Report Header, Report Footer sau Detail, domeniul va contine toate înregistrarile raportului.
Daca controlul este în sectiunile Group Header sau Group Footer, domeniul va contine toate înregistrarile care apartin grupei respective.
Daca controlul este în sectiunile de pagina nu se pot introduce controale calculate care sa contina functii agregate SQL, deoarece nu sunt atasate înregistrari la aceste sectiuni.
De multe ori sunt necesare afisarea unor expresii care sa contina functii agregate, dar nu din tabela sau cererea legata de raport, ci din alte tabele sau cereri din baza de date curenta. În acest scop se folosesc controale calculate în a caror expresii se folosesc functiilor agregate de domeniu - care au aceiasi denumire ca a functiilor agregate SQL, dar cu litera D în fata. Felul în care se folosesc aceste functii va fi prezentat în modulul despre functiile Access.
Asa cum am mai aratat, proiectarea rapoartelor nu difera mult de proiectarea formularelor. În exemplul prezentat mai jos, se vor evidentia aceste particularitati. Obiectele care se configureaza vor fi, ca si la formulare, obiectul report, obiectele sectiunilor si controalele care vor fi plasate în sectiuni.
Report Header
Group Header
Detail
Group Footer
Group Header
Detail
Group Footer
Report Footer
Page Footer
Proprietatile din aceasta pagina sunt mai putin folosite.
Caption Titlul raportului. Apare în bara de titlu a acestuia. Nu trebuie confundat cu numele raportului. Implicit, daca proprietatea nu este completata, numele formularului se va folosi si ca titlu. De asemenea nu trebuie confundat cu adevaratul titlu care se afiseaza pe raport în sectiunea Header Report.
Page Header, Page Footer – Specifica daca se doreste ca aceste sectiuni sa apara sau nu alaturi de Report Header, Report Footer.
Rapoartele pot avea un fundal care se configureaza prin cele 6 proprietati Picture.
Picture - Adresa fisierului cu imaginea ce se doreste ca fundal a raportului.
Picture Type - Specifica daca fisierul cu imaginea v-a fi copiat efectiv în baza de date - Embedded, sau se v-a folosi numai adresa fisierului original - Linked
Picture Size Mode - Poate fi:
Clip - Se foloseste imaginea fara factor de multiplicare, eventual trunchiata.
Stretch - Se foloseste imaginea cu factor de multiplicare diferit pe X si Y, în asa fel încât sa cuprinda tot spatiul rezervat. Imaginea va arata în general deformata.
Zoom - Se foloseste imaginea cu acelasi factor de multiplicare pe X si Y, în asa fel încât sa cuprinda tot spatiul rezervat.
Picture Alignment – Locul de plasare al imaginii.
Picture Tiling – Daca imaginea este mai mica decât pagina, posibilitatea de a se folosi de mai multe ori, în asa fel încât sa umple tot spatiul rezervat.
Picture Pages – Daca imaginea este inclusa numai pe prima pagina sau pe toate paginile.
Are aceleasi proprietati ca pagina respectiva de la formulare.
Proprietatea cea mai importanta a raportului. Record Source, stabileste obiectul (tabela, cerere) de care e legat raportul.
Daca nu se completeaza, atunci raportul este nelegat. Acest tip de rapoarte se proiecteaza foarte rar, în general ele fiind create cu functii agregate de domeniu(functii 'D').
Printre primele activitati care se fac la proiectarea unui raport este completarea proprietatii Record Source.
Observatie. Proprietatile Order, sunt în general nu se folosite, sortarea activându-se prin comanda prezentata anterior, Sorting and Grouping.
În general proprietati mai putin folosite, prezentate si la formulare
Observatie. În general, controalele, au în aceasta pagina proprietatea Name, care atribuie un nume obiectului. Formularele si rapoartele au numele afisat în fereastra Data Bases, acesta fiind cel ce se va folosi atunci când se vor face referiri la aceste obiecte.
Evenimente care în general se folosesc si la formulare. Specfic este
On No Data - evenimentul se produce atunci când tabela legata la raport nu are date. În acest caz în general se blocheaza executia raportului, si se afiseaza un mesaj de avertizare, ca în exemplul de mai jos.
Private Sub Report_NoData(Cancel As Integer)
MsgBox 'Acest raport nu se va executa deoarece îi lipsesc datele'
Cancel = True ' se anuleaza executia raportului
End Sub
În general sectiunile raportului au aceleasi proprietati si evenimente. Cele mai importante sunt cele care se refera la controlul paginatiei.
Prezentam în continuare câteva din cele mai folosite.
Force New Page prin aceasta proprietatea se poate face un salt la pagina noua la începutul, sau si la sfârsitul sectiunii respective.
Keep Together - permite ca toata sectiunea sa fie pe o singura pagina.
Can Grow, Can Shrink - permit marirea pe verticala orizontala, a dimensiunilor obiectului respectiv, functie de datele cu care lucreaza. Sunt prezente si la formulare.
On Format - eveniment care se produce la intrarea în sectiune.
Specific acestor controale, este faptul ca nu au evenimente.
În figura alaturata se observa câteva din modalitatile de folosire a controalelor necesare raportului prezentat anterior.
Page Header, fiind fara dimensiune, este anulata, controalele Label, folosite în capul de tabel fiind plasate în sectiunea Group Header.
Sectiunile se delimiteaza în general cu linii prin controale Line.
În Group Header, CodProdus, va fi codul pentru întrega grupa.
În Group Header, sunt doua controale calculate, care prin functia agregata de domeniu DLookUp, afiseaza date din alta tabela decât cea legata la raport. Ele au în Control Source:
=DLookUp('DenProdus';'ProduseC';'CodProdus=' & [CodProdus])
=DLookUp('UM';'ProduseC';'CodProdus=' & [CodProdus])
În sectia detail, avem un control calculat pentru valoare, care va folosi datele din înregistrarea respectiva. El va avea în Control Source:
=[Pret]*[Cantitate]
În Group Footer, sunt doua controale calculate, care prin functia agregata SQL SUM vor folosi datele numai din înregistrarile grupei respective. Ele au în Control Source:
=Sum([Cantitate]
=Sum([Pret]*[Cantitate])
În Report Footer, sunt aceleasi doua controale calculate, cu aceleasi proprietati la Control Source, dar care, datorita locului unde sunt plasate, vor efectua calculele cu datele din toate înregistrarile tabelei legate.
În Page Footer, sunt controale calculate care folosesc functia:
Now - întoarce data si ora curenta.
Si obiectele:
Page - contine pagina curenta
Pages - contine numarul de pagini ale raportului.
Acest control se gaseste pe ToolsBox si reprezinta un obiect care se introduce în raport / formular. Se foloseste mai des în formulare.
De exemplu avem un formular, FACULTATI, care e legat de o tabela, cu date despre facultatile existente. Vom avea înregistrarile cu date despre:
ASE…….
Facultatea de stiinte…..
Facultatea de inginerie…..
De asemenea mai avem un formular SPECIALIZARI, legat la alta tabela în care vom avea pentru fiecare facultate, date despre specializarile ei. De exemplu la ASE, vom avea
MF…….
CIG…..
FB…..
TS……
Avem posibilitatea ca în formularul FACULTATI, sa introducem formularul SPECIALIZARI, ca subformular. În acest fel vom avea afisat pentru fiecare înregistrare(facultate) din primul formular, în subformular, numai datele referitoare la sopecializarile aferente acesteia.
Pentru realizarea acestui lucru, cele doua obiecte, formularul si subformularul, trebuie sa aiba cel putin un câmp comun.(În exemplul de mai sus, facultatea), denumit Link Fields.
În pagina DATA, a formularului, vom avea doua proprietati care vor contine câmpurile de legatura:
Link Master Fields - numele câmpurilor de legatura din formular.
Link Child Fields - numele câmpurilor de legatura din subformular.
Observatia 1. În cazul existentei mai multor câmpuri de legatura, se separa prin < ; >
Observatia 2. Numarul de câmpuri din cele doua proprietati trebuie sa fie egal.
Observatia 3. Câmpurile de legatura corespondente din cele doua proprietati, trebuie sa fie de acelasi tip si sa reprezinte aceleasi date.
Access accepta si subformulare incluse dar numai pentru 3 nivele.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 186
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved