Sunteți pe pagina 1din 22

PROIECTAREA BAZEI DE

DATE PENTRU EVIDENŢA


TESTĂ RILOR LA UN CENTRU
DE CERTIFICARE A
APTITUDINILOR DE
OPERARE PC
CUPRINS
DESCRIEREA PROBLEMEI DE REZOLVAT.........................................................................................3
Reguli de gestiune...................................................................................................................................3
Structura modulară a aplicaţiei................................................................................................................4
1. Stabilirea dicţionarului de atribute...............................................................................................4
2. Stabilirea cheilor candidate..........................................................................................................4
3. Stabilirea cheilor primare.............................................................................................................4
4. Stabilirea modelului relaţional al bazei de date............................................................................4
STRUCTURA BAZEI DE DATE...............................................................................................................5
Proprietăţile câmpurilor...........................................................................................................................5
INTEROGĂRI............................................................................................................................................8
FORMULAR PENTRU ÎNSCRIEREA CANDIDAŢILOR LA TESTĂRILE PROGRAMATE PENTRU
DIFERITE MODULE...............................................................................................................................10
Controale şi algoritmi utilizaţi...............................................................................................................11
FORMULAR PENTRU ÎNSCRIERE CANDIDATI................................................................................15
Controale şi algoritmii utilizaţi...............................................................................................................15
RAPORT REZULTATE OBŢINUTE.......................................................................................................17
Controale şi algoritmii utilizaţi...............................................................................................................17
ANEXĂ.......................................................................................................................................................20

2
DESCRIEREA PROBLEMEI DE REZOLVAT

Un centru de certificare a aptitudinilor de operare pe calculator doreşte să îşi îmbunătăţească


activitatea de gestiune a testării candidaţilor. În acest sens, se doreşte implementarea unui sistem
informatic prin care să se ţină evidenţa testărilor programate pentru fiecare module, a examinatorilor
responsabili pentru fiecare testare, a sălilor în care se desfăşoară testările, a candidaţilor înscrişi, precum
şi a rezultatelor obţinute de către aceştia.
Modulele vor avea în cadrul sistemului un identificator unic, o denumire şi vor fi incadrate într-
un anumit nivel de certificare. Programarea testărilor presupune alocarea unui identificator unic al testării,
stabilirea modulului pentru care se face testarea, a datei testarii, a orei de începere a testării, a duratei
testării, a orei de terminare a testării, a sălii în care se va desfăşura, a tarifului perceput, precum şi a
examinatorului responsabil pentru testarea respectivă. Centrul dispune de mai multe săli, fiecare având un
numar unic şi un anumit număr de locuri disponibile. Examinatorii au un identificator unic alocat de către
centru, ce va fi memorat în sistem alături de numele şi prenumele acestora. Pentru fiecare candidat vor fi
stocate în sistem date privind: codul numeric personal (CNP), numele şi prenumele, seria şi numărul cărţii
de identitate, adresa şi localitatea. Înscrierea la o testare presupune stocarea în baza de date a informaţiilor
referitoare la testarea pentru care se face înscrierea, data la care se face înscrierea şi candidatul înscris. De
asemenea, sistemul trebuie să aloce un identificator unic pentru fiecare înscriere. După susţinerea fiecărei
testări şi corectarea testelor, se vor aloca în cadrul sistemului rezultatele aferente testării respective,
precizându-se punctajul obţinut de către fiecare candidat.

Reguli de gestiune

 O testare se referă la un singur modul, are repartizat un singur examinator responsabil cu


aceasta şi este programată într-o sală disponibilă la data testării şi în intervalul de timp în
care se desfăşoară testarea;
 Un examinator poate fi responsabil la mai multe testări;
 O înscriere a unui candidat se referă la o singură testare programată la o dată ulterioară
datei de înscriere;
 Un candidat se poate înscrie la mai multe testări;
 Pentru o testare nu poate fi înscris un număr de candidaţi mai mare decât numărul de
