Sunteți pe pagina 1din 26

1 BAZ DE DATE PONTAJE

1.1 Generare tabele 1.1.1TABEL DEPARTAMENTE

Cheie primar

Fig. 1-1

1.1.2TABEL PERSOANE

Cheie primar

Fig. 1-2

1.1.3TABEL LUCRARI

Cheie primar

Fig. 1-3

1.1.4TABEL PONTAJE

Cheie primar

Fig. 1-4

1.2 Diagrama de relaii

Tip relaie

Fig. 1-5

1.3 Introducere date n tabele 1.3.1TABELUL DEPARTAMENTE


n tabelul departamente datele se introduc direct n tabel, folosind modul de vizualizare Data Sheet View. Se vor introduce date, cu valorile de mai jos, astfel nct ntotdeauna prima nregistrare s aib cmpul CodDep cu valoarea zero, iar celelalte s aib valori incrementale pentru acest cmp.

Fig. 1-6

1.3.2TABELUL PERSOANE
n acest tabel datele se pot introduce direct n toate cmpurile. Acest lucru nu este totui recomandat pentru cmpul Departament, care conine codul departamentului unde lucreaz angajatul. Este mai eficient ca acest cmp s se completeze inspectnd valoarea corespunztoare numelui departamentului din tabelul de Departamente. Pentru aceasta se va folosi la cmpul din tabelul de Persoane facilitatea Lookup table: Pentru tabelul Persoane se alege vizualizarea Design View; Se selecteaz cmpul Departament; Se selecteaz tabulatorul Lookup; 3

La Atributul Display Control se alege varianta Combo Box; La atributul Row Source Type se alege varianta Table/Query;

Fig. 1-7 La atributul Row Source se face clic pe butonul , pentru a invoca constructorul de interogri; n aceast fereastr se trte cu mouse-ul cmpul NumeDep n zona de interogare de jos;

Fig. 1-8 Dup nchiderea ferestrei n atributul Row Source se va genera automat interogarea n limbajul SQL: SELECT Departamente.NumeDep FROM Departamente; La atributul Bound column se va nscrie valoarea 0, pentru a afia valoarea cmpului nu codul acestuia. Acum la introducerea de date n modalitatea Data Sheet View, la acest cmp se va selecta departamentul dintr-un combo box, ca n figura 1-9, dar se va stoca de fapt codul acestuia.

Fig. 1-9

1.3.3TABELUL LUCRRI
Se va proceda ca la tabelul anterior, folosind modalitatea Lookup Table pentru cmpul Departament, introducnd date ca n figura 1-10:

Fig. 1-10

1.3.4TABELUL PONTAJE
n acest tabel este mai dificil s se introduc date direct, ntruct exist dou cmpuri (Persoana i Lucrare), care sunt de fapt valori pentru chei primare din tablele Persoane i Lucrari, dup cum se poate observa n figura 1-11.

Fig. 1-11 Pentru c unui operator uman i este mai uor s lucreze cu date text, este necesar utilizarea unui formular care s consulte simultan tabelele necesare. 5

1.4 Definire formular completare date n tabel Pontaj


Formularul care se va utiliza pentru introducerea datelor n tabelul de Pontaje arat ca n figura 1-12:
Subformular pentru tabel Persoane

Subformular pentru tabel Lucrari

Subformular pentru tabel Pontaj

Subformular sintez fia pontaj

Fig. 1-12 n acest formular sunt trei zone (subformulare), care consult datele din tabelele: Persoane, Lucrri, Pontaj. A 4-a zon (care conine numai elemente de tip label- care nu se pot modifica de utilizator) face o sintez a fiei de pontaj care se definete. Definire subformular pentu tabel Persoane

1.4.1GENERARE INTEROGRI
Se va genera prima dat o interogare care consult tabelul Persoane i Departamente, ntruct formularul de completare n tabelul de pontaje va avea nevoie de el. Pentru aceasta se va alege din fereastra de control a bazei de date opiunea Create query in Design View, ca n figura 1-13.

Fig. 1-13 Din noua fereastr se vor alege tabelele ca n figura 1-14 i se va folosi butonul Add.

Fig. 1-14 n continuare se vor trage cu mouse-ul n zona de interogare toate cmpurile din tabelul Persoane, precum i cmpul NumeDep din tabelul de Departemente, ca n figura 1-15.

Fig. 1-15

