Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Lucrarea de laborator - Structura de principiu a unei proceduri: tipuri de instructiuni folosite intr-o procedura, obiecte DAO, functii, functii agregat, lucrul cu Object Browser

Lucrarea de laborator

Structura de principiu a unei proceduri: tipuri de instructiuni folosite intr-o procedura, obiecte DAO, functii, functii agregat, lucrul cu Object Browser. Vizibilitatea obiectelor (scope) in cadrul programelor. Comunicarea directa utilizator-program.

  1. Deschideti baza de date « Gestoc » si creati un modul intitulat « Lab_III_2 ».
  2. In acest modul aduceti subrutina « SeekX »  de la pg. 9 a prezentei lucrari. Pentru aceasta folositi optiunile Copy si Paste din EDIT.
  3. Modificati subrutina SeekX astfel ca obiectul dbsGestoc sa fie o imagine a bazei de date Gestoc din directorul Dv.
  4. Citind comentariile din program cautati sa intelegeti cum functioneaza acest program (subrutina), apoi rulati subrutina SeekX, iar in caz de eroare faceti corecturile ce se impun.
  5. In instructiunile unde se fac referiri la metode, proprietati, functii folosite pentru a atribui valori, sau campuri de tabel, notati sub forma de comentariu (pe acelasi rand cu instructiunea la care se refera comentariul), la care din aceste patru categorii se refera instructiunea . De exemplu pe randul unde scrie

.seek "=", Val(strSeek) veti consemna comentariul 'seek este o metoda a recordsetului rstFacturi. Ea cauta in tabelul facturi un articol care contine echivalentul numeric al valorii sirului strSeek, adica un nr_factura.



6.     Introduceti 3-4 casete de mesaj (Msgbox) care sa surprinda valorile unor variabile mai reprezentative pentru mersul programului. De exemplu

Msgbox "Gasit nr factura =" & rstFactura.Nomatch va va permite sa

urmariti ce valoare ia proprietatea Nomatch pentru fiecare numar factura introdus de utilizator.

7.     Studiati schema logica a programului Seekx de mai jos si urmariti cum este ea refelectata in program. In mod normal, un programator se gandeste intuitiv cum sa rezolve problema, apoi ii face schema logica si in final converteste schema logica sau pseudocodul (intr-o viitoare lucrare practica in loc de schema logica vom intocmi pseudocodul problemei) in program.

  1. Cu ajutorul schemei logice de mai jos si fara sa va uitati in programul SeekX, incercati sa rescrieti programul Seekx cu alte denumiri ale variabilelor si uneori poate chiar cu alte instructiuni, adica intr-o versiune proprie, pe care trebuie sa o testati sa vedeti daca functioneaza corect.

Consultati programul original numai pentru depanare prin comparatie!



Inceputul lucrarii 3


Anexa 1. (Suport teoretic pentru lucrare)

In Visual Basic exista trei categorii de instructiuni: de declarare, de atribuire si instructiuni executabile.

1. Instructiunile de declarare se folosesc pentru a denumi si defini proceduri, variabile, matrici sau vectori (arrays), constante si chiar obiecte. Cand declaram proceduri, variabile, si constante declaram implicit si domeniul lor de valabilitate (scope) si acest lucru depinde de locul unde au fost declarate si de cuvintele cheie folosite pentru a face declararea, cum ar fi: Function, Sub, Dim, Redim, Static, Public, Private si Const.

In acest exemplu avem trei declarari:

- cea a procedurii, cea a constantei numita limita (de tip Integer) careia i s-a atribuit si o valoare (33) si cea a variabilei Numeletau, declarata cu tipul String (sir de lungime nedefinita)

 
Exemplu:

Sub ApplyFormat()

Const limita As Integer = 33

Dim Numeletau As String

' Urmeaza instructiuni de

atribuire

End Sub

Domeniul de valabilitate se manifesta pe trei nivele: nivel procedura, nivel modul privat (declarat cu Private) si nivel modul public (declarat cu Public).

O variabila sau o constanta declarata in interiorul unei proceduri nu este vizibila in afara procedurii. Pentru nivelul modul, variabilele sau constantele trebuie declarate in sectiunea de declarari a modulului. Acolo ele pot fi declarate ca publice sau private. Cele publice sunt disponibile (vizibile) din toate procedurile si toate modulele din proiect (aplicatie). Cele private sunt disponibile numai pentru procedurile (dar pentru toate procedurile) modulului respectiv.