locuri disponibile în sala în care se desfăşoară testarea

3
Structura modulară a aplicaţiei

1. Stabilirea dicţionarului de atribute. Analizând cerinţele sistemului informatic, rezultă


următorul dicţionar de atribute: identificator modul, denumire modul, nivel modul,
identificator testare, dată testare, oră începere testare, durată testare, tarif testare, număr sală,
număr locuri disponibile sală, identificator examinator, nume şi prenume examinator, CNP
candidat, nume şi prenume candidat, serie carte identitate candidat, număr carte identitate
candidat, adresă candidat, localitate candidat, identificator înscriere, dată înscriere, punctaj
obţinut.
2. Stabilirea cheilor candidate. Cheile candidate sunt acele atribute din dicţionarul atributelor
care au valori unice şi sunt nenule. Pentru problema dată, cheile candidate sunt: identificator
modul, identificator testare, număr sală, identificator examinator, CNP candidat, identificator
înscriere.
3. Stabilirea cheilor primare. Dintre cheile candidate se vor alege cheile primare. În cazul
problemei de faţă, toate cheile candidate vor deveni chei primare.
4. Stabilirea modelului relaţional al bazei de date.
Candidaţi (CNP, NumePrenume, SerieCI, NumarCI, Adresa, Localitate)
Inscrieri (IDInscriere, DataInscriere, CNP, IDTestare)
Rezultate (CNP, IDTestare, PunctajObtinut)
Testari (IDTestare, DataTestare, OraIncepereTestare, DurataTestare, TarifTestare,
IDModul, IDExaminator, NumarSala)
Module (IDModul, DenumireModul, NivelModul)
Examinatori (IDExaminator, NumePrenumeExaminator)
Sali (NumarSala, NumarLocuri)

4
STRUCTURA BAZEI DE DATE

În Figura1 sunt prezentate relaţiile stabilite între tabelele din baza de date:

Figura 1. Modelul relaţional al bazei de date

Proprietăţile câmpurilor

Candidati.CNP, Inscrieri.IDInscriere, Testari.IDTestare, IDModul, IDExaminator, NumarSala


sunt cheile primare ale celor 7 tabele, deci câmpuri unice şi obligatorii. CNP reprezintă codul numeric
personal al fiecărui candidat şi este de tip Double. NumePrenume, Adresa, Localitate sunt câmpuri de tip
Text, de maxim 150 de caractere, Serie CI este de tip Text şi permite doar introducerea a două litere
obligatorii, ce vor fi formatate în vederea afişării sub formă de majuscule. Completarea acestui câmp este
obligatorie la introducerea datelor în tabela Candidaţi. Pentru acest lucru, în categoria General au fost
stabilite proprietăţile prezentate în Figura2. Câmpului NumarCI îi va corespunde tipul de date Number şi
va avea maxim 6 caractere.

5
Figura 2. Proprietăţi pentru SerieCI.
Cheia externă IDTestare din tabelul Înscrieri trebuie să aibă ca sursă înregistrările corespunzătoare din
tabelul Testări. (Figura3).

Figura 3. Câmpul IDTestare din tabela Inscrieri

În mod similar, cheia externă CNP din tabela Rezultate are ca sursă înregistrările corespunzătoare din
tabelul Testări, în proprietatea Row Source avem: SELECT CNP FROM Candidati. Cheia externă
IDModul din acelaşi tabel va avea ca sursă înregistrările corespunzătoare din tabela Module (Row
Source: SELECT Module.IDModul, Module.DenumireModul, Module.NivelModul FROM [Module]
ORDER BY Module.IDModul;). De asemenea, câmpul IDExaminator va avea ca sursă cheia primară din
Examinatori (Row Source: SELECT IDExaminator, NumePrenumeExaminator FROM [Examinatori]
ORDER BY IDExaminator;), iar câmpul NumarSala va avea ca sursă cheia primară din tabela Sali (Row
Source: SELECT NumarSala FROM Sali). Pentru câmpul DurataTestare se va alege tipul de date
Number. Durata testării se va selecta dintr-o lista cu elementele: 2 ore şi 3 ore, prin schimbări în
categoriile General şi Lookup (Figura4).