1.4.2GENERARE SUBFORMULARE
1.4.2.1 Subformular Persoane Pentru subformularul care consult tabelul de persoane se va utiliza facilitatea de Wizard, selectnd ca n figura 1-16, din fereastra bazei de date:

Fig. 1-16 7

Dup selectarea opiunii Create form by using wizard, se va alege din figura 1-17 din lista de tabele i interogri, tabelul Persoane i apoi se va aciona butonul >> pentru a selecta toate cmpurile n vederea utilizrii n formular, dup care se va aciona butonul Next.

Fig.1-17 Din noul dialog se va alege opiunea Justified, ca n figura 1-18 i se va selecta butonul Next:

Fig. 1-18 Din dialogul din figura 1-19 se va alge opiunea Standard i apoi butonul Next.

Fig. 1-19 n cutia de dialog din figura 1-20, se va nscrie numele formei ca SFPers i se va finaliza dialogul cu Finish. 8

Fig. 1-20 1.4.2.2 Subformular Lucrri Din fereastra de control a bazei de date lansai Create form by using wizard, i apoi n dialogul din figura 1-21 selectai tabelul Lucrari. Folosii butonul >> pentru a selecta toate cmpurile din tabel n vederea utilizrii n fomular i apoi utilizai butonul Next.

Fig. 1-21 Din noul dialog din figura 1-22 alegei opiunea Datasheet i folosii apoi butonul Next.

Fig. 1-22 Din dialogul din figura 1-23 alegei opiunea Standard i 9

Fig. 1-23 n dialogul din figura 1-24 precizai numele formei ca SFLucrari1 i nchidei cu Finish.

Fig. 1-24 1.4.2.3 Subformular Pontaje Pentru subformularul care consult tabelul de Pontaje procedai ca la subformularul Persoane, dar folosind tabelul Pontaj i n final atribuii-i numele SFPontaj.

1.4.3GENERARE FORM PRINCIPAL


Pentru forma principal care este bazat pe query-ul PersDep, se va utiliza facilitatea de Wizard, selectnd ca n figura1-25, din fereastra bazei de date:

Fig. 1-25

10

Se va alege n continuare din figura 1-26 interogare PersDep i se vor selecta pentru form numai cmpurile care sunt n dreapta figurii.

Fig. 1-26 Se va alege apoi ca n figurile 1-27, 1-28, 1-29, 1-30:

Fig. 1-27

Fig. 1-28

11

Fig. 1-29

Fig. 1-30 Dup afiarea formei se va comuta n modul Design View i se va redimensiona zona Detail ca n figura 1-31, pentru a putea insera toate elementele de control

12

Fig. 1-31 Se va insera subformularul SFLucrari1, folosind instrumentul adecvat din toolbox. Se va dimensiona gabaritul obiectului ca n figura 1-34. n continuare se vor preciza parametrii ca n figurile 1-32, 1-33

Fig. 1-32

13

Fig. 1-33

Fig. 1-34 Se va proceda la fel insernd i subformularul SFPontaj, cu gabaritul din figura 1-34. Pentru zona de sintez a fiei de pontaj se vor utiliza elemente de tip Label, dintre care cele explicative au proprietatea Caption setatpe valorile din figura 1-35:

14

Selecie proproieti form PerPontaj

Fig. 1-35 Pentru celelalte elemente se va completa n tabelul de proprieti valoare Name cu litera C urmat de numele scris n eticheta din dreapta. Astfel elementul din dreapta etichetei nume se va chema CNume, cel de la Prenume CPrenume .a.m.d. Cel din dreptul etichetei Fi de pontaj se va numi CData. Se vor completa cele dou linii de separaie folosind instrumental din toolbox. Se vor aduga dou butoane, ca n figura 1-36, la care proprietile Name i Caption se vor completa cu valorile Adauga i Iesire, ca n figura 1-37.

Fig. 1-36

15

Fig. 1-37

1.4.4ADUGAREA CODULUI VISUAL BASIC


Pentru ca elemntele din formulare s rspund la anumite evenimente se asociaz funcii scrise n Visual Basic. Pentru aceasta se va selecta n punctual marcat din figura 1-35 i n cutia de dialog de la proprieti se va selecta ca n figura 1-38, utiliznd butonul i apoi opiunea Code Builder.