Sa remarcam ca declaratiile facute cu Dim sunt considerate private, dar pentru a face declararea mai evidenta putem sa declaram cu Private.

Exemplu: Private Mesaj As String

' Mesaj este declarat aici ca un sir (privat) de caractere.

Sa retinem ca in cazul modulelor, indiferent daca sunt de clasa sau standard, procedurile declarate publice sunt disponibile pentru orice proiect care eventual le-ar apela. Daca vrem sa le limitam gradul de publicitate numai la proiectul curent, in sectiunea declarativa a modulului vom adauga instructiunea Option Private Module.

Variabilele pot fi declarate ca fiind de unul din urmatoarele tipuri: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (pentru siruri de lungime variabila), String * lungimea (pentru siruri de lungime fixa), Object, sau Variant. Daca nu specificam tipul, in mod implicit variabila va fi declarata de tip Variant (putem declara si noi daca dorim, variabile sau constante de tip Variant, dar uneori, cand avem tabele foarte lungi, nu este recomandabil).                            

Acest tip poate sa contina date de tip string, date, time, Boolean sau valori numerice si poate converti valorile pe care le contine variabila respectiva, automat. Valorile nu-merice stocate in tipul Variant necesita 16 octeti de memorie, iar cele de tip string 22.

Exista si tipuri definite de utilizator. Pentru aceasta vom folosi instructiunea Type.

Cand o procedura incepe sa ruleze, automat variabilele sale sunt initializate dupa cum urmeaza: cele numerice cu zero, sirurile de lungime variabila cu sirul gol (de lungime zero), cele cu lungime declarata vor fi initializate cu codul ASCII al cifrei zero plasat in fiecare pozitie din sir, variabilele de tip variant, vor fi initializate cu Empty. Fiecare element al variabilelor avand tipuri definite de utilizator va fi initializat ca variabila separata. Variabilele de tip Object vor fi initializate cu Nothing pana cand

se va intalni in program instructiunea Set care atribuie variabilei un tip de obiect .

Inceputul lucrarii 3

  1. Instructiunile de atribuire (assignment). Cu aceste instructiuni atribuim valori sau expresii unor constante sau variabile. Atribuirile se pot referi si la proprietatile unor obiecte. De exemplu:

ActiveCell.Font.Bold=True

In cazul variabilelor de tip obiect, atribuirile se fac prin intermediul instructiunii Set:

Exemplu: Dim dbs As Database, tbl As Tabledef, fld as Field

' Se defineste variabila dbs de tip Database, tbl de tip Tabledef (definire-tabel) si fld ca fiind de tip Field. Am fi putut defini aceste variabile ca fiind de tip Object, dar pentru ca stim exact din ce categorie de obiecte face parte fiecare (dam mai jos o lista cu obiecte), am preferat sa detaliem definirea. Acum urmeaza atribuirea de valori:



Set dbs=CurrentDb (variabila de tip Database capata valoarea CurrentDb adica baza de date curenta; CurrentDb este o variabila de sistem, dar ea are o valoare, este numele bazei de date curente);

Set tbl = dbs.CreateTableDef('Facturi vechi')

Set fld = tbl.CreateField('CodComanda ', dbText)

Sa observam ca in partea dreapta se pot pune (deci se pot atribui) si valori returnate de functii/metode. In cazul de fata este vorba de metoda CreateTableDef specifica bazelor de date, si care a fost chemata cu argumentul Facturi vechi, adica va crea un tabel numit Facturi vechi. In mod asemanator metoda CreateField, va crea in tabelul

Facturi vechi, un camp numit CodComanda. Metoda cere doua argumente: denumire camp si tipul campului.

Dam mai jos o lista cu metodele specifice bazelor de date si cele specifice tabelelor.

Baze de date Tabele

CreateField

CreateIndex

CreateProperty

OpenRecordset

RefreshLink

 
Close

CreateProperty

CreateQueryDef

CreateRelation

CreateTableDef

Execute

MakeReplica

NewPassword

OpenRecordset

PopulatePartialSynchronize

In afara de baze de date si tabele mai exista si alte obiecte si unele dintre ele au metode specifice care nu figureaza in lista de mai sus. Lista completa a obiectelor utilizate in Microsoft Access este urmatoarea:

Application             ItemsSelected

Collection (VBA)                  Module

Connection, Connections (DAO)                       Modules

Container, Containers (DAO)                             Page

Control                                                Pages

Controls                                 Parameter, Parameters (DAO)

Database, Databases (DAO)                               Property, Properties (DAO)