6
Figura 4. Câmpul DurataTestare din Testari

În cadrul tabelului Module, câmpul NivelModul poate lua numai valorile Avansat, Mediu sau Începător,
valori ce pot fi selectate dintr-un ComboBox, schimbând proprietăţi ale categoriei Lookup. (Figura5)

Figura 4. Module.NivelModul

7
INTEROGĂRI

1. Afişarea modulelor pentru care nu s-a organizat nicio testare:


SELECT Module.IDModul, Module.DenumireModul, Module.NivelModul
FROM [Module] LEFT JOIN Testari
ON Module.IDModul=Testari.IDModul
WHERE Testari.IDModul IS NULL;

2. Se afişează pentru un candidat o listă a modulelor pentru care a obţinut punctaj de promovare
la testările susţinute. Promovarea unui test presupune obţinerea a minim 80 de puncte.
CNP-ul candidatului se introduce la rularea interogării:

Comanda SQL este următoarea:


SELECT Module.DenumireModul, Rezultate.PunctajObtinut
FROM ([Module] INNER JOIN Testari ON Module.IDModul = Testari.IDModul)
INNER JOIN (Candidati INNER JOIN Rezultate
ON Candidati.CNP = Rezultate.CNP) ON Testari.IDTestare = Rezultate.IDTestare
WHERE (((Rezultate.PunctajObtinut)>=80)
AND ((Candidati.CNP)=[Introduceti CNP-ul candidatului]));

3. Următoarea interogare afişează toate modulele de nivel avansaţi, pentru care au fost organizate
mai mult de 20 de testări, în anii 2008 şi 2009.
SELECT Module.DenumireModul, Count(IDTestare) AS NumarTestari
FROM [Module] LEFT JOIN Testari ON Module.IDModul=Testari.IDModul
WHERE Module.NivelModule="avansati"
AND Year(DataTestare) In (2008,2009)
GROUP BY Module.DenumireModul
HAVING Count(IDTestare)>20;

8
4. Afişarea primilor 10 candidaţi înscrişi la testări în prima lună a anului curent. În cazul în care
un candidat s-a înscris la mai multe module, numele acestuia va apărea o singură dată pe listă.
SELECT DISTINCT TOP 10 Candidati.CNP, Candidati.NumePrenume
FROM Candidati INNER JOIN Inscrieri ON Candidati.CNP=Inscrieri.CNP
WHERE (((Month(DataInscriere))=1) AND ((Year(DataInscriere))=Year(Date())));

5. Ştergerea testărilor programate la date anterioare datei curente, dar care nu au avut loc efectiv
deoarece nu s-a înscris niciun cursant.
DELETE *
FROM Testari
WHERE DataTestare<Date() AND IDTestare NOT IN
(SELECT Inscrieri.IDTestare
FROM Testari INNER JOIN Inscrieri
ON Testari.IDTestare=Inscrieri.IDTestare);

6. Următoarea interogare afişează numărul de candidaţi înscrişi pe module, în fiecare an, din anul
2007 până în prezent. Modulele vor fi grupate pe nivele, afişându-se mai întâi cele corespunzătoare
nivelului începatori.
TRANSFORM Count(Candidati.CNP) AS NrCandidati
SELECT Module.NivelModul, Module.DenumireModul
FROM ([Module] INNER JOIN Testari ON Module.IDModul = Testari.IDModul)
INNER JOIN (Candidati INNER JOIN Inscrieri ON Candidati.CNP=Inscrieri.CNP) ON
Testari.IDTestare=Inscrieri.IDTestare
WHERE Year(DataTestare) Between 2007 And Year(Date())
GROUP BY Module.NivelModul, Module.DenumireModul
ORDER BY Module.NivelModul DESC
PIVOT Year(DataTestare);