Fig. 1-38 Se va insera secvena de mai jos, unde sunt apelate dou funcii care vor actualize cmpurile din cele dou subforme: Private Sub Form_Current() ActualizeazaSFPontaj ActualizeazaSFLucrari 16

End Sub Pentru a scrie cele dou funcii se va selecta n tabulatorul de Project opiunea Modules i se va face dublu clic pentru a insera codul de mai jos n aceast fereastr. Se observ declaraiile globale necesare ulterior la deschiderea rapoartelor din formulare. Aceste variabile se vor iniializa din cmpurile formelor i vor fi valide i dup nchiderea lor. Valorile respective sunt necesare pentru realizarea unor selecii n interogrile pe care se bazeaz rapoartele.
Global Global Global Global Global MatricolaGlobal As Integer DepartamentGlobal As Integer DepGlobal As Integer DataMin As Date DataMax As Date

Public Sub ActualizeazaSFLucrari() 'Copiaza nume persoana If Not IsNull(Forms!PersPontaj.Nume) Then Forms!PersPontaj!CNume.Caption = Forms!PersPontaj.Nume End If 'Copiaza prenume persoana If Not IsNull(Forms!PersPontaj.Prenume) Then Forms!PersPontaj!CPrenume.Caption = Forms!PersPontaj.Prenume End If 'Copiaza nume lucrare If Not IsNull(Forms!PersPontaj![SFLucrari1].Form.Nume) Then Forms!PersPontaj!CLucrare.Caption = Forms!PersPontaj![SFLucrari1].Form.Nume End If End Sub Public Sub ActualizeazaSFPontaj() 'Copiaza numar ore If IsNull(Forms!PersPontaj![SFPontaj].Form.Ore) Then Forms!PersPontaj!COre.Caption = 0 Else Forms!PersPontaj!COre.Caption = Forms!PersPontaj![SFPontaj].Form.Ore End If 'Copiaza tarif If IsNull(Forms!PersPontaj![SFPontaj].Form.TarifOra) Then Forms!PersPontaj!CTarif.Caption = 0 Else Forms!PersPontaj!CTarif.Caption = Forms!PersPontaj![SFPontaj].Form.TarifOra End If Forms!PersPontaj!CData.Caption = Forms!PersPontaj![SFPontaj].Form.Data Forms!PersPontaj!CManopera.Caption = Forms!PersPontaj![SFPontaj].Form.Ore * Forms!PersPontaj![SFPontaj].Form.TarifOra End Sub Public Function RetMatricola() As Long RetMatricola = MatricolaGlobal End Function Public Function RetDMin() As Date RetDMin = DataMin End Function Public Function RetDMax() As Date RetDMax = DataMax End Function Public Function RetDep() As Long RetDep = DepGlobal End Function

17

Dup inscrierea codului de mai sus, se revine la vederea Design View pentru forma PersPontaj i se ataeaz codul de mai jos la butonul de Adauga, pe evenimentul OnClick. El este responsabil cu adugarea unei noi nregistrri n tabelul de Pontaje, folosin cmpurile din dialogul PersPontaj.
Private Sub Adauga_Click() Dim Rec As New ADODB.Recordset Rec.Open "Pontaj", CurrentProject.Connection, adOpenKeyset, adLockOptimistic Rec.AddNew Rec("Data") = Forms!PersPontaj![SFPontaj].Form.Data Rec("Persoana") = Forms!PersPontaj!Matricola Rec("Lucrare") = Forms!PersPontaj![SFLucrari1].Form.CodAct Rec("Ore") = Forms!PersPontaj![SFPontaj].Form.Ore Rec("TarifOra") = Forms!PersPontaj![SFPontaj].Form.TarifOra Rec.Update Rec.MoveLast Rec.Close End Sub

Pentru subforma SFLucrari1, se va ataa urmtorul cod:


Private Sub Form_Current() ActualizeazaSFLucrari End Sub Private Sub Nume_LostFocus() ActualizeazaSFLucrari End Sub

Pentru subforma SFPontajse va ataa codul de mai jos:


Private Sub Data_AfterUpdate() ActualizeazaSFPontaj End Sub Private Sub Form_Current() ActualizeazaSFPontaj End Sub Private Sub Ore_AfterUpdate() ActualizeazaSFPontaj End Sub Private Sub TarifOra_AfterUpdate() ActualizeazaSFPontaj End Sub