DBEngine (DAO)                  QueryDef, QueryDefs (DAO)

Debug (VBA)                         Recordset, Recordsets (DAO)

DoCmd                                  Reference

Document, Documents (DAO)                          References

Err (VBA)                               Relation, Relations (DAO)

Error, Errors (DAO)             Report

Field, Fields (DAO)              Screen Inceputul lucrarii 3

Form                                      TableDef, TableDefs (DAO)

Group, Groups (DAO) User, Users (DAO)

Index, Indexes (DAO)         Workspace, Workspaces (DAO)

Se vede ca printre ele se afla si obiectul TableDefs, folosit in exemplul de mai sus.

Acronimul DAO, vizibil in tabelul de mai sus, vine de la Data Access Objects, o colectie de obiecte formata din tabele, interogari, relatii intre tabele (relationship), si indecsi folosita la administrarea datelor din bazele de date Microsoft Access.

Codurile care se bazeaza pe manipularea acestor obiecte pot fi folosite si in alte aplicatii care folosesc DAO, cum ar fi Microsoft Excell.

Se poate deduce din cele de mai sus ca adeseori trebuie sa atribuim valori unor proprietati ale obiectelor, sau unor cimpuri apartinand unui tabel, iar in partea dreapta a unei instructiuni de atribuire pot sa apara valori produse de metode sau functii. Sa nu fim ingrijorati de complexitatea sintaxei prin care se face legatura dintre obiecte si proprietatile sau metodele lor, deoarece putem apela la Object Browser.

Object Browser este un program de gestiune a bibliotecilor de obiecte, iar in cadrul bibliotecilor, Object Browser gestioneaza obiectele, dar si metodele si proprietatile asociate obiectelor. Cand redactam un cod, Object Browser poate fi apelat chiar din

fereastra Code Builder-ului selectand butonul .Apare o fereastra care contine un combobox de unde putem selecta biblioteca (de regula vom selecta biblioteca Access) si doua zone: cea din stanga prezinta o lista de clase de obiecte si cea din dreapta afiseaza metodele sau proprietatile asociate obiectului selectat in zona din stanga.

Pentru lucru cu obiecte cum ar fi bara de instrumente Object Browser are nevoie de biblioteca Microsoft Office 8.0 Object Library in cazul produsului Access 97 sau de Microsoft Office 9.0 Object Library in cazul produsului Access 2000. Acestea se obtin din meniul Tools/References.

Cu Object Browser se pot copia denumirile metodelor/functiilor pe care vrem sa le folosim in instructiuni de atribuire, inclusiv denumirile parametrilor (daca este cazul) si se pot aplica cu Paste direct in codul la care lucram. Pentru aceasta vom selecta metoda sau proprietatea ce ne intereseaza din zona din dreapta si ca urmare, sintagma cu care ea trebuie sa apara in instructiuni va apare jos sub fereastra Object Browser-ului. O vom copia de acolo cu Copy To Clipboard din Object Browser si apoi vom da clic pe Paste de pe bara de instrumente a programului Object Browser.

In ce priveste functiile ce se pot utiliza in instructiunile de atribuire, trebuie stiut ca in afara de functiile create de noi cu Code Builder-ul, Access mai dispune de vreo 200 de functii built-in, adica integrate in biblioteca sa de functii. O lista completa a acestor functii se poate obtine din Help, dar cateva mai importante ar fi urmatoarele:

Abs (VBA)        

Cos (VBA)

Count (DAO)          

Asc (VBA) Retureaza un intreg reprezentand un cod de caracter corespunzator primei litere dintr-un sir.

CreateControl: Creaza un control pe un formular deschis si specificat. CreateReportControl Creaza un control pe un raport deschis si specificat.

Atn (VBA)        

CreateForm: Creaza un formular si returneaza un obiect de tip formular.

Avg (DAO)

CreateReport Creaza un raport si returneaza un obiect de tip raport.

CreateReportControl

Error (VBA)                                         Inceputul lucrarii 3

DateValue (VBA)

Eval: se foloseste pentru a evalua o expresie exprimata printr-un sir de caractere sau printr-o valoare numerica.

Exp (VBA)

Day (VBA)       

Fix (VBA): Returneaza o valoare a partii intregi a unui tip de date cu care a fost apelata.



LTrim (VBA): Returneaza sirul cu care a fost apelata, dar curatat de blancuri astfel: numai cele din stanga (Ltrim), numai cele din dreapta (Rtrim), atat blancurile din stanga sirului cat si cele din dreapta acestuia (Trim).