9
FORMULAR PENTRU ÎNSCRIEREA CANDIDAŢILOR LA TESTĂRILE
PROGRAMATE PENTRU DIFERITE MODULE

În cadrul formularului creat, se


selectează din lista Denumire modul,
modulul pentru care se face înscrierea şi se
apasă butonul Afisare testari programate,
care afişează într-o listă toate testările
programate pentru următoarea perioadă,
pentru modulul selectat anterior, la care mai
sunt locuri disponibile (numărul de candidaţi
înscrişi la o testare nu trebuie să depăşească
numarul de locuri disponibile în sala în care
se desfăşoară). Se selectează din listă
testarea la care doreşte candidatul să se
înscrie şi se apasă butonul Fisa Inscriere,
ceea ce va conduce la afişarea câmpurilor ce trebuie completate pentru înregistrareapropriu-zisă a
înscrierii în baza de date.
În cadrul fişei de înscriere este necesară doar completarea CNP-ului candidatului, celelalte
câmpuri fiind completate automat astfel: data înscrierii va fi considerată data curentă iar numele
candidatului va fi preluat din tabelul “Candidati” în funcţie de CNP. În cazul în care candidatul nu se află
în baza de date a centrului de testare, acesta poate fi înregistrat prin apăsarea butonului Adaugare
candidat, ce deschide un formular (prezentat in capitolul următor) ce permite introducerea datelor
acestuia. După completarea fişei de înscriere se apasă butonul SalvareÎnscriere, pentru salvarea acesteia
în baza de date. Formularul de înscriere va fi închis prin apăsarea butonului Închidere formular.

10
Figura 5. Formular inscriere candidati

Controale şi algoritmi utilizaţi

Pentru realizarea acestui formular, se utilizează următoarele controale:

 - Casetă text (Text Box);

 - Buton de comandă (utton);


 - Casetă combinată (Combo Box);
 - Listă derulantă (List Box).
Pentru formular se vor modifica proprietăţile astfel:
 Caption: Formular inscriere candidati
 Record Selectors: No
 Navigation Buttons: No
 Close Button: No

11
 On Load: Cod VBA11
În următorul tabel sunt prezentate toate controalele folosite împreună cu proprietăţile modificate
ale acestora:
Control Proprietăţi

Denumire  Name: cboDenumireModul


modul:  Row source: SELECT IDModul,
DenumireModul, NivelModul FROM Module
ORDER BY DenumireModul
 Row Source Type: Table/Query
 Limit to list: Yes
 Column count: 3
 Colomn widths: 0cm, 2.6cm, 2.5cm

Controlul are drept sursă câmpurile din tabelul Module.


Tip Control: Combo Box

 Name: cmdAfisareTestariProgramate
 Caption: Afisare testari programate

Tip Control: Button  On click: Event procedure -> Cod VBA2 (Vezi
Anexa)
 Name: lstTestariProgramate
 Row source: TestariProgramate
 Row source type: Table/Query
 Limit to list: Yes
 Column count: 5
 Column Heads: Yes
 Column widths: 2cm, 2.5cm,3.5cm,2.5cm,2cm
Tip Control: List Box
Lista derulantă are drept sursă interogarea
TestariProgramate
 Name: cmdFisaInscriere
 Caption: FisaInscriere
Tip control: Button
 On click: Event procedure -> Cod VBA3 (Vezi

1
Notă: Codurile VBA şi interogările SQL folosite pentru realizarea acestui formular se regăsesc în Anexă

12
Anexa)
 Name: txtDataInscriere
Data inscriere:
Tip control: Text Box  DefaultValue: Date()
 Enabled: No

La această rubrică va fi afişată în mod implicit data


curentă, utilizatorul neputânt edita acest câmp.
CNP Candidat :  Name: cboCNP
 Row source: SELECT [Candidati].[CNP] FROM