La butonul Iesire se va ataa un macro pe evenimentul OnClick folosind opiunea Macro Builder. Se va completa cu valorile din figura 1-39. Acest macro va nchide dialogul PersPontaj.

18

Fig. 1-39

1.5 Generarea de rapoarte


Se vor folosi 3 rapoarte pentru nregistrrile din tabela de pontaje, denumite: PontajPersoana va selecta pentru o singur persoan toate fiele de pontaj n intervalul de timp dintre dou date indicate anterior. PontajDepartament va selecta pentru un departament toate fiele de pontaj n intervalul de timp dintre dou date indicate anterior. PontajTotal va grupa toate fiele de pontaj dintre datele precizate, pe lucrri, fcnd i sumele de control pe lucrri i pe toat ntreprinderea.

1.5.1REALIZARE INTEROGRI
Fiecare raport se va baza pe o interogare dupcum urmeaz: Raport PontajPersoana pe query FisePontaj, unde interogare este cea din figura 1-40:

Fig. 1-40 Raport PontajDepartament pe query PontajDepartament, unde interogare este cea din figura 1-41

19

Fig. 1-41 Raport PontajTotal pe query PontajTotal, unde interogare este cea din figura 1-42

Fig. 1-42

1.5.2REALIZARE RAPOARTE
Raportul Pontaj Persoana va avea structura din figura 1-43, unde al doilea label MATRICOLA din zona de header al raportului, se va modifica automat la deschiderea raportului i va avea proprietate acption cu valoarea matricolei pentru persoana din raport:

20

Fig. 1-43 La acest raport se va ataa urmtorul cod:


Private Sub Report_Close() DoCmd.Close acQuery, "FisePontaj" End Sub Private Sub Report_Open(Cancel As Integer) Me!Matricola.Caption = Str$(MatricolaGlobal) End Sub

Raportul PontajDepartament va avea structura din figura 1-44

Fig. 1-44 21

Acest rapot va avea urmtoare parte de cod:


Private Sub Report_Close() DoCmd.Close acQuery, "PontajDepartament" End Sub Private Sub Report_Open(Cancel As Integer) Me!Departament.Caption = Str$(DepGlobal) End Sub

Raportul PontajTotal va avea structura din figura 1-45, cu parte de cod de mai jos:
Private Sub Report_Close() DoCmd.Close acQuery, "PontajTotal" End Sub

Fig. 1-45

1.5.3FORMA DE CONTROL A RAPOARTELOR


Pentru a preciza valorile de selecie din rapoarte se va realiza o form de control cu aspectul din figura 1-46.

22

Fig. 1-46 Tabulatoarele Persoana i Departament au nevoie de cte un subformular dup cum urmeaz: Subforma SFPersRap, din figura 1-47, este folosit n tabulatorul Persoana din forma principal. Ea se bazeaz pe tabelul de Persoane i se poate genera cu facilitatea Wizard.

Fig. 1-47 Subforma SFDepRap, din figura 1-48, este folosit n tabulatorul Departament din forma principal. Ea se bazeaz direct pe tabelul Departemente i se poate genera cu facilitatea Wizard.

Fig. 1-48 23

Forma principal, denumit RapPontaj, are aspectele din figurile 1-49,1-50,1-51 , pentru fiecare tabulator:

Fig. 1-49

Fig. 1-50

24

Fig. 1-51 Pentru butonul OK se va ataa la evnimentul OnClick urmtorul cod, care asigur valorile corecte pentru variabilele globale, precum i deschiderea raportului corect:
Private Sub OK_Click() DataMin = Me!DMin DataMax = Me!DMax Select Case Me!Selector Case 0 MatricolaGlobal = Forms!RapPontaj![SFPersRap].Form.Matricola DoCmd.Close DoCmd.OpenQuery "FisePontaj", , acReadOnly DoCmd.OpenReport "PontajPersoana", acViewPreview Case 1 DepGlobal = Forms!RapPontaj![SFDepRap].Form.CodDep DoCmd.Close DoCmd.OpenQuery "PontajDepartament", , acReadOnly DoCmd.OpenReport "PontajDepartament", acViewPreview Case 2 DoCmd.Close DoCmd.OpenQuery "PontajTotal", , acReadOnly DoCmd.OpenReport "PontajTotal", acViewPreview Case Else MsgBox "nimic" End Select End Sub

Un raport toal poate avea aspectul din figurile 1-52, 1-53

25

Fig. 1-52

Fig. 1-53 26

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