InputBox (VBA): Afiseaza un prompter intr-o caseta de dialog, asteapta ca utilizatorul sa introduca text sau sa dea clic pe un buton si returneaza un sir de caractere reprezentand continutul casetei de text.

Int (VBA): Returneaza partea intreaga a argumentului cu care a fost apelata.     

Month (VBA): Returneaza o valoare de tip Variant (Integer) reprezentand luna din an sub forma unui numar de la 1 la 12.

MsgBox (VBA): Afiseaza un mesaj intr-o caseta de dialog , asteapta ca utilizatorul sa dea clic pe un buton si returneaza o valoare reprezentand numarul butonului pe care utilizatorul a dat clic.

Now (VBA): Returneaza o valoare de tip Variant (Date) prin care se specifica data curenta si ora, conform setarilor din calculator cu privire la forma sub care sa se prezinte data si ora.

QBColor (VBA): Returneaza un numar de tip Long reprezentand codul RGB al culorii specificate prin numarul culorii. Are sintaxa: QBColor(cod culoare)

Cod culorii poate fi un numar intreg cuprins intre 0-15. Aceste numere pot reprezenta culorile dupa cum urmeza:

Numar Culoare             Numar Culoare

0           Black 8 Gray

1           Blue 9 Light Blue

2           Green 10 Light Green

3           Cyan 11 Light Cyan

4           Red 12 Light Red

5           Magenta 13 Light Magenta

6 Yellow14 Light Yellow

7           White 15 Bright White

Rnd (VBA): Returneaza un numar de tip Single reprezentand un numar aleatoriu.

Seek (VBA): Returneaza un numar de tip Long reprezentand pozitia curenta din care se citeste/scrie intr-un fisier deschis cu instructiunea Open.

SysCmd: Se foloseste pentru a executa una din urmatoarele functii:

· Afisarea unei casete indicatoare a stadiului derularii unei operatii sau afisarea unui text optional specificat, in bara de stare.

Returneaza informatii despre Microsoft Access si fisierele asociate.

Returneaza stadiul in care se afla o baza de date specificata sub aspectul ca este deschisa, este un obiect nou, sau a fost modificata dar nu a fost salvata.

Sgn (VBA): Returneaza o valore de tip Variant (Integer) indicand semnul unui numar

Are sintaxa: Sgn(number). Returneaza: 1 pt. nr. pozitive, 0 pt nr. egale cu 0 si -1 pentru numere negative.     

Time (VBA): Returneaza o valoare de tip Variant (Date) indicand ora curenta din calculator.                              Inceputul lucrarii 3

Trim (VBA): Returneaza o valoare de tip Variant (String) continand o copie a unui sir specificat de caractere dar curatat de spatiile din stanga si din dreapta.

Val (VBA) Returneaza numarul reprezentat de un sir de caractere.

VarType (VBA) Returneaza un Integer indicand subtipul unei variabile.

Switch (VBA): Evalueaza o lista de expresii si returneaza o valoare de tip Variant sau o expresie asociata cu prima expresie adevarata din lista.

Are sintaxa: Switch(expr-1, value-1[, expr-2, value-2 . [, expr-n,value-n]])

Year (VBA)

Functii agregat aplicabile pe un domeniu (Domain Aggregate Functions)

Functiile agregat ofera informatii statistice despre multimi de inregistrari (domenii).

De exemplu, putem folosi o functie agregat pentru a numara articolele incluse intr-o anume multime de inregistrari, sau pentru a determina valoarea medie dintr-un anumit camp al articolelor incluse in acea multime.

Functiile agregat se pot prezenta sub doua forme, ambele cu functionalitate similara, dar folosite in situatii diferite. Este vorba de functiile agregat pe domeniu si functiile agregat SQL. Functiile agregat SQL pot fi incluse in sintaxa unei instructiuni SQL, dar nu pot fi apelate direct din Visual Basic. Functiile agregat pe domeniu pot fi apelate direct din Visual Basic. Ele pot fi incluse si in instructiuni SQL, dar functiile agregat SQL sunt mai eficiente

Daca folosim calcule statistice facute din interiorul unui program, trebuie sa folosim functiile agregat pe domeniu. Functiile agregat pe domeniu pot fi folosite si pentru a specifica criterii, pentru a actualiza date sau pentru a crea campuri calculate printr-o expresie din cadrul unei interogari.

Intr-un control calculat de pe un formular sau raport, se pot folosi fie functiile agregat SQL , fie functiile agregat pe domeniu.