Candidati;
 Row source type: Table/Query
 Limit to list: Yes
Tip control: Combo Box  Column count: 1
 Column widths: 2.54cm
 On change: Event procedure -> Cod VBA 4
(Vezi Anexa)
 On got focus: Event procedure -> COD VBA 5
(Vezi Anexa)

Controlul utilizează ca sursă câmpul CNP din tabelul


Candidaţi. La modificarea câmpului (evenimentul
Change) este definită o procedură care sa actualizeze
numele candidatului în formular, în funcţie de noul CNP
selectat. La accesarea câmpului (evenimentul Got focus)
este definită o procedură care actualizează elementele din
listă, în cazul în care a fost adăugat un nou candidat în
baza de date, utilizând butonul Adăugare candidat.
 Name: cmdAdaguareCandidat
 Caption: Adaugare candidat
Tip control:Button  On click: Event procedure -> Cod VBA 6(Vezi
Anexa)
 Name: txtNumeCandidat
 Control source:
Tip control: Text Box
=DLookUp("[NumePrenume]","Candidati","[CN
P]=" & "[Forms]![Inscriere]![cboCNP]")

13
 Enabled: No

Funcţia DLookUp preia numele şi prenumele candidatului


din tabelul Candidaţi, în funcţie de CNP-ul selectat în
formular la rubrica CNP candidat. Utilizatorul nu poate
modifica conţinutul acestui câmp.
 Name: cmdSalvareInscriere
 Caption: Salvare inscriere
Tip control: Button  On click: Event procedure -> Cod VBA 7 (Vezi
Anexa)
 Name: cmdInchidereFormular
 Caption: Inchidere formular
Tip control: Button  On click: Macro pentru închidere formular

FORMULAR PENTRU ÎNSCRIERE CANDIDATI

Se doreşte crearea unui formular care să permită adăugarea unui nou candidat în baza de
date. Acest formular se va deschide la apăsarea butonului Adăugare candidat din cadrul formularului de
înscriere a candidaţilor pentru susţinerea unei testări (prezentat în capitolul anterior). În acest formular,
suplimentar faţă de datele candidatului va fi afişată data naşterii, în funcţie de codul numeric personal.

14
Astfel, formularul va cuprinde casete text pentru introducerea următoarelor date ale candidatului: CNP,
nume şi prenume, serie carte de identitate, număr carte identitate, adresă şi localitate. Suplimentar se vor
adăuga o casetă text în care va fi afişată data naşterii, precum şi un buton Revenire, care închide
formularul, permiţând revenirea la formularul de înscriere a candidatului pentru susţinerea unei testări. În
următorul tabel sunt prezentate aceste două controale suplimentare cu proprietăţile aferente modificate.

Controale şi algoritmii utilizaţi

Control Proprietăţi

 Name: txtDataNasterii

Tip control: Text Box  Control Source: =IIf(IsNull([CNP]),"


",Mid([CNP],4,2) & "." & Mid([CNP],6,2) &
"." & "19" & Mid([CNP],2,2))
 Name: cmdRevenire
 Caption: Revenire
Tip control: Button
 On click: Macro pentru închidere formular
Pentru ataşarea macrocomenzii pentru închiderea
formularului se alege Build Event -> Macro Builder:
Action: Close
Arguments: Form; frmCandidati; Yes

La obţinerea datei de naştere din CNP s-a folosit funcţia Mid care extrage o anumită parte dintr-
un şir de caractere. Argumentele funcţiei sunt:
o şirul de caractere din care se face extragerea
o valoarea poziţională a caracterului de la care se începe extragerea
o numărul de caractere de extras.

Rezultatul obţinut (formularul Candidaţi) este prezentat în figura 6.

15
Figura 6. Formularul Candidati, pentru introducerea a noi candidaţi în baza de date după apăsarea butonului Adăugare
candidat din capitolul anterior.

RAPORT REZULTATE OBŢINUTE