Functiile agregat pe domeniu includ urmatoarele functii:

Davg, Dcount, Dlookup, DFirst,

Dlast, DMin, Dmax, DStDev,

DstDevP, Dsum,

DVar, DvarP.

3. Instructiunile executabile initiaza actiuni. In plus, prin instructiuni executabile se poate executa o metoda sau o functie sau se poate sa se repete executia unui segment de instructiuni (cazul structurilor repetitive: Do, For, For each, etc.) sau sa selecteze o anume secventa ce trebuie executata (cazul structurilor de decizie: If, Select Case, etc.). Adeseori instructiunile executive contin operatori matematici sau conditionali (relationali).

Daca este cazul sa continuam o instructiune pe linia urmatoare, ea se va incheia cu _.

Comentariile incep cu apostrof sau cu cuvantul Rem urmat de un blanc.

Observatie: Microsoft Access defineste un obiect special, numit DoCmd pe care il putem folosi pentru a desfasura in interiorul procedurilor activitati specifice macro-urilor. Pentru aceasta vom invoca in procedura respectiva o metoda a obiectului DoCmd. Sintaxa comenzii va fi

DoCmd.metoda [argumente], unde paranteza dreapta inseamna ca argumentele sunt optionale ( se specifica numai daca actiunea le solicita), iar metoda va fi actiunea pe care o deruleaza macroul. Se stie ca atunci cand creem macrouri, actiunea se ia din coloana Action a ferestrei Macro Builder-ului. Acum vom folosi acea denumire a actiunii pentru a specifica denumirea metodei. De exemplu pentru a deschide formularul Materiale Aprovizionate, vom da comanda:Inceputul lucrarii 3

DoCmd.OpenForm 'Materiale aprovizionate'           

Alte operatii utile ce se pot face cu ajutorul obiectului Docmd

stergerea unui tabel: urmatorul exemplu sterge tabelul specificat:

DoCmd.DeleteObject acTable, 'Former Employees Table'

schimbarea denumirii unui tabel: urmatorul exemplu redenumeste tabelul Employees cu numele Old Employees Table:

DoCmd.Rename 'Old Employees Table', acTable, 'Employees'

Sa retinem ca daca o procedura necesita in apelul sau argumente (parametri actuali), acestia se pun intre paranteze numai daca procedura returneaza o valoare. In exemplul de mai sus nu este cazul. De asemeni nu vom pune paranteze daca functia returneaza o valoare, dar nu ne intereseaza (nu o folosim).

4. Comunicarea directa dintre utilizator si module de cod (proceduri)

Uneori procedurile cer date de la utilizator in regim conversational. In acest scop se foloseste functia InputBox. Exemplu:

Sub Intrebare()

Dim NumeleTau as String

NumeleTau=Inputbox ('Cum te numesti?')



MsgBox 'Numele tau este' & NumeleTau

end Sub

Pentru scrierea unor mesaje pe ecran se foloseste functia MsgBox. In exemplul de mai sus am folosit-o pentru a confirma numele preluat de la tastatura.

Sintaxa completa a acestei instructiuni este:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

Singurul argument obligatoriu este Prompt, adica textul ce va fi afisat pe ecran. prompt. Functia returneaza numarul butonului pe care l-a selectionat utilizatorul.

Observatie: Argumentele pentru functii si metode pot fi specificate in apel prin pozitie sau cu numele. Pentru a specifica argumentele dupa pozitie, trebuie sa respectam ordinea din titlul functiei, adica cea de mai sus.

De exemplu:MsgBox 'Raspunsul tau este corect!',0,'Caseta de raspuns'

Daca specificam argumentele dupa nume, in instructunea de apel a functiei, argumentele vor fi urmate de doua puncte si de un semn egal si apoi de valoarea atribuita acelui argument. In acest caz argumentele pot fi specificate in orice ordine De exemplu:

MsgBox Title:='Caseta de raspuns ', Prompt:=' Raspunsul tau este corect!'

In aceste doua exemple nu am folosit numarul butonului returnat de functia MsgBox. Iata un exemplu in care folosim valoarea returnata de functie si i-o atribuim variabilei Myvar. Exemplul va genera o caseta cu titlul Answer Box in care va fi afisat textul I enjoy my job.' si doua butoane (unul Yes si celalat No) aparute ca urmare a valorii 4 atribuite parametrului Buttons. O lista completa a valorilor posibile pentru parametrul Buttons se poate obtine din Access, din Help (aducand cursorul pe cuvantul MsgBox si apasand pe tasta F1).