16
Se urmăreşte crearea unui raport pentru afişarea rezultatelor obţinute de către candidaţi la o
anumită testare, care se va selecta dintr-o listă înainte de deschiderea raportului. În funcţie de punctajul
obţinut, de va afişa calificativul corespunzător astfel:
 Dacă punctaj < 80 de puncte => calificativul “nepromovat”
 Dacă punctaj >= 80 de puncte => calificativul “promovat”
Rezultatele vor fi afişate în ordine descrescătoare a punctajelor, iar calificativele vor fi formatate
cu culori diferite: roşu pentru nepromovat şi verde pentru promovat.
La finalul raportului, se vor calcula: numărul total de candidaţi, numărul de candidaţi promovaţi
şi numărul de candidaţi respinşi.

Controale şi algoritmii utilizaţi

Raportul se va deschide la acţionarea butonului Vizualizare raport din formularul


frmSelectareTestare, care are ca efect afişarea acelor informaţii privind testarea care a fost selectată din
caseta combinată cboTestare din acelaşi formular:

Butonul Printare raport din acelaşi formular conţine o comandă macro pentru printarea
raportului obţinut.
Apăsarea butonului Vizualizare raport va avea ca efect deschiderea raportului din figura 7.

17
Figura 7. Raportul rezultatelor obţinute deschis din lista anterioară.

Pentru crearea raportului, au fost folosite drept sursă câmpurile aparţinând mai multor tabele,
după cum urmează:
 Tabelul Rezultate: CNP, PunctajObtinut
 Tabelul Candidati: NumePrenume
 Tabelul Testari: IDTestare, DataTestare
 Tabelul Module: DenumireModul, NivelModul
Se va alege opţiunea de vizualizare a datelor în funcţie de Testari (by Testari) şi se va face o
sortare a acestora după câmpul PunctajObtinut, descendent.
Formatarea condiţională a calificativelor, în vederea afişării lor în culori diferite, se face cu
ajutorul butonului Conditional, prezentat în figura următoare:

18
Figura 8. Formatarea condiţională a calificativelor

În antetul raportului se vor muta controalele ce cuprind informaţii privind IDTestare, DataTestare,
DenumireModul şi NivelModul.
Pentru ca raportul creat să afişeze informaţii privind testarea care a fost selectată din listă
(cboTestare), înainte de deschiderea raportului, este necesară adăugarea filtrului: [IDTestare]=Forms!
[Form1]![Combo1].value.
Se adaugă un control de tip Text Box, pentru afişarea calificativului corespunzător fiecărui
candidat. Pentru acesta, se modifică proprietăţile:

În subsolul raportului (Report Footer) se adaugă 3 controale de tip Text Box, pentru calcularea
numărului total de candidaţi, a numărului de candidaţi promovaţi şi a numărului de candidaţi respinşi.
Calcularea acestor elemente şi modificările proprietăţii Control Source ale casetelor text sunt prezentate
în tabelul de mai jos.

Element calculat Control Source


Număr total candidaţi =Count([CNP])
Număr candidaţi promovaţi =Sum(IIf([PunctajObtinut]>=80,1,0))
Număr candidaţi nepromovaţi =Sum(IIf([PunctajObtinut]<80,1,0))

19
ANEXĂ

Codul VBA 1.
La încărcarea formularului Inscrieri (evenimentul On Load), controalele aferente fişei de
înscriere nu trebuie să fie vizibile, deoarece înainte de completarea acestora este necesară selectarea
testării pentru care se face înscrierea. Astfel, este necesara definirea următoarei proceduri VBA:

Codul VBA 2.
La apăsarea butonului Afisare testari programate (evenimentul On click) se vor afişa testările
programate pentru modulul selectat la rubrica Denumire modul. În cazul în care nu a fost selectat niciun
modul, se va afişa mesajul “Selectati denumirea modulului”. Procedura aferentă acestui eveniment este
următoarea:

Pentru afişarea testărilor programate în cadrul listei lstTestariProgramate, se utilizează drept


sursă a acesteia interogarea TestariProgramate. Acestă interogare returnează detalii privind testările
programate la o data ulterioară datei curente, pentru modulul selectat la rubrica Denumire modul, la care
mai există locuri disponibile (numărul cursanţilor înscrişi până în momentul respectiv este mai mic decât
numărul locurilor din sala în care se desfăşoară testarea).

Interogarea TestariProgramate:
SELECT Testari.IDTestare, Testari.DataTestare, Testari.OraIncepereTestare,
Testari.DurataTestare, Testari.TarifTestare, Testari.IDModul,
[NumarLocuriDisponibilePentruFiecareTestare].NumarLocuriDisponibile
FROM Testari INNER JOIN NumarLocuriDisponibilePentruFiecareTestare

20
ON Testari.IDTestare= [NumarLocuriDisponibilePentruFiecareTestare].IDTestare
WHERE (((Testari.DataTestare)>Date())
AND ((Testari.IDModul)=[Forms]![Inscriere]![cboDenumireModul].[value])
AND (([NumarLocuriDisponibilePentruFiecareTestare].NumarLocuriDisponibile)>0));\
În cadrul acestei interogări, au fost utilizate rezultatele altei interogări –
NumarLocuriDisponibilePentruFiecareTestare, care calculează numărul de locuri care au rămas
disponibile pentru fiecare testare programată:
SELECT Testari.IDTestare, Count(Inscrieri.IDInscriere) AS NumarCandidatiInscrisi,
Sali.NumarLocuri, [NumarLocuri]-[NumarCandidatiInscrisi] AS NumarLocuriDisponibile
FROM (Sali INNER JOIN Testari ON Sali.NumarSala = Testari.NumarSala)
LEFT JOIN Inscrieri
ON Testari.IDTestare = Inscrieri.IDTestare
GROUP BY Testari.IDTestare, Sali.NumarLocuri;

Codul VBA 3.
Butonul Fisa inscriere va afişa la executarea evenimentului On click controalele aferente fişei de
înscriere; în cazul în care nu a fost selectată nicio testare din listă, se afişează mesajul “Selectati o testare
din lista”.

Codul VBA 4.
La completarea fişei de înscriere, în situaţia în care candidatul există în baza de date, CNP-ul
acestuia se va selecta din listă la rubrica CNP candidat. În caz contrar, se va utiliza butonul Adaugare
candidat, pentru adăugarea acestuia în baza de date şi apoi se va selecta CNP-ul din listă. În funcţie de
CNP-ul selectat se vor afişa numele şi prenumele candidatului la rubrica Nume candidat. La modificarea
CNP-ului, trebuie să se realizeze şi modificarea numelui şi prenumelui aferente candidatului respectiv.

21
Din acest motiv, este necesară definirea următoarei proceduri la evenimentul On Change aferent
contrulului cboCNP:

Codul VBA 5.
În cazul în care s-a utilizat butonul Adaugare candidat pentru adăugarea unui nou candidat în
baza de date, la revenirea în formularul de înscriere este necesară actualizarea listei CNP-urilor când
aceasta este accesată. Astfel, va fi definită următoarea procedură pentru evenimentul On Got focus aferent
controlului cboCNP:

Codul VBA 6.
Butonul Adaugare candidat are ataşat codul VBA pentru deschiderea formularului Candidati,
utilizat pentru introducerea unui candidat în baza de date. Formularul va fi deschis în modul acFormAdd,
care permite doar introducerea unui nou candidat în baza de date, nu şi modificarea celor existenţi.

Codul VBA 7.
Salvarea înscrierii în baza de date se face prin apăsarea butonului Salvare inscriere. În cazul în
care nu a fost completat CNP-ul candidatului, sistemul afişează un mesaj de atenţionare. Codul VBA
aferent butonului Salvare inscriere este urmatorul:

22

S-ar putea să vă placă și