Sub Question()

myVar = MsgBox(Prompt:='I enjoy my job.', _

Title:='Answer Box', Buttons:='4')

MsgBox myVar

End Sub Inceputul lucrarii 3

In acest caz utilizarea parantezelor in apelul functiei este obligatorie, indiferent daca

parametrii din apel sunt specificati prin denumire sau prin pozitie. In exemplul de mai sus, al doilea apel al functiei nu va afisa decat valoarea variabilei myvar.

5. Conversia macrourilor in Visual Basic

a) Conversia macrourilor de pe formulare sau rapoarte

Se deschide formularul sau raportul in modul Design View.

Clic pe optiunea meniu Tools apoi pe optiunea Macro, iar in final pe Convert Form's Macros To Visual Ba sic or Convert Report's Macros To Visual Basic

b)Conversia macrourilor globale in Visual Basic         

Din fereastra Database clic pe paleta sau butonul Macro. Clic pe numele macroului ce trebuie convertit. In meniul File selectam Save As/Export si cand apare caseta de dialog Save As, clic pe Save As Visual Basic Module.

Anexa 2: Lista instructiunilor programului SeekX

Sub SeekX()

Dim dbsGestoc As Database

Dim rstFacturi As Recordset

Dim intFirst As Integer

Dim intLast As Integer

Dim strMessage As String

Dim strSeek As String

Dim varBookmark As Variant

Set dbsGestoc = OpenDatabase('C:studentiMFC 3gr307Gestst~1.mdb')

' Pentru a putea folosi un index si mai exact metoda Seek, trebuie sa deschidem un recordset

Set rstFacturi = dbsGestoc.OpenRecordset('facturi', dbOpenTable)

' Daca vrem sa folosim metode si proprietati ale unui obiect, in cazul de fata un recordset, putem folosi comanda With:

With rstFacturi

' Set the index.

Index = 'PrimaryKey'

' Sa observam ca intrand in zona de instructiuni deschisa cu With, proprietatile obiectului rstFacturi, nu mai trebuie precedate de numele obiectului, ci doar de un punct.

' Se noteaza in intLast si in intFirst cheia ultimului si respectiv a primului articol din

'tabelul Facturi. Evident acestea sunt niste variabile si puteam sa le dam orice alte denumiri.

.MoveLast

intLast = !nr_factura

.MoveFirst

intFirst = !nr_factura

Do While True

' Se afiseaza informatii despre articolul curent si i se cere utilizatorului sa tasteze

' cheia urmatorului articol de care este interesat

strMessage = 'Nr factura ' & !nr_factura & vbCr & _

'Valoare: ' & !valoare & vbCr & vbCr & _

'Tastati un nr. de factura intre' & intFirst & _

' si ' & intLast & '.'

strSeek = InputBox(strMessage)                       Inceputul lucrarii 3

' Pentru a iesi din aceasta bucla utilizatorul va raspunde cu un simplu Enter (nu va mai tasta nici un nr. de factura):

If strSeek = '' Then Exit Do

' Pentru cazul ca se introduce un nr. factura care nu exista si metoda Seek clacheaza, stocam pozitia actuala din tabel in variabila varBookmark.

varBookmark = .Bookmark

.Seek '=', Val(strSeek)

' Daca nu s-a gasit o factura cu numarul tastat, revenim pe pozitia de dinainte de a

'incepe cautarea si dam mesajul 'Nr. negasit'.

If .NoMatch Then                            

MsgBox 'Nr negasit!'

.Bookmark = varBookmark

Else

MsgBox ('factura are valoarea de ' & !valoare)

End If

Loop

.Close

End With

dbsGestoc.Close

End Sub

Sa remarcam modul cum a fost deschis si inchis tabelul (recordsetul), cum este controlata buclarea cu ajutorul instructiunii Do While, care poate folosi diferite criterii de terminare. De exemplu pentru a parcurge un fisier pana la capat, instructiunea putea fi formulata astfel: Do while Not .EOF.

Deasemeni sa retinem ca instructiunea Set recordset folosita in program i-a atribuit acelui recorset o valoare prin intermediul metodei OpenRecordset, apartinand bazei de date rstGestiune. In invocarea acestei metode s-a tinut cont de urmatoarea sintaxa:

Set recordset = object.OpenRecordset (source, type, options, lockedits)

Informatii despre semnificatia si valorile ce pot fi atribuite parametrilor acestei metode se pot obtine din anexa 1 la laboratorul 4)!        

Inceputul lucrarii 3