Вы находитесь на странице: 1из 544

Solutions and tutorials for IT&C development

Home Posts list About

Crearea unei solutii VB.NET cu ajutorul mediului de dezvoltare Visual Studio 2008 Tipurile de date asociate variabilelor definite in VB.NET

Definirea si referirea unei variabile VB.NET


5 comments - This post in english O variabila corespunde unei locatii de memorie, care stocheaza valori la momentul efectuarii de calcule. Variabilele sunt utilizate in calcule, comparatii. Ele au o denumire stabilita in program sursa, iar accesarea valorii stocate in locatia de memorie se realizeaza prin denumirea variabilei. In VB.NET, o variabila are asociat un tip de date [...], fara a fi obligatorie asocierea la momentul definirii. In acest ultim caz, tipul de date asociat variabilei se deduce din valoarea de initializare. Stocarea unei valori in locatia de memorie aferenta unei variabile se realizeaza prin includerea variabilei in operatii de atribuire. Categorii de variabile:

membre: definite in module, clase, structuri; locale: definite in subrutine.

Definirea variabilelor VB.NET se realizeaza cu ajutorul clauzei Dim. Asocierea unui tip de date se efectueaza cu clauza As.
Dim a As Integer = 10 Dim b = 15 Dim d, e As Boolean, f, g As Long

In exemplul anterior, variabilele a, d, e, f si g sunt definite avand asociate tipuri de date. Variabila b nu are asociat explicit tipul de date, acesta fiind stabilit Integer prin initializarea cu valoarea 15. Definirea si referirea mai multor locatii de memorie folosind o singura variabila se realizeaza prin masive. Referirea unei valori dintr-un masiv se realizeaza printr-un index. O variabila masiv are asociat un numar de dimensiuni. Dimensiunile reprezinta directiile in care se completeaza valorile. Capacitatea de stocare a unui masiv in VB.NET se determina ca

produs al lungimilor dimensiunilor incrementate cu valoarea 1, fiind exprimata in numar de elemente. Definirea variabilelor de tip masiv si referirea elementelor acestora se realizeaza astfel:
Dim a = Dim a = vector(10) As Integer b + vector(0) mat(10,10) As Double a + mat(0,0)

In exemplul anterior, capacitatea de stocare a masivului unidimensional vector este de 11 elemente, respectiv 121 elemente (11 linii x 11 coloane) pentru masivul bidimensional mat. Fiecare element din cele 11 ale masivului vector este de tip Integer, iar pentru fiecare element din masivul mat se asociaza tipul de date Double. Expresia vector(0) extrage valoarea primului element din masivul vector, iar expresia mat(0,0) refera valoarea elementului pozitionat pe linia 1, coloana 1 din masivul mat. Clauza Dim pentru definirea unei variabile in VB.NET poate fi precedata de un modificator de acces pentru a stabili nivelul de acces din codul sursa la variabila definita. Modificatori de acces si semnificatiile acestora sunt:

Public: acces asigurat, fiind accesibila de catre orice cod sursa; Protected: acces restrictionat codului sursa dezvoltat in afara clasei de obiecte [...] sau a claselor derivate din aceasta si in care s-a definit variabila membra; Friend: acces asigurat codului sursa dezvoltat in aceeasi entitate structurala a programului; Protected Friend: uniune modificatori Protected si Friend; Private: acces asigurat doar codului sursa inclus in tipul de date definit.

Alte elemente optionale de definire a unei variabile:


Shared: elementul definit (variabila) este asociata unei clase sau structuri, nu unei instante; Shadows: elementul definit (variabila) redeclara sau ascunde un element sau o multime de elemente supraincarcate; Static: variabile definite local isi continua existenta dupa terminarea subrutinei in care a fost definita, inclusiv valoarea sau valorile asociate acesteia; ReadOnly: elementul definit (variabila) poate fi doar citit, nu si scris; WithEvents: specific variabilelor obiect definite pe baza claselor de obiecte care trateaza evenimente [...]; se precizeaza inainte de denumirea variabilei obiect sau a listei de variabile obiect.

Solutions and tutorials for IT&C development

Home

Posts list About

Definirea si referirea unei variabile VB.NET Conectare Windows Mobile Emulator la reteaua calculatorului (Windows XP , Vista si 7)

Tipurile de date asociate variabilelor definite in VB.NET


No comments - This post in english Tipurile de date asociate variabilelor stabilesc natura datelor stocate si dimensiunea zonelor de memorie utilizate pentru stocarea datelor. In limbajul VB.NET, dezvoltatorul are la dispozitie urmatoarele tipuri de date:

Boolean: valori True/False; dimensiunea zonei de memorie variaza in functie de platforma de implementare; Byte: valori intregi fara semn; o variabila de tip Byte refera o zona de memorie cu lungime de 1 byte; Char: valori intregi fara semn asociate unui simbol; lungimea zonei de memorie este de 2 bytes; Date: valori de tip data calendaristica si timp orar; lungimea zonei de memorie rezervata este de 8 bytes; Decimal: valori reale cu semn; lungimea zonei de memorie este de 16 bytes; Double: valori reale cu semn reprezentate in virgula mobila, dubla precizie; dimensiunea zonei de memorie alocata este de 8 bytes; Integer: valori intregi cu semn; lungimea zonei de memorie este de 4 bytes; Long: valori intregi cu semn; lungimea zonei de memorie este de 8 bytes; Object: valori de tip adresa ce refera obiecte tipuri referinta: string, masiv, clasa de obiecte, interfata; lungimea zonei de memorie rezervata este de 4 bytes (platforma pe 32 biti) sau 8 bytes (platforma pe 64 de biti); SByte: valori intregi cu semn; dimensiunea zonei de memorie este de 1 byte; Short: valori intregi cu semn; lungimea zonei de memorie este de 2 bytes; Single: valori reale cu semn reprezentate in virgula mobila, simpla precizie; dimensiunea zonei de memorie este de 4 bytes; String: multime de valori intregi fara semn asociate simbolurilor Unicode; fiecare simbol Unicode ocupa o zona de memorie de 2 bytes; UInteger: valori intregi fara semn; lungimea zonei de memorie este de 4 bytes; ULong: valori intregi fara semn; dimensiunea zonei de memorie este de 8 bytes; User-Defined: valori definite de catre dezvoltator; lungimea zonei de memorie depinde de membrii definiti in structura User-Defined; UShort: valori intregi fara semn; dimensiunea zonei de memorie rezervata este de 2 bytes.

Variabilele declarate fara tip de date au asociat implicit tipul Object. Avantajul acestei tehnici consta in scrierea mai rapida a codului sursa. Dezavantajul consta in posibilitatea de executie mai lenta a aplicatiei. Solutions and tutorials for IT&C development

Home Posts list About

Conectare Windows Mobile Emulator la reteaua calculatorului (Windows XP , Vista si 7) Caracteristici ale evenimentelor in VB.NET

Definirea unei clase de obiecte VB.NET


9 comments - This post in english Clasa de obiecte este o reprezentare abstracta a unei entitati. Obiectul reprezinta o manifestare concreta a unei clase. Obiectul este structura care contine date si metode de manipulare a datelor. Un obiect contine date prin intermediul campurilor si proprietatilor:

campul: stocheaza date si este similar unei variabile; proprietatea: extrage si modifica valoarea unui camp prin proceduri Get si Set; astfel, datele sunt izolate, iar valorile din campuri sunt validate.

Un obiect contine si metode prin care sunt implementate actiuni. Metodele unui obiect iau forma procedurilor. O actiune recunoscuta de de un obiect poarta denumirea de eveniment [...]. O clasa de obiecte poate implementa interfete in toate aspectele definite in acestea. Interfata reprezinta o colectie de elemente de programare si nu contine partea de implementare. Tipuri de clase de obiecte in functie de sursa definirii:

incluse in VB.NET; construite in alte aplicatii; construite sau modificate de catre dezvoltator in cadrul aplicatiei.

Clasa de obiecte se comporta ca un tip de date, iar utilizatorul poate defini variabile de acest tip. Variabilele se numesc obiecte, continand date si actiuni. Ca exemplu, se considera clasa de obiecte Task, avand urmatoarele campuri:

cDenTask: denumire task; cTipTask: categorie task; cResTask: nume responsabil task; cPrioTask: categorie prioritate task.

Campurile cDenTask, cTipTask si cResTask sunt definite cu tipul String, iar campul cPrioTask este de tip Boolean.

Toate campurile sunt definite cu modificatorul de acces Private [...], ceea ce inseamna ca accesul este restrictionat la codul sursa dezvoltat in cadrul clasei. Accesarea si modificarea valorilor campurilor sunt realizate prin proprietatile DenTask, TipTask, ResTask si PrioTask.
Public Class Task 'Campuri Private cDenTask As String Private cTipTask As String Private cResTask As String Private cPrioTask As Boolean 'Proprietati clasa Task 'proprietate camp cDenTask Public Property DenTask() Get Return cDenTask End Get Set(ByVal value) cDenTask = value End Set End Property 'proprietate camp cTipTask Public Property TipTask() Get Return cTipTask End Get Set(ByVal value) cTipTask = value End Set End Property 'proprietatea camp cResTask Public Property ResTask() Get Return cResTask End Get Set(ByVal value) cResTask = value End Set End Property 'proprietate camp cPrioTask Public Property PrioTask() Get Return cPrioTask End Get Set(ByVal value) cPrioTask = value End Set End Property 'metoda clasa de obiecte Task Public Function ModificaPrioritate(ByVal prioNou As Boolean) As String cPrioTask = prioNou Dim res As String res = "A fost modificata prioritatea task-ului pe valoarea " &_ cPrioTask & " !"

Return res End Function ' exemplu de constructor fara parametri Public Sub New() cDenTask = "Task Nou" cTipTask = "Tip Task Nou" cResTask = "Responsabil Task Nou" cPrioTask = False End Sub 'supraincarcare constructor - varianta constructor cu parametri Public Sub New(ByVal denT As String, ByVal tipT As String, _ ByVal resT As String, ByVal prioT As Boolean) cDenTask = denT cTipTask = tipT cResTask = resT cPrioTask = prioT End Sub End Class

Pe langa campuri si proprietati, clasa de obiecte Task definita mai sus contine o metoda denumita ModificaPrioritate construita ca o procedura de tip Function si doua metode constructor supraincarcate. Metoda constructor este una speciala, fiind implementata prin procedura Sub New. Codul din metoda constructor se executa inaintea restului de cod definit in clasa de obiecte. Metoda constructor este apelata la crearea obiectului. Cand nu mai sunt utilizate, obiectele sunt distruse prin sistemul reference-tracing garbage collection. Distrugerea obiectelor se face pe baza metodei speciale denumita destructor si implementata prin procedura Sub Finalize. Spre deosebire de metoda constructor, destructorul nu trebuie apelat explicit, sistemul ocupandu-se de apelarea automata a destructorului.

Caracteristici ale evenimentelor in VB.NET


4 comments - This post in english Evenimentul reprezinta un mesaj transmis de catre un obiect si care anunta aplicatia de producerea unui fapt. Evenimentele sunt implementate folosind delegati [...]. De exemplu, apasarea unui buton de comanda intr-o interfata grafica provoaca aparitia evenimentului Click. Evenimentul este tratat prin intermediul unei proceduri. Evenimentele sunt declarate in cadrul claselor, structurilor, modulelor si interfetelor utilizand cuvantul rezervat Event.
Event Eveniment(ByVal IDArg As Integer)

Transmiterea mesajului asociat unui eveniment este denumita raising, realizandu-se in cadrul clasei, modulului sau a structurii. O clasa de obiecte derivata nu poate provoca transmiterea

evenimentelor mostenite din clasa de baza. Specificatia utilizata pentru transmiterea mesajului este RaiseEvent.
RaiseEvent Eveniment(IDArg)

Un obiect capabil sa provoace transmiterea unui mesaj de eveniment poarta denumirea de sursa a evenimentului sau emitator de eveniment. Exemple de obiecte sursa de evenimente sunt obiectele definite de utilizator, controalele si formularele. Aparitia unui eveniment are asociata o procedura denumita handler de eveniment. Inainte ca un handler de eveniment sa poata fi utilizat, trebuie sa se realizeze o asociere intre eveniment si handler-ul de eveniment. Acest lucru se realizeaza cu ajutorul specificatiilor Handles sau AddHandler. Handler-ii de evenimente sunt declarati cu ajutorul specificatiilor WithEvents si Handles. Evenimentele provocate de un obiect prin WithEvents pot fi manipulate cu orice subrutina cu specificatia Handles care precizeaza evenimentul. Asocierea eveniment-handler prin specificatia Handles este limitata prin realizarea asocierii la momentul compilarii. O variabila definita cu specificatia WithEvents nu poate fi utilizata ca o variabila Object, specificandu-se denumirea clasei la momentului definirii.
Dim WithEvents ObEveniment As New ClsEveniment

ObEveniment este variabila declarata cu specificatia WithEvents, iar clasa de obiecte ClsEveniment contine declaratii de evenimente si proceduri de transmitere a mesajelor asociate evenimentelor. Declararea unui handler de eveniment utilizeaza specificatia Handles, asociindu-se cu evenimente declarate in ClsEveniment.
Sub ObEveniment_HandlerEveniment() Handles ObEveniment.UnEveniment

Evenimentul UnEveniment este declarat in clasa ClsEveniment. Specificatiile AddHandler si RemoveHandler sunt mai flexibile decat clauza Handles. Este permisa conectarea si deconectarea dinamica a evenimentelor cu unul sau mai multi handler-i la momentul executiei aplicatiei. Variabilele obiect nu mai trebuie declarate cu specificatia WithEvents. AddHandler are doua argumente: denumirea unui eveniment dintr-o sursa de evenimente si o expresie evaluata la delegat.
AddHandler ObEveniment.EvenimentDoi, AddressOf Me.HandlerEveniment

RemoveHandler deconecteaza un eveniment de la un handler de eveniment si utilizeaza aceeasi sintaxa ca AddHandler.


RemoveHandler ObEveniment.EvenimentDoi, AddressOf Me.HandlerEveniment

Specificatia AddressOf returneaza adresa delegatului.

Definirea delegatilor in VB.NET


2 comments - This post in english

Delegatul este un pointer care permite apelul unei functii in mod indirect prin intermediul adresei de memorie a acesteia. Delegatul este utilizat pentru a apela metode ale altor obiecte. Este similar pointerului de functie utilizat in alte limbaje de programare. Diferenta consta in faptul ca delegatul este un tip referinta pe baza clasei System.Delegate. Delegatii sunt folositori in situatiile in care aparitia unui eveniment determina apelul de handler-i de eveniment diferiti, in functie de contextul aparitiei evenimentului. Acest lucru impune asocierea dinamica a evenimentelor cu handler-ii de evenimente, fiind utilizati delegatii in acest scop. Declararea unui eveniment cu specificatia Event determina definirea unei clase delegat implicita denumita EventHandler in interiorul clasei in care este definit evenimentul. Specificatia AddressOf creeaza o instanta de delegat implicita.
AddHandler ObEveniment.UnEveniment, _ New EventHandler(AddressOf ObEveniment_HandlerEveniment)

Un eveniment poate fi declarat utilizand un tip de delegat creat anterior.


Delegat Sub TipDelegat() Event EvenimentDoi As TipDelegat

Acest lucru permite asocierea mai multor evenimente cu acelasi handler de eveniment. Delegatii mai pot fi utilizati pentru apelul de diverse versiuni de subrutine, in functie de contextul executiei aplicatiei. Invocarea metodei delegat presupune:

crearea delegatului; declararea clasei care contine metoda cu aceeasi semnatura cu delegatul (lista de parametri); crearea instantei delegat si invocarea metodei asociata cu delegatul prin apelul metodei standard Invoke.

Exemplul de mai jos evidentiaza mecanisme de definire si utilizare a delegatilor. Tipul de aplicatie selectat la definirea proiectului este Console Application.
'crearea unui delegat Delegate Sub DelOpAritmetica(ByVal x As Integer, ByVal y As Integer) 'crearea primei clase de obiecte care contine 'o metoda cu aceeasi semnatura ca a delegatului Class GrupOp1 Sub OpDiferenta(ByVal a As Integer, ByVal b As Integer) Dim dif As Integer dif = a - b MsgBox("Diferenta este: " & CStr(dif)) End Sub End Class 'crearea celei de a doua clase de obiecte care contine 'o metoda cu aceeasi semnatura ca a delegatului Class GrupOp2

Sub OpInmultire(ByVal a As Integer, ByVal b As Integer) Dim prod As Integer prod = a * b MsgBox("Inmultirea este: " & CStr(prod)) End Sub End Class Sub Main() 'definirea Dim op1 As 'definirea Dim op2 As unei variabile obiect de tipul GrupOp1 New GrupOp1 unei variabile obiect de tipul GrupOp2 New GrupOp2

'crearea unei instante a delegatului Dim del As DelOpAritmetica 'initiliazarea instantei delegatului cu adresa 'metodei OpDiferenta definita in clasa GrupOp1 del = AddressOf op1.OpDiferenta 'invocarea metodei OpDiferenta prin delegat del.Invoke(10, 3) 'initializarea instantei delegatului cu adresa 'metodei OpInmultire definita in clasa GrupOp2 del = AddressOf op2.OpInmultire 'invocarea metodei OpInmultire prin delegat del.Invoke(9, 3) End Sub

Definirea si referirea unei variabile VB.NET


5 comments - This post in english O variabila corespunde unei locatii de memorie, care stocheaza valori la momentul efectuarii de calcule. Variabilele sunt utilizate in calcule, comparatii. Ele au o denumire stabilita in program sursa, iar accesarea valorii stocate in locatia de memorie se realizeaza prin denumirea variabilei. In VB.NET, o variabila are asociat un tip de date [...], fara a fi obligatorie asocierea la momentul definirii. In acest ultim caz, tipul de date asociat variabilei se deduce din valoarea de initializare. Stocarea unei valori in locatia de memorie aferenta unei variabile se realizeaza prin includerea variabilei in operatii de atribuire. Categorii de variabile:

membre: definite in module, clase, structuri; locale: definite in subrutine.

Definirea variabilelor VB.NET se realizeaza cu ajutorul clauzei Dim. Asocierea unui tip de date se efectueaza cu clauza As.
Dim a As Integer = 10 Dim b = 15 Dim d, e As Boolean, f, g As Long

In exemplul anterior, variabilele a, d, e, f si g sunt definite avand asociate tipuri de date. Variabila b nu are asociat explicit tipul de date, acesta fiind stabilit Integer prin initializarea cu valoarea 15. Definirea si referirea mai multor locatii de memorie folosind o singura variabila se realizeaza prin masive. Referirea unei valori dintr-un masiv se realizeaza printr-un index. O variabila masiv are asociat un numar de dimensiuni. Dimensiunile reprezinta directiile in care se completeaza valorile. Capacitatea de stocare a unui masiv in VB.NET se determina ca produs al lungimilor dimensiunilor incrementate cu valoarea 1, fiind exprimata in numar de elemente. Definirea variabilelor de tip masiv si referirea elementelor acestora se realizeaza astfel:
Dim a = Dim a = vector(10) As Integer b + vector(0) mat(10,10) As Double a + mat(0,0)

In exemplul anterior, capacitatea de stocare a masivului unidimensional vector este de 11 elemente, respectiv 121 elemente (11 linii x 11 coloane) pentru masivul bidimensional mat. Fiecare element din cele 11 ale masivului vector este de tip Integer, iar pentru fiecare element din masivul mat se asociaza tipul de date Double. Expresia vector(0) extrage valoarea primului element din masivul vector, iar expresia mat(0,0) refera valoarea elementului pozitionat pe linia 1, coloana 1 din masivul mat. Clauza Dim pentru definirea unei variabile in VB.NET poate fi precedata de un modificator de acces pentru a stabili nivelul de acces din codul sursa la variabila definita. Modificatori de acces si semnificatiile acestora sunt:

Public: acces asigurat, fiind accesibila de catre orice cod sursa; Protected: acces restrictionat codului sursa dezvoltat in afara clasei de obiecte [...] sau a claselor derivate din aceasta si in care s-a definit variabila membra; Friend: acces asigurat codului sursa dezvoltat in aceeasi entitate structurala a programului; Protected Friend: uniune modificatori Protected si Friend; Private: acces asigurat doar codului sursa inclus in tipul de date definit.

Alte elemente optionale de definire a unei variabile:

Shared: elementul definit (variabila) este asociata unei clase sau structuri, nu unei instante;

Shadows: elementul definit (variabila) redeclara sau ascunde un element sau o multime de elemente supraincarcate; Static: variabile definite local isi continua existenta dupa terminarea subrutinei in care a fost definita, inclusiv valoarea sau valorile asociate acesteia; ReadOnly: elementul definit (variabila) poate fi doar citit, nu si scris; WithEvents: specific variabilelor obiect definite pe baza claselor de obiecte care trateaza evenimente [...]; se precizeaza inainte de denumirea variabilei obiect sau a listei de variabile obiect.

Solutions and tutorials for IT&C development

Home Posts list About

Definirea si referirea unei variabile VB.NET Conectare Windows Mobile Emulator la reteaua calculatorului (Windows XP , Vista si 7)

Tipurile de date asociate variabilelor definite in VB.NET


No comments - This post in english Tipurile de date asociate variabilelor stabilesc natura datelor stocate si dimensiunea zonelor de memorie utilizate pentru stocarea datelor. In limbajul VB.NET, dezvoltatorul are la dispozitie urmatoarele tipuri de date:

Boolean: valori True/False; dimensiunea zonei de memorie variaza in functie de platforma de implementare; Byte: valori intregi fara semn; o variabila de tip Byte refera o zona de memorie cu lungime de 1 byte; Char: valori intregi fara semn asociate unui simbol; lungimea zonei de memorie este de 2 bytes; Date: valori de tip data calendaristica si timp orar; lungimea zonei de memorie rezervata este de 8 bytes; Decimal: valori reale cu semn; lungimea zonei de memorie este de 16 bytes; Double: valori reale cu semn reprezentate in virgula mobila, dubla precizie; dimensiunea zonei de memorie alocata este de 8 bytes; Integer: valori intregi cu semn; lungimea zonei de memorie este de 4 bytes; Long: valori intregi cu semn; lungimea zonei de memorie este de 8 bytes; Object: valori de tip adresa ce refera obiecte tipuri referinta: string, masiv, clasa de obiecte, interfata; lungimea zonei de memorie rezervata este de 4 bytes (platforma pe 32 biti) sau 8 bytes (platforma pe 64 de biti); SByte: valori intregi cu semn; dimensiunea zonei de memorie este de 1 byte; Short: valori intregi cu semn; lungimea zonei de memorie este de 2 bytes;

Single: valori reale cu semn reprezentate in virgula mobila, simpla precizie; dimensiunea zonei de memorie este de 4 bytes; String: multime de valori intregi fara semn asociate simbolurilor Unicode; fiecare simbol Unicode ocupa o zona de memorie de 2 bytes; UInteger: valori intregi fara semn; lungimea zonei de memorie este de 4 bytes; ULong: valori intregi fara semn; dimensiunea zonei de memorie este de 8 bytes; User-Defined: valori definite de catre dezvoltator; lungimea zonei de memorie depinde de membrii definiti in structura User-Defined; UShort: valori intregi fara semn; dimensiunea zonei de memorie rezervata este de 2 bytes.

Variabilele declarate fara tip de date au asociat implicit tipul Object. Avantajul acestei tehnici consta in scrierea mai rapida a codului sursa. Dezavantajul consta in posibilitatea de executie mai lenta a aplicatiei.

Caracteristici ale evenimentelor in VB.NET


4 comments - This post in english Evenimentul reprezinta un mesaj transmis de catre un obiect si care anunta aplicatia de producerea unui fapt. Evenimentele sunt implementate folosind delegati [...]. De exemplu, apasarea unui buton de comanda intr-o interfata grafica provoaca aparitia evenimentului Click. Evenimentul este tratat prin intermediul unei proceduri. Evenimentele sunt declarate in cadrul claselor, structurilor, modulelor si interfetelor utilizand cuvantul rezervat Event.
Event Eveniment(ByVal IDArg As Integer)

Transmiterea mesajului asociat unui eveniment este denumita raising, realizandu-se in cadrul clasei, modulului sau a structurii. O clasa de obiecte derivata nu poate provoca transmiterea evenimentelor mostenite din clasa de baza. Specificatia utilizata pentru transmiterea mesajului este RaiseEvent.
RaiseEvent Eveniment(IDArg)

Un obiect capabil sa provoace transmiterea unui mesaj de eveniment poarta denumirea de sursa a evenimentului sau emitator de eveniment. Exemple de obiecte sursa de evenimente sunt obiectele definite de utilizator, controalele si formularele. Aparitia unui eveniment are asociata o procedura denumita handler de eveniment. Inainte ca un handler de eveniment sa poata fi utilizat, trebuie sa se realizeze o asociere intre eveniment si handler-ul de eveniment. Acest lucru se realizeaza cu ajutorul specificatiilor Handles sau AddHandler. Handler-ii de evenimente sunt declarati cu ajutorul specificatiilor WithEvents si Handles. Evenimentele provocate de un obiect prin WithEvents pot fi manipulate cu orice subrutina cu specificatia Handles care precizeaza evenimentul. Asocierea eveniment-handler prin specificatia Handles este limitata prin realizarea asocierii la momentul compilarii. O variabila definita cu specificatia WithEvents nu poate fi utilizata ca o variabila Object, specificandu-se denumirea clasei la momentului definirii.

Dim WithEvents ObEveniment As New ClsEveniment

ObEveniment este variabila declarata cu specificatia WithEvents, iar clasa de obiecte ClsEveniment contine declaratii de evenimente si proceduri de transmitere a mesajelor asociate evenimentelor. Declararea unui handler de eveniment utilizeaza specificatia Handles, asociindu-se cu evenimente declarate in ClsEveniment.
Sub ObEveniment_HandlerEveniment() Handles ObEveniment.UnEveniment

Evenimentul UnEveniment este declarat in clasa ClsEveniment. Specificatiile AddHandler si RemoveHandler sunt mai flexibile decat clauza Handles. Este permisa conectarea si deconectarea dinamica a evenimentelor cu unul sau mai multi handler-i la momentul executiei aplicatiei. Variabilele obiect nu mai trebuie declarate cu specificatia WithEvents. AddHandler are doua argumente: denumirea unui eveniment dintr-o sursa de evenimente si o expresie evaluata la delegat.
AddHandler ObEveniment.EvenimentDoi, AddressOf Me.HandlerEveniment

RemoveHandler deconecteaza un eveniment de la un handler de eveniment si utilizeaza aceeasi sintaxa ca AddHandler.


RemoveHandler ObEveniment.EvenimentDoi, AddressOf Me.HandlerEveniment

Specificatia AddressOf returneaza adresa delegatului.

Definirea si referirea unei variabile VB.NET


5 comments - This post in english O variabila corespunde unei locatii de memorie, care stocheaza valori la momentul efectuarii de calcule. Variabilele sunt utilizate in calcule, comparatii. Ele au o denumire stabilita in program sursa, iar accesarea valorii stocate in locatia de memorie se realizeaza prin denumirea variabilei. In VB.NET, o variabila are asociat un tip de date [...], fara a fi obligatorie asocierea la momentul definirii. In acest ultim caz, tipul de date asociat variabilei se deduce din valoarea de initializare. Stocarea unei valori in locatia de memorie aferenta unei variabile se realizeaza prin includerea variabilei in operatii de atribuire. Categorii de variabile:

membre: definite in module, clase, structuri; locale: definite in subrutine.

Definirea variabilelor VB.NET se realizeaza cu ajutorul clauzei Dim. Asocierea unui tip de date se efectueaza cu clauza As.

Dim a As Integer = 10 Dim b = 15 Dim d, e As Boolean, f, g As Long

In exemplul anterior, variabilele a, d, e, f si g sunt definite avand asociate tipuri de date. Variabila b nu are asociat explicit tipul de date, acesta fiind stabilit Integer prin initializarea cu valoarea 15. Definirea si referirea mai multor locatii de memorie folosind o singura variabila se realizeaza prin masive. Referirea unei valori dintr-un masiv se realizeaza printr-un index. O variabila masiv are asociat un numar de dimensiuni. Dimensiunile reprezinta directiile in care se completeaza valorile. Capacitatea de stocare a unui masiv in VB.NET se determina ca produs al lungimilor dimensiunilor incrementate cu valoarea 1, fiind exprimata in numar de elemente. Definirea variabilelor de tip masiv si referirea elementelor acestora se realizeaza astfel:
Dim a = Dim a = vector(10) As Integer b + vector(0) mat(10,10) As Double a + mat(0,0)

In exemplul anterior, capacitatea de stocare a masivului unidimensional vector este de 11 elemente, respectiv 121 elemente (11 linii x 11 coloane) pentru masivul bidimensional mat. Fiecare element din cele 11 ale masivului vector este de tip Integer, iar pentru fiecare element din masivul mat se asociaza tipul de date Double. Expresia vector(0) extrage valoarea primului element din masivul vector, iar expresia mat(0,0) refera valoarea elementului pozitionat pe linia 1, coloana 1 din masivul mat. Clauza Dim pentru definirea unei variabile in VB.NET poate fi precedata de un modificator de acces pentru a stabili nivelul de acces din codul sursa la variabila definita. Modificatori de acces si semnificatiile acestora sunt:

Public: acces asigurat, fiind accesibila de catre orice cod sursa; Protected: acces restrictionat codului sursa dezvoltat in afara clasei de obiecte [...] sau a claselor derivate din aceasta si in care s-a definit variabila membra; Friend: acces asigurat codului sursa dezvoltat in aceeasi entitate structurala a programului; Protected Friend: uniune modificatori Protected si Friend; Private: acces asigurat doar codului sursa inclus in tipul de date definit.

Alte elemente optionale de definire a unei variabile:


Shared: elementul definit (variabila) este asociata unei clase sau structuri, nu unei instante; Shadows: elementul definit (variabila) redeclara sau ascunde un element sau o multime de elemente supraincarcate; Static: variabile definite local isi continua existenta dupa terminarea subrutinei in care a fost definita, inclusiv valoarea sau valorile asociate acesteia;

ReadOnly: elementul definit (variabila) poate fi doar citit, nu si scris; WithEvents: specific variabilelor obiect definite pe baza claselor de obiecte care trateaza evenimente [...]; se precizeaza inainte de denumirea variabilei obiect sau a listei de variabile obiect.

BAZELE PROGRAMRII Visual Basic for Application (VBA)


Tipuri de date
Variabilele i constantele utilizate ntr-un program VBA pot avea diverse tipuri, specifice datelor memorate. Spre deosebire de alte limbaje de programare, exist un tip universal tipul Variant , care poate conine aproape orice alt tip de date. Acest tip este asignat n mod implicit tuturor variabilelor nedeclarate altfel, nct declararea explicit poate fi utilizat atunci cnd se dorete economisirea memoriei (tipul Variant aloc mai mult memorie), vitez n execuie sau atunci cnd se scriu date ntr-un fiier n acces direct.

Boolean
Domeniu de valori: True sau False (valorile logice) Memorie: 2 bytes Declarator de tip: Observaii. Convertirea valorilor numerice la tipul Boolean: 0 produce False, valorile nenule produc True. Convertirea valorilor de tip Boolean la alte tipuri numerice: False devine 0, True devine -1.

Byte
Domeniu de valori: 0255 (numere ntregi, fr semn) Memorie: 1 byte Declarator de tip: Observaii.

Currency
Domeniu de valori: -922 337 203 685 477.5808 922 337 203 685 477.5807 Memorie: 8 bytes

Declarator de tip: @ Observaii. Utilizate pentru calcule bneti (sau alte situaii n care precizia este foarte important). Valorile sunt memorate n format ntreg, scalate prin 10 000, pentru a obine 15 cifre la partea ntreag i 4 cifre la partea zecimal (reprezentare n virgul fix).

Date
Domeniu de valori: 1 ianuarie 100 31 decembrie 9999, 0:00:00 23:59:59 Memorie: 8 bytes Declarator de tip: Observaii. Informaiile de tip dat calendaristic i/sau timp orar sunt memorate drept numere flotante, partea ntreag reprezentnd data calendaristic, partea fracionar reprezentnd timpul. La convertiri, miezul nopii este 0, miezul zilei este .5, numerele negative reprezint date nainte de 30 decembrie 1899. Poate fi atribuit ca valoare de tip date orice literal care reprezint o dat calendaristic recunoscut ca atare, literalul trebuind s fie cuprins ntre simboluri #, de exemplu #1 Jan 99#.

Decimal
Domeniu de valori: (vezi observaiile) Memorie: 12 bytes Declarator de tip: Observaii. Valorile de tip Decimal sunt memorate ca ntregi fr semn nsoii de un factor de scal, ntre 0 i 28, specificnd numrul de zecimale. Pentru scala=0 (fr parte zecimal), cea mai mare valoare posibil este +/79,228,162,514,264,337,593,543,950,335. Cu scala=28 cea mai mare valoare este +/-7.9228162514264337593543950335 iar cea mai mic valoare nenul este +/-0.0000000000000000000000000001. Not: Deocamdat, tipul Decimal poate fi utilizat doar ca subtip n Variant, adic nu se pot declara variabile ca fiind de tip Decimal. Acestea pot fi create ca Variant cu subtipul Decimal prin funcia Cdec (funcia foreaz o expresie s fie de un tip specificat, din aceeai categorie de funcii fiind i CBool, CByte etc.).

Double

Domeniu de valori: numere negative de la -1.79769313486232E308 pn la 4.94065645841247E-324; numere pozitive de la 4.94065645841247E-324 pn la 1.79769313486232E308 (numere flotante n dubl precizie). Memorie: 8 bytes Declarator de tip: # Observaii.

Integer
Domeniu de valori: -32 768 32 767. Memorie: 2 bytes Declarator de tip: % Observaii.

Long
Domeniu de valori: -2 147 483 648 2 147 483 647. Memorie: 4 bytes Declarator de tip: & Observaii.

Object
Domeniu de valori: (vezi observaiile) Memorie: 4 bytes Declarator de tip: Observaii. Adrese pe 32 de bii care se refer la obiecte. Prin instruciunea Set se atribuie unei variabile declarate de tip Object referina la obiectul dorit. Not. Prin declararea unei variabile de tip Object, referirea la un obiect prin Set produce o ataare trzie (la timpul execuiei run-time binding). Pentru o ataare timpurie (la timpul compilrii compile-time binding) se va utiliza o variabil declarat cu numele clasei respective.

Single

Domeniu de valori: numere negative de la -3.402823E38 pn la -1.401298E45; numere pozitive de la 1.401298E-45 pn la 3.402823E38. Memorie: 4 bytes Declarator de tip: ! Observaii.

String
Domeniu de valori: ir de lungime variabil: pn la 2^31 caractere; ir de lungime fix: pn la 2^16 caractere. Memorie: 2 bytes Declarator de tip: $ Observaii. Un ir de lungime fix declarat Public nu poate fi utilizat ntr-un modul de clas.

Variant (default)
Domeniu de valori: aceleai cu domeniile specificate la tipurile precedente i care pot fi subtipuri ale tipului Variant, cu meniunea c toate subtipurile numerice au domeniul de la Double. Memorie: n funcie de subtipul valorii: valorile numerice ocup 16 bytes, valorile de tip String necesit 22 bytes plus cte un byte pentru fiecare caracter. Declarator de tip: Observaii. Este tipul specificat implicit (n lipsa unei declaraii explicite) pentru o constant, variabil, sau argument (caz care, dei nerecomandat, poate elimina erorile provocate de diferenele de tip ale argumentelor la apelul procedurilor). Cu excepia datelor de tip String cu lungime fix i a datelor cu tipuri definite de utilizator, tipul Variant poate conine orice alt tip de dat. n plus poate s conin valorile speciale Empty, Error, Nothing i Null. Tipul considerat pentru o dat coninut ntr-un Variant poate fi determinat cu funcia VarType sau TypeName. Valorile unei variabile Variant pot s-i converteasc valorile automat. n general, datele numerice sunt memorate n tipul de origine, dar este posibil ca ele s fie promovate la tipul superior dac rezultatul unei operaii necesit acest fapt. De exemplu o valoare declarat iniial drept Integer i atribuit unui Variant va fi memorat ca un ntreg pn cnd, ridicnd-o de exemplu la o putere, valoarea ei excede domeniul tipului Integer. n acest caz are loc promovarea (ca mod de reprezentare) la tipul superior adecvat (Long sau

Double). Dac depirea domeniului are loc pentru subtipurile Currency, Decimal sau Double, atunci se va semnala eroare. Utilizarea tipului Variant permite o tratare mai difereniat a irurilor de cifre: n operaii numerice vor fi considerate numere iar n operaii cu iruri vor fi considerate iruri. Accesul la valorile Variant este mai lent dect accesul la valorile definite prin tipuri explicite. Valorile speciale au semnificaia:
o o o

Empty este valoarea unui Variant care nu a fost iniializat. n calcule numerice este considerat 0 iar n operaii cu iruri este irul de lungime zero. Null este valoarea unui Variant care, n mod programatic, nu conine date. Error este valoarea utilizat pentru a arta ndeplinirea unei condiii de eroare (prin convertirea unui real cu funcia CVErr). Procesarea se va efectua de ctre utilizator, tratarea automat a erorilor nu este activat la setarea acestor valori. Nothing este utilizat pentru disocierea unei variabile de tip Object de un obiect efectiv.

Tipuri definite de utilizator


Un tip de dat definit de utilizator reprezint echivalentul unei nregistrri dintr-un fiier (baz de date), adic o grupare de entiti de tipuri diferite. Definirea are loc la nivel de modul, prin instruciuni Type. Pentru clauzele care apar se va vedea discuia de la domeniul variabilelor. [Private | Public] Type varname elementname [([subscripts])] As type [elementname [([subscripts])] As type] ... End Type unde varname este numele dat tipului definit, iar prin elementname se definesc componentele tipului. Se pot utiliza i componente de tipuri utilizator deja definite. Componentele pot fi i tablouri, caz n care apar definiiile specifice (vezi declararea variabilelor).

Declararea constantelor, variabilelor i tablourilor


Nume
La denumirea procedurilor, constantelor, variabilelor i argumentelor ntr-un modul Visual Basic se cere respectarea urmtoarelor reguli:

primul caracter trebuie s fie o liter; nu se utilizeaz spaiu, punct (.), semnul exclamrii(!), sau caracterele @, &, $, # lungimea denumirii nu poate depi 255 de caractere; la acelai nivel de existen nu pot s existe denumiri identice. Pot s existe totui, n acelai modul, o variabil privat i o variabil la nivel de procedur care s poarte acelai nume.

n general, nu se recomand definirea unor denumiri identice cu nume de funcii, instruciuni sau metode existente n Visual Basic. Dac s-a ajuns totui la aceast situaie, atunci utilizarea funciei intrinseci limbajului, a instruciunii sau metodei care intr n conflict cu un nume asignat necesit calificarea ei n raport de biblioteca asociat. De exemplu, VBA.Left este apelul la funcia Left atunci cnd este definit de utilizator i o variabil Left. Not. Visual Basic nu este case-sensitive, deci denumirea unei entiti nu are ca atribut distinctiv capitalizarea literelor, dar mediul de programare VBA pstreaz capitalizarea din instruciunea unde este definit un nume.

Declararea constantelor
Definirea unei constante se realizeaz prin instruciunea Const, n care se poate specifica tipul, domeniul i valoarea constantei. Valoarea unei constante nu se poate schimba programatic. [Public | Private] Const constname [As type] = expression Public cuvnt cheie, opional, utilizat la nivel de modul pentru a declara constante recunoscute n toate procedurile din toate modulele. Nu este permis n proceduri. Private cuvnt cheie, opional, utilizat la nivel de modul pentru a declara constante recunoscute n toate procedurile din modulul n care apare declaraia. Nu este permis n proceduri. constname numele constantei (obligatoriu). type tipul constantei: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (nc nu este suportat), Date, String, sau Variant. Fiecare constant presupune o clauz As type proprie; n lipsa clauzei se va ataa automat tipul cel mai apropiat expresiei. expression combinaie de identificatori, constante, operatori (cu excepia Is) care produce un sir, numr sau obiect. Nu se pot utiliza variabile, funcii utilizator sau funcii VBA predefinite. n mod implicit, constantele sunt private. La nivel de procedur, sau de modul clas, domeniul lor nu poate fi modificat prin utilizarea clauzei Public. La nivel de modul standard vizibilitatea poate fi modificat prin Public. Constantele declarate n proceduri Sub, Function sau Property sunt locale procedurii, constantele declarate n afara unei proceduri este definit n modulul respectiv. Mai multe declaraii de constante pot fi scrise pe o aceeai linie, separate prin virgule la nivel de atribuiri de expresii. n acest caz, cuvintele Public sau Private care apar se aplic ntregii linii.

Exemple
Const NrLinii = 15 Public Const MesajInitial = "Tastati numarul de linii" Private Const NrLinii as Integer = 15 Public Const NrLinii = 15, Pondere as Single = 1.21

Este de remarcat c, n ultima linie, doar Pondere este de tip Single, n timp ce NrLinii este de tip Integer (n lipsa clauzei As type se atribuie tipul expresiei).

Declararea variabilelor
Variabilele, simple sau tablou, se definesc prin instruciunile Dim, Private, Public, ReDim sau Static. Numele unei variabile trebuie s respecte regulile generale de formare a identificatorilor, tipul variabilei poate fi definit explicit (prin clauza As type) sau implicit (ca Variant). n cazul n care modulul conine instruciunea Option Explicit cu sintaxa Option Explicit i care trebuie s apar naintea oricrei proceduri din modul, toate variabilele trebuie s fie declarate prin instruciunile menionate. Lipsa instruciunii Option Explicit permite ca variabilele s fie definite acolo unde este nevoie de ele prin simpla menionare a unui nou identificator, tipul lor fiind stabilit implicit. Aceast ultim posibilitate poate produce erori greu detectabile. Sintaxa instruciunilor de declarare a variabilelor este urmtoarea i se observ asemnarea clauzelor. Dim [WithEvents] varname[([subscripts])] [As [New] type] Private [WithEvents] varname[([subscripts])] [As [New] type] Public [WithEvents] varname[([subscripts])] [As [New] type] Static varname[([subscripts])] [As [New] type] ReDim [Preserve] varname(subscripts) [As type] varname numele variabilei (obligatoriu). subscripts dimensiunile tabloului de date (dac se declar o variabil tablou). Pot exista pn la 60 de indici, separai prin virgule, declararea dimensiunilor pentru un indice fiind de forma [lower To] upper

Limita inferioar este, implicit, 0, dar poate fi controlat prin instruciunea Option Base. Dac nu se indic limitele indicilor (dar parantezele sunt prezente), se definete o variabil tablou dinamic (nu i prin Static) ale crei dimensiuni pot fi precizate/redefinite prin instruciunea ReDim. New permite crearea implicit a unui obiect (atunci cnd se declar o variabil de tip obiect). O nou instan a obiectului este creat la prima referin a variabilei definite. Clauza nu poate s apar la declararea variabilelor de tipuri intrinseci i nici la declararea instanelor obiectelor dependente. type tipul variabilei definite: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (nesuportat nc), Date, String (pentru iruri cu lungime variabil), String * length (pentru iruri cu lungime fix), Object, Variant, tip utilizator sau tip de obiect. Dac se definesc mai multe variabile ntr-o instruciune, definiiile se separ prin virgul iar clauza de tip nu este extins i la variabilele definite ulterior. Dei toate instruciunile permit declararea unor variabile (simple sau tablou), fiecare instruciune are un efect distinct n ceea ce privete vizibilitatea variabilelor i persistena valorilor.

Dim definete variabile att la nivel de modul ct i la nivel de procedur. Variabilele definite la nivel de modul sunt accesibile n procedurile acelui modul, iar variabilele de la nivel de procedur sunt vizibile doar n procedura respectiv. Private este utilizat la nivel de modul pentru a declara variabile accesibile doar n procedurile acelui modul. Public este utilizat pentru a declara variabile accesibile n toate procedurile din toate modulele i din toate aplicaiile. Prin includerea instruciunii Option Private Module este posibil ca variabilele publice s fie vizibile doar n proiectul n care sunt definite. Static este utilizat la nivel de procedur nestatic pentru a declara variabile care i pstreaz valoarea de la o execuie a procedurii la alta, att timp ct modulul n care apare procedura nu este resetat sau repornit. Variabilele definite prin Static sunt vizibile doar n procedura respectiv. Este de remarcat c se poate defini o ntreag procedur utiliznd clauza Static (vezi definirea procedurilor), caz n care toate variabilele sunt statice. ReDim este utilizat la nivel de procedur pentru realocarea memoriei variabilelor tablou dinamice. Utilizarea clauzei Preserve permite doar modificarea ultimei dimensiuni i pstreaz valorile deja existente. (Pentru detalii vezi i VBA Help).

Exemple
Dim x As Double, ColtStanga As Integer Private I, J As Long Static Venit As Currency, NumPren As String Dim Retineri(5) As Currency

Public indicatori(10) As Byte Dim matrice(1 To 3, 100 To 200) As String Public fntScris As Font Dim appWD As Word.Application

Proceduri
Printr-o procedur se nelege, similar altor limbaje de programare, o mulime de instruciuni care este identificat printr-un nume i care se execut unitar printr-un singur apel. Ar trebui, pentru claritatea programului, ca o procedur s efectueze o prelucrare unitar identificabil n logica programului. Exist trei tipuri principale de proceduri: Sub, Function i Property. Ultimul tip este caracteristic definirii unui obiect i va fi prezentat ulterior. O procedur de tip Sub poate primi i transmite informaii prin intermediul unor variabile publice sau/i a unor parametri. Numele procedurii nu are ataat nici o valoare. O procedur de tip Function se deosebete prin aceea c numele procedurii are ataat o valoare (valoarea funciei) i poate fi utilizat ca orice alt variabil din proiect. Observaie. Orice instruciune executabil trebuie s aparin unei proceduri. Declaraiile pot s apar i n afara procedurilor, la nivel de modul.

Proceduri Sub
Organizarea general a unei proceduri de tip Sub este [Private | Public] [Static] Sub name ([arglist]) [instruciuni] [Exit Sub] [instruciuni] End Sub Public, Private, Static determin vizibilitatea procedurii. Public = vizibil pentru toate procedurile i toate modulele (n funcie de Option Private se definete vizibilitatea pentru alte proiecte). Private = vizibil doar pentru procedurile din modulul unde procedura este declarat. Static = arat c toate variabilele locale i pstreaz valorile ntre apeluri. name numele procedurii. arglist lista de argumente, separate prin virgule. Prin instruciunea Exit Sub se poate iei din procedur i altminteri dect prin linia final.

Argumentele se definesc dup sintaxa: [Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue] Optional arat c parametrul nu este obligatoriu. Parametrii opionali trebuie s fie grupai la sfritul listei (apariia clauzei Optional cere ca toi parametrii care urmeaz s aib aceeai clauz). ByVal arat c apelul paramatrului se face prin valoare (orice modificare a valorii transmise nu este regsit dup prsirea procedurii, calculele efectundu-se pe o copie a parametrului). ByRef arat c apelul paramatrului se face prin referin (orice modificare a valorii transmise este regsit dup prsirea procedurii). Acesta este modul implicit de transmitere a parametrilor. ParamArray folosit doar ca ultim argument n list, denot un tablou Optional de elemente de tip Variant. Clauza ParamArray permite definirea unui numr arbitrar de parametri. ParamArray nu poate fi utilizat mpreun cu ByVal, ByRef, sau Optional. varname numele argumentului. Dac este tablou se vor indica parantezele. type tipul parametrului transmis: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal, Date, String (doar lungime variabil), Object, Variant. Pentru parametrii obligatorii (fr Optional) poate fi i un tip definit sau de obiect. defaultvalue definete valoarea implicit pentru argumentele opionale. Poate fi orice expresie, dar pentru tipul Object se admite doar Nothing.

Apelul unei proceduri Sub


Pentru a executa o procedur de tip Sub din alt procedur (vezi i discuia privind vizibilitatea) se menioneaz, pe o linie separat, numele procedurii urmat sau nu de parametri. Dac este necesar, datorit apelrii unui alt proiect sau modul, atunci apelul este dup modelul: Nume_proiect.Nume_modul.Nume_procedur list de argumente unde lista de argumente poate sau nu s fie inclus ntre paranteze. Argumentele efective sunt separate n list prin virgule i trebuie s respecte ordinea (i tipul) argumentelor din definiia procedurii. n cazul procedurilor cu multe argumente, dintre care multe opionale, transferul poate provoca erori de scriere a codului (un argument opional necesit totui virgula sa, de unde o numrare atent a virgulelor etc.). Pentru asemenea situaii (n special) se permite i transferul valorilor prin intermediul tehnicii de argumente denumite. Aceasta se realizeaz alctuind lista de argumente, la apelul procedurii, din intrri de forma nume_argument:=valoare_argument

separate prin virgule i la care nu mai conteaz ordinea iniial a argumentelor. Se vor specifica doar parametrii care se transmit efectiv (adic valorile opionale dorite i toate valorile neopionale). Pentru apelul unei proceduri se va studia i instruciunea Call.

Proceduri Function
O procedur de tip Function este similar, ca definiie, unei proceduri Sub, dar are particularitatea c returneaz o valoare prin numele su (care se comport deci ca o variabil). [Public | Private] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function Este de remarcat c se poate ataa un tip numelui funciei (adic valorii funciei) i se va remarca existena instruciunilor prin care se atribuie funciei valorile calculate. Valoarea returnat de o funcie poate fi utilizat ntr-o alt expresie prin includerea numelui funciei urmat, ntre paranteze, de valorile efective ale parametrilor. Dac apelul se face prin intermediul instruciunii Call, valoarea funciei nu poate fi utilizat. n asemenea situaii se activeaz de fapt doar prelucrrile colaterale (care, pentru claritatea codului, nici nu sunt recomandate).

Exemple de proceduri
Public Function AriaCilindru (raza, inaltime) As Double Const Pi = 3.14159 cilBaza = Pi*raza^2 cilLaterala = 2*Pi*raza*inaltime AriaCilindru = 2*cilBaza + cilLaterala End Function

Sub AriaCilindru (ByVal raza As Single, ByVal inaltime As Single, _ ByRef cilAria As Double) Const Pi As Single = 3.14159 Dim cilBaza As Single, cilLaterala As Single cilBaza = Pi*raza^2 cilLaterala = 2*Pi*raza*inaltime cilAria = 2*cilBaza + cilLaterala End

Apelul funciei poate fi ntr-o instruciune de genul


CostTotalPiesa = AriaCilindru (r1, h1) * CostUnitar

n timp ce apelul subrutinei poate fi


AriaCilindru inaltime:=h1, raza:=r1, cilAria:=AriePiesa

Organizarea general a unui proiect VBA


Obiectele i prelucrrile necesare realizrii unei aplicaii VBA (presupunnd c se dorete atingerea unui ansamblu coerent de scopuri) sunt gestionate sub forma unui proiect, care are un nume implicit sau dat de utilizator. La un anumit moment pot fi deschise mai multe proiecte, identificabile prin denumirile lor. Deoarece prelucrrile proiectate n VBA sunt ataate documentelor (aciunilor) unor aplicaii particulare (Word, Excel etc.), proiectele sunt salvate o dat cu documentele pe care le nsoesc. Acest fapt nu reduce aria de probleme abordabile ntruct prelucrrile propriu-zise nu sunt limitate la documentul nsoit (se poate deschide astfel un document Word alb i s se efectueze orice prelucrare dorit, fr a avea obligaia de a scrie ceva n documentul deschis). ntr-un proiect VBA sunt identificabile urmtoarele componente:

Module standard (denumite iniial module de cod). Conin declaraii i proceduri generale. Exist de asemenea i module care conin tratarea evenimentelor specifice documentului de care este ataat proiectul. Module de clas. Conin definirea obiectelor create de utilizator. Forme. Conin definiiile dialogurilor din interfaa proiectat de utilizator ca i codul program necesar controlrii dialogurilor. Referine. ntr-un proiect este meninut lista altor proiecte, care sunt referite n proiectul curent.

Un modul de cod poate ncepe cu o seciune de declaraii. Prin declaraii nelegem instruciuni neexecutabile prin care se definesc constante, variabile i proceduri externe. Utiliznd Public, Static, Private se precizeaz i domeniul de vizibilitate a entitilor definite.

Gestionarea (crearea, editarea, tergerea etc.) obiectelor dintr-un proiect se face prin comenzi ale mediului VBA, care este prezentat ntr-o seciune separat.

Domeniul unei variabile, constante sau proceduri


Domeniul unei entiti reprezint mulimea instruciunilor unde poate fi referit acea entitate. Se poate vorbi astfel de vizibilitatea unei entiti. Domeniul este dependent de locul definirii entitii, de clauzele care apar la definire i de parametrii globali ai proiectului. Not. Este de remarcat c utilizarea unei denumiri n afara domeniului iniial prefigurat produce, n lipsa instruciunii Option Explicit, crearea unei noi entiti, fr nici o legtur cu cea precedent, surs de erori greu detectabile. Acesta este motivul pentru care se recomand declararea explicit a tuturor variabilelor. Exist trei tipuri de domenii:
o o o

la nivel de procedur; la nivel de modul, privat; la nivel de modul, public.

Nivelul procedur
O variabil sau constant definit ntr-o procedur este vizibil doar n procedur respectiv. Dac o asemenea entitate trebuie referit i n alte proceduri, atunci declararea ei se va efectua la nivel de modul, sau se va transmite procedurii prin intermediul argumentelor.

Nivel de modul, privat


Variabilele i constantele definite la nivel de modul (n seciunea Declarations) sunt Private n mod implicit, adic sunt vizibile doar n modulul respectiv. Utilizarea clauzei Private nu este deci necesar, dar este recomandat. Not. Dac se utilizeaz instruciunea Option Private Module (n seciunea Declarations a modulului) atunci variabilele i procedurile publice vor fi vizibile doar n proiectul curent. n lipsa acestei declaraii, procedurile publice (din toate modulele standard sau clas) sunt vizibile n toate proiectele care se refer la proiectul curent. Procedurile, variabilele i constantele publice din alte module (cum ar fi modulele ataate formelor) sunt Private pentru proiectul de definiie, deci ele nu sunt accesibile proiectelor care se refer la proiectul unde sunt declarate.

Nivel de modul, public


Variabilele declarate la nivel de modul drept Public sunt vizibile n toate procedurile din proiect. Procedurile sunt publice n mod implicit, cu excepie procedurilor de tratare a evenimentelor, care sunt Private n mod implicit. A se vedea i nota anterioar.

Viata unei variabile

Prin viaa unei variabile se nelege timpul ct variabila are o valoare. Este evident c valoarea unei variabile se poate modifica pe durata vieii sale, dar definitoriu este faptul c variabila are o anumit valoare pe ntreaga durat a vieii sale. La prsirea domeniului, variabila "moare" i nu mai are ataat o valoare. La nceputul execuiei unei proceduri, toate variabilele sunt iniializate: Variabil numeric ir de lungime variabil ir de lungime fix 0 (zero) "" (ir de lungime zero) Completat cu caracterul Chr(0) (avnd codul ASCII 0) Empty fiecare element este iniializat separat, potrivit tipului primar Nothing (pn la asignarea unei referine prin Set)

Variabil Variant Variabile de tip utilizator

Variabil Object

Variabilele care nu sunt modificate i pstreaz valoarea iniial. Variabilele declarate prin Dim la nivel de procedur au valoare pn la terminarea execuiei procedurii (chiar dac se trece prin apel n alte proceduri). Variabilele declarate prin Static, la nivel de procedur, au aceeai via ca i variabilele declarate la nivel de modul i i pstreaz valoarea pn la terminarea execuiei codului (inclusiv de la un apel la altul). Includerea clauzei Static n instruciunea Sub sau Function are ca efect declararea tuturor variabilelor definite n procedura respectiv drept variabile statice (deci care i pstreaz valorile ntre apeluri). Variabilele declarate la nivel de modul standard i pstreaz valoarea pe tot timpul execuiei. Variabilele declarate la nivel de modul clas i pstreaz valoarea att timp ct exist o instan a clasei. Diferena fa de variabilele Static este aceea c memoria este utilizat permanent (nu se elibereaz la prsirea domeniului).

Variabile Object
Declararea unei variabile de tip obiect se poate efectua prin declararea tipului generic Object
Dim myDoc As Object

sau specificnd exact numele de clas dintr-o bibliotec de obiecte referit


Dim myDoc As Word.Document

n primul mod de definire (ca Object) nu se poate efectua la momentul compilrii existena obiectului, nu se poate verifica utilizarea corect a propriettilor i metodelor obiectului i nu se poate lega aceast informaie de variabila obiect definit. Ataarea unui obiect este, n acest caz, o legare trzie (late binding) la momentul execuiei i se efectueaz prin instruciunea Set. Specificarea unei clase la definirea variabilei obiect produce o legare timpurie (early binding) care este mai rapid, se face la momentul compilrii i poate nltura mai rapid erori posibile n utilizarea metodelor i proprietilor obiectului. Instruciunea Set are sintaxa: Set objectvar = {[New] objectexpression | Nothing} unde
o o o

objectvar este numele variabilei (sau proprietii) New permite crearea unei noi instane a clasei Objectexpression este o expresie constnd n numele unui obiect, alt variabil declarat de acelai tip obiect, sau funcie ori metod care returneaz un obiect de acelai tip obiect Nothing permite deconectarea asocierii cu un obiect specific, elibernd resursele sistem i de memorie utilizate.

n general, atunci cnd se utilizeaz Set pentru a asigna o referin de obiect la o variabil, nu se creeaz o copie a obiectului pentru acea variabil. Este creat doar o referin la obiect. Astfel, mai multe variabile de tip obiect pot s se refere la acelai obiect: orice schimbare a obiectului se va reflecta n toate variabilele care refer obiectul. Utiliznd clauza New se va crea efectiv o copie (instan) a obiectului.

Exemple
Prin urmtoarele dou instruciuni se definete variabila objWord care este legat trziu de o aplicaie Word:
Dim objWord As Object Set obhWord = CreateObject("Word.Application") Legarea timpurie se poate efectua prin Dim objWord As Word.Application

Este de remarcat c instruciunea Set apeleaz o funcie care creeaz i returneaz o referin la un obiect ActiveX.

Constante predefinite (builtin)


Bibliotecile de obiecte din fiecare aplicaie Office furnizeaz o mulime de constante predefinite, care pot fi utilizate pentru a stabili proprietti sau pentru a transmite argumente

ctre proprieti sau metode. Constantele sunt, de regul, grupate n tipuri enumerate care reprezint valorile posibile pentru o proprietate specific. Dei este posibil s se utilizeze valoarea numeric a constantei este recomandat s se utilizeze constanta numit ntruct dezvoltri ulterioare ale mediului Microsoft Office (ca i ale aplicaiilor din Visual Studio) tind s pstreze compatibilitatea ntre denumirile constantelor i nu ntre valorile efective. De exemplu se prefer
Application.DisplayAlerts = wdAlertAll

n loc de
Application.DisplayAlerts = -1

pentru a fixa ca Word s afieze toate mesajele de alert la execuia unei proceduri. Codul scris astfel este i mai explicit.

Visual Basic 2010 Lectia 6


Exist mai multe tipuri de date pe care le ntlnim n viaa noastr de zi cu zi. De exemplu, avem nevoie s se ocupe de date, cum ar fi nume, adrese,, data de bani, cotaii bursiere, statistici si etc de zi cu zi. n mod similar, n Visual Basic 2010, avem de a face cu tot felul de de date, unele pot fi matematic calculat n timp ce unele sunt sub forma de text sau alte forme. VB2010 imparte datele n diferite tipuri, astfel nct este mai uor de a gestiona atunci cnd avem nevoie pentru a scrie cod care implic aceste date. 6.1 Visual Basic 2010 Tipuri de date Visual Basic 2010 clasific informaiile menionate mai sus n dou tipuri majore de date, acestea sunt tipurile de date numerice, precum i tipurile de date non-numerice. 6.1.1 Tipuri de date numerice Tipuri de date numerice sunt tipuri de date care constau din numere, care poate fi calculat matematic cu diveri operatori standard, cum ar fi add, minus, nmulire, mprire i aa mai departe. Exemple de tipuri de date numerice sunt marci de examinare, inaltimea, greutatea, numrul de elevi ntr-o clas, mprtesc valori, preul mrfurilor, facturi lunare, taxe i etc n Visual Basic 2010, datele numerice sunt mprite n 7 tipuri , n funcie de gama de valorile pe care le poate stoca. Calculele care implica numai cifre rotunde sau date care nu au nevoie de precizie, se poate utiliza ntreg ntreg lung sau n calcul. Programe de calcul care necesit precizie mare nevoie de a folosi anumite tipuri Single i Double decizia de date, ele sunt, de asemenea, numite numere reale cu virgul. Pentru calcularea valut, avei posibilitatea s utilizai urmtoarele tipuri de date valut. n sfrit, dac o precizie chiar mai mult este nevoie pentru a efectua calcule care implic o mai multe puncte zecimale, putem folosi tipurile de date zecimale. Aceste tipuri de date sintetizate n tabelul 6.1 6.1 [img]

[/img] 6.1.2 Non-numerice Tipuri de date Tipuri de date numerice sunt date care nu pot fi manipulate folosind matematic operatorii standard aritmetic. Datele non-numerice cuprinde date de tip text sau ir de tipuri, tipurile de date data, tipurile de date boolean care stocheaz numai dou valori (adevrat sau fals), tipul de date obiect i tip de date Variant. Ele sunt prezentate pe scurt n Tabelul 6.2

6.2 6.1.3 Sufixe pentru Literali Literali sunt valori pe care l atribuii de date. n unele cazuri, avem nevoie s adugai un sufix n spatele unui literal, astfel nct VB2010 se pot ocupa de calcul mai exact. De exemplu, putem folosi num = 1.3089 # pentru un tip de date dubl. Unele dintre sufixele sunt afiate n Tabelul 6.3.

6.3

n plus, avem nevoie s anexai literali ir n termen de dou citate i literalii data i ora n termen de dou semnul #. Siruri de caractere poate conine orice caractere, inclusiv numere. Urmtoarele sunt cteva exemple: memberName="Turban, John." TelNumber="1800-900-888-777" LastDay=#31-Dec-00# ExpTime=#12:00 am# 6.2 Variabile de Management Variabilele sunt ca nite cutii de e-mail n oficiul potal. Coninutul variabilelor se schimb de fiecare acum i apoi, la fel ca casutele de mail. n termen de VB2010, variabilele sunt zone alocate de memoria computerului pentru a stoca datele. Ca si casutele de mail, fiecare variabil trebuie s fie dat un nume. Pentru a denumi o variabil n Visual Basic 2010, va trebui s urmeze un set de reguli. 6.2.1 Nume variabila Urmtoarele sunt regulile atunci cnd denumirea variabile n Visual Basic 2010 - Acesta trebuie s fie mai mult de 255 de caractere - Nr spaierea este permis - Ea nu trebuie s nceap cu un numr de - Perioada nu este permis Exemple de nume valide i nevalide de variabile sunt prezentate n Tabelul 6.4 .

6.4 6.2.2 Variabile declararea n Visual Basic 2010, trebuie s declare variabilele nainte de a le utiliza prin atribuirea de nume i tipuri de date. Dac nu reuesc s fac acest lucru, programul va afia o eroare. Ele sunt n mod normal, declarate n partea general a codurilor de ferestre ", folosind declaraia Dim. Formatul este dup cum urmeaz: Cod: Dim Variable Name As Data Type

Exemple 6.1 : Cod: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim password As String Dim yourName As String Dim firstnum As Integer Dim secondnum As Integer Dim total As Integer Dim doDate As Date End Sub Putei combina, de asemenea, le ntr-o singur linie, separnd fiecare variabil cu o virgul, dup cum urmeaz: Dim password As String, yourName As String, firstnum As Integer,............. Pentru declaraia de string, exist dou formate posibile, unul pentru ir de lungime variabil i un alt ir de lungime fix. Pentru irul de lungime variabila, trebuie doar s utilizai acelai format ca de exemplu 6.1 de mai sus. Cu toate acestea, pentru irul de lungime fix, trebuie s utilizai formatul de mai jos: Dim VariableName as String * n , n cazul n care n definete numrul de caractere ir poate conine. Exemplu 6.2 Cod: Dim yourName as String * 10

Nulele tau nu poate contine mai mult de 10 litere . 6.2.3 Valori atribuirea Variabile Dup declararea diferitelor variabile folosind declaraiile Dim, putem atribui valori pentru aceste variabile. Formatul general al unei cesiuni este Variable=Expression Variabil poate fi o variabil declarat sau o proprietate valoare de control. Expresia ar putea fi o expresie matematic, un numr, un ir de caractere, o valoare Boolean (adevrat sau fals) i etc Urmtoarele sunt cteva exemple: Cod: firstNumber=100 secondNumber=firstNumber-99 userName="John Lyan" userpass.Text = password Label1.Visible = True

Command1.Visible = false Label4.Caption = textbox1.Text ThirdNumber = Val(usernum1.Text) total = firstNumber + secondNumber+ThirdNumber

6.3 Constante Constante sunt diferite de variabile, n sensul c valorile lor nu se modific pe parcursul derulrii programului. 6.3.1 Declararea unei constante Formatul de a declara o constant este Cod: Const Constant Name As Data Type = Value

exemplu 6.3 Cod: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Const Pi As Single=3.142 Const Temp As Single=37 Const Score As Single=100 End Sub

Visual Basic 2010 Lectia 1


Visual Basic 2010 este cea mai recent versiune de Visual Basic lansate de Microsoft n 2010. VB2010 este aproape similar cu Visual Basic 2008, dar a adugat multe caracteristici noi. Ca i Visual Basic 2008, Visual Basic 2010 este, de asemenea, un obiect-orientate cu drepturi depline de programare (OOP) Limba, deci le-a prins cu alte limbaje OOP, cum ar fi C + +, Java, C # si altele. Cu toate acestea, nu trebuie s tie s nvee VB2010 OOP. De fapt, dac suntei familiarizai cu Visual Basic 6, putei nva VB2010 efort, deoarece sintaxa si interfata sunt similare. Visual Basic 2010 Express Edition este disponibil gratuit pentru descrcare de la site-ul Microsoft. Facei clic pe aceast legtur ntr-http://www.microsoft.com/express/downloads/ pentru a descrca Vb2010. Integrated Development Environment cnd lansai VB2010 Express este prezentat n diagrama de mai jos.Start Page IDE const din cteva seciuni, i anume:

- Noul proiect / pct. Deschidere proiect. - Proiectele recente seciune care afieaz o list de proiecte care au fost create de tine recent. - Noiuni de baz Panoul de-Acesta ofer cteva sfaturi utile pentru a dezvolta rapid aplicaiile. - Ultimele tiri seciune-Acesta ofer cele mai recente tiri on-line despre Visual Basic 2010 Express. Acesta va anunta versiuni noi i actualizri - Proprieti seciune

Pentru a ncepe crearea cererii dumneavoastr n primul rnd, avei nevoie s facei clic pe Proiect nou. Au VB2010 caseta de dialog New Project va aprea.

Caseta de dialog v ofer cinci tipuri de proiecte pe care le pot crea. Aa cum am de gnd s nvee pentru a crea aplicaii Windows, vom selecta aplicaie Windows Forms. n partea de jos a acestei casete de dialog, avei posibilitatea s modificai numele implicit proiectul WindowsApplication1 la alt nume dorii, pentru exampe, myFirstProgram. Dup ce ai redenumit proiect, facei clic pe OK pentru a continua. Au IDE pentru Windows va aprea, este aproape similar cu Visual Basic 6. Acesta const dintr-un formular gol, pe fila set de instrumente i proprieti.Layout-ul este uor diferit de vb2008 ca Toolbox nu este afiat pn cnd facei clic pe fila Instrumente de lucru.

Cnd facei clic pe tab-ul Toolbox, comun Toolbox controale vor aprea.

Acum tragei butonul de control n formular i modificai textul ei implicit Button1 la OK n fereastra de proprieti, OK cuvntul va aprea pe buton pe formular, dup cum se arat mai jos:

Acum, dati click pe butonul OK i apare fereastra de cod. Introducei codul, dup cum urmeaz: Cnd executai programul i facei clic pe butonul OK, o caset de dialog va aprea i va afia "BINE ATI VENIT LA Visual Basic 2010" mesaj, dup cum se arat mai jos:

Aici este , ai creat dvs. primul program VB2010.

Visual Basic 2010 Lectia 2 - Lucrul cu controalele


Controalele din VB2010 sunt instrumente utile care pot fi plasate n form pentru a efectua diferite sarcini. Acestea sunt utilizate pentru a crea mai multe tipuri de aplicaii

Windows.Diagrama de pe dreapta este Caseta de instrumente care conine controalele de VB2010. Acestea sunt clasificate n controale comune, Containere, Meniuri, Bare de instrumente, date, componente, Tiprituri i dialoguri. n momentul de fa, ne vom concentra asupra controalelor comune. Unele dintre cele mai utilizate controale comune sunt Button, Label, ComboBox, ListBox, PictureBox, TextBox etc Pentru a introduce un control n formular, trebuie doar s tragei de control i plasai-l n formular. Putei repoziiona i redimensiona-l cum dorii. S examinm cteva programe care fcut uz de Button, Label, TextBox, ListBox i PictureBox. Nu trebuie s v facei griji att de mult despre codul pentru c voi explica programul de sintaxa pe msur ce progrese la lecii mai trziu.

Cnd facei clic pe tab-ul Toolbox, comun Toolbox controale vor aprea.

2.1 Crearea primului program Pentru a crea programul n primul rnd, glisai butonul de control n formular i modificai textul ei implicit Button1 la OK n fereastra de proprieti, OK cuvntul va aprea pe buton pe formular, dup cum se arat mai jos:

Acum, dati click pe butonul OK i apare fereastra de cod. Introducei codul, dup cum urmeaz:

Cnd executai programul i facei clic pe butonul OK, o caset de dialog va aprea i va afia "BINE ATI VENIT LA Visual Basic 2010" mesaj, dup cum se arat mai jos:

Aici este , ai creat dvs. primul program VB2010 . 2.2 Utilizarea Caset text nainte Eu v va arta cum s creai un calculator simplu care adaug dou numere folosind de control TextBox. n acest program, v introduc dou celule text, trei etichete i un buton. Cele dou celule text sunt pentru ca utilizatorii s introduc dou numere, o etichet este pentru a afia operatorul de adunare i de alte etichete care este pentru a afia semnul egal.

Eticheta este ultima pentru a afia rspunsul. Schimba acum eticheta de pe buton pentru a calcula, apoi facei clic pe acest buton i introducei codul de mai jos: Cod: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim num1, num2, product As Single num1 = TextBox1.Text num2 = TextBox2.Text product = num1 + num2 Label1.Text = product End Sub Cnd rulai programul i introducei dou numere, apsnd butonul calcula te pot lsa s efectua adunri a dou numere.

Visual Basic 2010 Lectia 3


3.1 Proprieti control

nainte de a scrie o procedur eveniment pentru controlul a rspuns la introducerea unui utilizator, trebuie s s lucra cu procedura de eveniment. Avei posibilitatea s setai proprietile controalelor din fereastra de proprie proprieti pentru un formular. Aceasta se refer n special la interfaa primului program le-ai nvat n lecia

Titlul a formularului este definit de proprietate Text i numele su implicit este formularul 1. Pentru a schim de proprietate Text i introducei noul nume, n acest exemplu, titlul este Calculator adugare. Observai c ac apare n partea de sus este n prezent obiectul selectat (n Figura 3.1, obiectul selectat este Form1). La partea d asociate cu obiectul selectat n timp ce elementele enumerate n coloana din dreapta reprezint statele din prop modifica apoi le tastnd sau selectnd opiunile disponibile. Putei modifica, de asemenea, alte proprieti a fo MaximizeBox, MinimizeBox i etc ..

Avei posibilitatea s modificai, de asemenea, proprietile obiectului n timpul rulrii pentru a da efecte spec exemplu, urmatorul cod va schimba culoarea in galben formularul de fiecare dat cnd formularul este ncrca pentru galben este 255,255,0. M n codul refer la forma actual i BackColor este proprietatea culoarea de f Color.FormArbg(cod RGB). Cod:

Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handle Me.BackColor = Color.FromArgb(255, 0, 255) End Sub End Class Putei folosi, de asemenea, procedura de urmat pentru a atribui culoarea la momentul execuiei.

Cod: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handle Me.BackColor = Color.Magenta End Sub Ambele proceduri de mai sus va ncrca form, cu un fundal magenta, dup cum urmeaz:

Aici sunt unele dintre culorile comune i codurile corespunztoare RGB. Putei experimenta mereu cu alte com minim este 0.

Urmtoarele este un alt program care permite utilizatorului s introduc codurile RGB n trei celule text diferi se va modifica n conformitate cu codurile RGB. Deci, acest program permite utilizatorilor s modifice propri

Codul :

Cod: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand Dim rgb1, rgb2, rgb3 As Integer rgb1 = TextBox1.Text rgb2 = TextBox2.Text rgb3 = TextBox3.Text Me.BackColor = Color.FromArgb(rgb1, rgb2, rgb3) End Sub

Visual Basic 2010 Lectia 4


n primele trei lecii, ai nvat cum s introducei codul de program i se scurge eantionul de VB2010 programelor UE, dar fr prea mult nelegere cu privire la logica VB2010 de programare. Acum, haidei s trecem la nvarea cteva reguli de baz despre scrierea codului de program VB2010. Mai nti de toate, permitei-mi s spun c, dei VB2010 este foarte mult asemanatoare cu VB6 n ceea ce privete structura interfeei i a programului, conceptele care stau la baza lor sunt destul de diferite. Diferite principal este c VB2010 este un limbaj plin programarea orientata obiect n timp ce VB6 pot avea capacitati OOP, nu este pe deplin orientat obiect. Pentru a se califica pe deplin ca un limbaj de programare orientat obiect, aceasta trebuie s aib trei tehnologii de baz i anume ncapsulare, motenire i polimorfism. Aceste trei termeni sunt explicate mai jos: ncapsulare se refer la crearea de module de sine stttoare care se leaga de funcii de prelucrare a datelor. Aceste tipuri de date definite de utilizator sunt numite clase. Fiecare clas conine date, precum i un set de metode care manipuleaz date. Componentele de date a unei clase sunt numite variabile de instan i de o instan a unei clase este un obiect. De exemplu, ntr-un sistem de bibliotec, o clasa ar putea fi membru, i John i Sharon ar putea fi dou

cazuri (doua obiecte) din clasa bibliotecii. Succesorale s Clasele sunt create n funcie de ierarhii, i motenire permite structura i metodele ntr-o clas de a fi trecut n jos n ierarhia. Asta inseamna ca programarea este necesar mai puin la adugarea de funcii pentru sisteme complexe. n cazul n care un pas, se adaug la partea de jos a ierarhiei, apoi numai de prelucrare a datelor i asociate cu acest pas unic trebuie s fie adugate. Orice altceva despre acest pas este motenit. Capacitatea de a reutilizarea obiectelor existente este considerat un avantaj major al tehnologiei obiect. Polimorfismul Programarea orientat pe obiecte permite proceduri cu privire la obiectele care urmeaz s fie create exact a cror tip nu este cunoscut pn la runtime. De exemplu, un cursor pe ecran se poate schimba forma de la o sgeat ntr-o linie, n funcie de modul de programare. De rutin pentru a muta cursorul pe ecran, ca rspuns la micarea mouse-ului ar fi scris pentru "cursor", i polimorfism, care permite cursorul pentru a lua la orice form este necesar n timpul rulrii. Acesta permite, de asemenea forme noi pentru a fi integrate cu uurin. VB6 nu este o OOP complet, n sensul c aceasta nu are capaciti motenire, dei se poate face uz de unele beneficii de motenire. Cu toate acestea, VB2010 este o limb complet funcional programarea orientata obiect, la fel ca alte OOP, cum ar fi C + + si Java. Acesta este diferit de versiunile anterioare de VB, deoarece se axeaz mai mult pe datele n sine, n timp ce versiunile anterioare se concentreze mai mult pe aciuni. Versiunile anterioare ale VB sunt cunoscute sub numele de limbajul de programare procedurale sau funcionale. Unele limbi de procedur sunt de programare C, Pascal i Fortran. VB2010 permite utilizatorilor s scrie programe care descompun n module. Aceste module vor reprezenta obiecte din lumea real i sunt stie ca clase sau tipuri. Un obiect poate fi creat dintr-o clas i este cunoscut ca o instanta a clasei. O clasa poate include, de asemenea, subclas. De exemplu, mr este o subclas a clasei de plante i de mere din curte este o instanta a clasei mr. Un alt exemplu este clasa elev este o subclas a clasei umane n timp ce fiul tau John este o instanta a clasei studentului. O clas este format din membri ai datelor, precum i metode. n VB2010, structura programului de a defini o clas uman poate fi scris dup cum urmeaz: Cod: Public Class Human 'Data Members Private Name As String Private Birthdate As String Private Gender As String Private Age As Integer 'Methods Overridable Sub ShowInfo( ) MessageBox.Show(Name) MessageBox.Show(Birthdate) MessageBox.Show(Gender) MessageBox.Show(Age)

End Sub End Class Dup ce ai creat clasa uman, avei posibilitatea s creai o subclas care motenete atributele sau datele din clasa uman. De exemplu, avei posibilitatea s creai o clas elevilor c este o subclas a clasei umane. n cadrul clasei student, nu trebuie s defineasc orice cmpuri de date care sunt deja definite n cadrul clasei umane, trebuie doar s definii cmpurile de date care sunt diferite de la o instan a clasei umane. De exemplu, poate dorii s includ i StudentID Adresa n clasa student.Cod de program pentru StudentClass este dup cum urmeaz: Cod: Public Class Students Inherits Human Public StudentID as String Public Address As String Overrides Sub ShowInfo( ) MessageBox.Show(Name) MessageBox.Show(StudentID) MessageBox.Show(Birthdate) MessageBox.Show(Gender) MessageBox.Show(Age) MessageBox.Show(Address) End Sub

Visual Basic 2010 Lectia 5


n capitolul anterior, ai nvat c VB2010 este un limbaj de programare orientat obiect. Ai neles sensurile de clasa, obiect, motenire ncapsulare precum i polimorfismul. Avei, de asemenea nvat s scrie unele programe simple fr prea mult nelegere care stau la baza unor fundaii i teorii. n acest capitol, vei nva unele teorii de baz despre VB2010 de programare, dar ne vom concentra mai mult pe nvarea prin practic, i anume nvarea prin programe de scris. Voi pstra teoriile scurt, astfel nct s nu ar fi prea dificil pentru incepatori. 5.1 Evenimentul procedur VB2010 este un obiect orientat i limbaj de programare eveniment condus. De fapt, toate

aplicatiile Windows sunt conduse eveniment. Eveniment condus nseamn ghidul va decide ce s fac cu programul, dac el / ea vrea s facei clic pe butonul de comand, sau el / ea vrea pentru a introduce text ntr-o caset de text, sau el / ea ar putea s vrea s nchidei aplicaia i etc Un eveniment este legat de un obiect,. acesta este un incident care se ntmpl la obiect ca urmare a aciunii de utilizator, cum ar fi un clic sau apsarea unei taste de pe tastatur. O clas are evenimente ca acesta creeaz instantanee a unei clase sau al unui obiect. Cnd ncepem o aplicaie Windows n VB2010 n capitolele anterioare, vom vedea un formular implicit cu Form1 apare n IDE, acesta este de fapt clasa Form1 care motenete de la clasa System.Windows.Forms.Form formular, dup cum se arat n Form1 proprieti ferestre.

Cnd ne-am facei clic pe oricare parte a formularului, vom vedea fereastra de cod aa cum se arat mai jos.Este structura unei proceduri eveniment. n acest caz, procedura de eveniment este de a ncrca form1 i se ncepe cu Private Sub si se termina cu Private Sub . Aceast procedur include clasa Form1 i Load eveniment, iar ei sunt obligati, mpreun cu o subliniere, i anume Form_Load. Ea nu face altceva dect ncrcarea unui formular gol. Nu trebuie s v facei griji restul de lucruri n acest moment, acestea vor fi explicate n lecii mai trziu. Cod: Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class

Sunt alte evenimente asociate cu clasa Form1, cum ar fi facei clic pe, cursorChanged, DoubleClick, DragDrop, Enter ca aa mai departe, dup cum se arat n diagrama de mai jos (Se pare c atunci cnd facei clic pe panoul din dreapta sus a ferestrei cod)

5.2 Scrierea codul Acum suntei gata s scrie cod pentru procedura de eveniment, astfel nct acesta va face ceva mai mult decat de ncrcare un formular gol.Codul trebuie introdus ntre Private Sub ...... End Sub Cod: Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "My First VB2010 Program" Me.ForeColor = Color.ForestGreen Me.BackColor = Color.Cyan End Sub End Classs

Prima linie de cod se va schimba titlul de formular pentru a mea Program de VB2010 n primul rnd, a doua linie se va schimba obiectul prim-plan la Padurea Verde (n acest caz, este vorba de o etichet pe care le inserai n formular i schimba numele sarcina de a prim-plan), precum i ultima linie modificri de fundal de culoare Csyan.Egale n codul de fapt este

folosit pentru a atribui ceva la obiect, cum ar fi atribuirea de culoare galben n prim-plan a obiectului Form1 (sau o instan de Form1). Mine este numele dat la clasa Form1. Putem apela, de asemenea, ca acele linii Declaratii. Deci, aciunile programului va depinde de declaraiile nscrise de ctre porgrammer.

aici este un alt exemplu : Cod: Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim name1, name2, name3 As String name1 = "John" name2 = "Georges" name3 = "Ali" MsgBox(" The names are " & name1 & " , " & name2 & " and " & name3) End Sub n acest exemplu, inserai un buton de comand n formular i a redenumi legenda ei ca arata Nume ascunse.Dim cuvnt cheie este de a declara variabile nume1, nume2 i name3 ca ir, ceea ce nseamn c pot ocupa numai text.MsgBox funcie este de a afia numele ntr-o caset de mesaj, care sunt unite prin "&" semne.De ieire este prezentat mai jos:

Comentarii Nu avei permisiunea de a aduga comentarii.

Visual Basic 2010 Lectia 6


Exist mai multe tipuri de date pe care le ntlnim n viaa noastr de zi cu zi. De exemplu, avem nevoie s se ocupe de date, cum ar fi nume, adrese,, data de bani, cotaii bursiere, statistici si etc de zi cu zi. n mod similar, n Visual Basic 2010, avem de a face cu tot felul de de date, unele pot fi matematic calculat n timp ce unele sunt sub forma de text sau alte forme. VB2010 imparte datele n diferite tipuri, astfel nct este mai uor de a gestiona atunci cnd avem nevoie pentru a scrie cod care implic aceste date. 6.1 Visual Basic 2010 Tipuri de date Visual Basic 2010 clasific informaiile menionate mai sus n dou tipuri majore de date, acestea sunt tipurile de date numerice, precum i tipurile de date non-numerice. 6.1.1 Tipuri de date numerice Tipuri de date numerice sunt tipuri de date care constau din numere, care poate fi calculat matematic cu diveri operatori standard, cum ar fi add, minus, nmulire, mprire i aa mai departe. Exemple de tipuri de date numerice sunt marci de examinare, inaltimea, greutatea, numrul de elevi ntr-o clas, mprtesc valori, preul mrfurilor, facturi lunare, taxe i etc n Visual Basic 2010, datele numerice sunt mprite n 7 tipuri , n funcie de gama de valorile pe care le poate stoca. Calculele care implica numai cifre rotunde sau date care nu au nevoie de precizie, se poate utiliza ntreg ntreg lung sau n calcul. Programe de calcul care necesit precizie mare nevoie de a folosi anumite tipuri Single i Double decizia de date, ele sunt, de asemenea, numite numere reale cu virgul. Pentru calcularea valut, avei

posibilitatea s utilizai urmtoarele tipuri de date valut. n sfrit, dac o precizie chiar mai mult este nevoie pentru a efectua calcule care implic o mai multe puncte zecimale, putem folosi tipurile de date zecimale. Aceste tipuri de date sintetizate n tabelul 6.1 6.1 [img]

[/img] 6.1.2 Non-numerice Tipuri de date Tipuri de date numerice sunt date care nu pot fi manipulate folosind matematic operatorii standard aritmetic. Datele non-numerice cuprinde date de tip text sau ir de tipuri, tipurile de date data, tipurile de date boolean care stocheaz numai dou valori (adevrat sau fals), tipul de date obiect i tip de date Variant. Ele sunt prezentate pe scurt n Tabelul 6.2

6.2 6.1.3 Sufixe pentru Literali Literali sunt valori pe care l atribuii de date. n unele cazuri, avem nevoie s adugai un sufix n spatele unui literal, astfel nct VB2010 se pot ocupa de calcul mai exact. De exemplu, putem folosi num = 1.3089 # pentru un tip de date dubl. Unele dintre sufixele sunt afiate n Tabelul 6.3.

6.3 n plus, avem nevoie s anexai literali ir n termen de dou citate i literalii data i ora n termen de dou semnul #. Siruri de caractere poate conine orice caractere, inclusiv numere. Urmtoarele sunt cteva exemple: memberName="Turban, John." TelNumber="1800-900-888-777" LastDay=#31-Dec-00# ExpTime=#12:00 am# 6.2 Variabile de Management Variabilele sunt ca nite cutii de e-mail n oficiul potal. Coninutul variabilelor se schimb de fiecare acum i apoi, la fel ca casutele de mail. n termen de VB2010, variabilele sunt zone alocate de memoria computerului pentru a stoca datele. Ca si casutele de mail, fiecare variabil trebuie s fie dat un nume. Pentru a denumi o variabil n Visual Basic 2010, va trebui s urmeze un set de reguli. 6.2.1 Nume variabila Urmtoarele sunt regulile atunci cnd denumirea variabile n Visual Basic 2010 - Acesta trebuie s fie mai mult de 255 de caractere - Nr spaierea este permis - Ea nu trebuie s nceap cu un numr de - Perioada nu este permis Exemple de nume valide i nevalide de variabile sunt prezentate n Tabelul 6.4 .

6.4 6.2.2 Variabile declararea n Visual Basic 2010, trebuie s declare variabilele nainte de a le utiliza prin atribuirea de nume i tipuri de date. Dac nu reuesc s fac acest lucru, programul va afia o eroare. Ele sunt n mod normal, declarate n partea general a codurilor de ferestre ", folosind declaraia Dim. Formatul este dup cum urmeaz: Cod: Dim Variable Name As Data Type

Exemple 6.1 : Cod: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim password As String Dim yourName As String Dim firstnum As Integer Dim secondnum As Integer Dim total As Integer Dim doDate As Date End Sub Putei combina, de asemenea, le ntr-o singur linie, separnd fiecare variabil cu o virgul, dup cum urmeaz: Dim password As String, yourName As String, firstnum As Integer,............. Pentru declaraia de string, exist dou formate posibile, unul pentru ir de lungime variabil i un alt ir de lungime fix. Pentru irul de lungime variabila, trebuie doar s utilizai acelai format ca de exemplu 6.1 de mai sus. Cu toate acestea, pentru irul de lungime fix, trebuie s utilizai formatul de mai jos: Dim VariableName as String * n , n cazul n care n definete numrul de caractere ir poate conine. Exemplu 6.2 Cod: Dim yourName as String * 10

Nulele tau nu poate contine mai mult de 10 litere . 6.2.3 Valori atribuirea Variabile Dup declararea diferitelor variabile folosind declaraiile Dim, putem atribui valori pentru aceste variabile. Formatul general al unei cesiuni este Variable=Expression Variabil poate fi o variabil declarat sau o proprietate valoare de control. Expresia ar putea fi o expresie matematic, un numr, un ir de caractere, o valoare Boolean (adevrat sau fals)

i etc Urmtoarele sunt cteva exemple: Cod: firstNumber=100 secondNumber=firstNumber-99 userName="John Lyan" userpass.Text = password Label1.Visible = True Command1.Visible = false Label4.Caption = textbox1.Text ThirdNumber = Val(usernum1.Text) total = firstNumber + secondNumber+ThirdNumber

6.3 Constante Constante sunt diferite de variabile, n sensul c valorile lor nu se modific pe parcursul derulrii programului. 6.3.1 Declararea unei constante Formatul de a declara o constant este Cod: Const Constant Name As Data Type = Value

exemplu 6.3 Cod: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Const Pi As Single=3.142 Const Temp As Single=37 Const Score As Single=100 End Sub

Visual Basic 2010 Lectia 7


Calculator pot efectua calcule matematice mult mai rapid dect fiinele umane. Cu toate acestea, calculator n sine nu va fi capabil de a efectua orice calcule matematice fr s primeasc instruciuni din partea utilizatorului. n VB2010, putem scrie cod pentru a instrui computerul pentru a efectua calcule matematice, cum ar fi adunarea, scderea, nmulirea, mprirea i alte tipuri de operaii aritmetice. Pentru ca VB2010 a efectua calcule aritmetice, avem nevoie pentru a scrie cod care implic utilizarea de operatori aritmetici diferite.VB2010 operatori aritmetici sunt foarte similare cu operatori aritmetici normale, doar cu mici variatii.

Operatorii plus i minus sunt aceleai, n timp ce operatorul de multiplicare utilizeaz simbolul * i operatorul de utilizare divizia simbolul /.Lista de operatori aritmetici VB2010 sunt prezentate n tabelul 7.1 de mai jos: Tabelul 7.1 operatii Aritmetice

Exemplu 7.1 n acest program, va trebui s introducei dou textbox, patru labels i un buton. Facei clic pe buton i puneti n codul de mai jos. Not modul n care diferiii operatori aritmetici sunt utilizate. Cnd executai programul, acesta va efectua cele patru operaii aritmetice de baz i a afia rezultatele pe cele patru etichete. Cod: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim num1, num2, difference, product, quotient As Single num1 = TextBox1.Text num2 = TextBox2.Text sum=num1+num2 difference=num1-num2 product = num1 * num2 quotient=num1/num2 Label1.Text=sum Label2.Text=difference Label3.Text = product Label4.Text = quotient End Sub

Example 7.2

Programul poate folosi Teorema lui Pitagora pentru a calcula lungimea ipotenuzei c avnd n vedere durata de partea adiacente a i n partea opus b. n cazul n care ai uitat formula pentru teorema lui Pitagora, este scris ca c^2=a^2+b^2 Cod: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim a, b, c As Single a = TextBox1.Text b = TextBox2.Text c=(a^2+b^2)^(1/2) Label3.Text=c

End Sub

Exemplu 7.3 Calculator IMC O mulime de oameni sunt obezi acum i ar putea afecta serios sntatea lor. Obezitatea a dovedit de ctre experi medicali pentru a fi unul din principalii factori care aduce multe probleme medicale adverse, inclusiv boli de inima. Dac IMC este mai mare de 30, suntei considerat obezi. Putei consulta la urmtoarea gam de valori BMI pentru statutul de greutatea dumneavoastr. Underweight = <18.5 Normal weight = 18.5-24.9 Overweight = 25-29.9 Obesity = BMI of 30 or greater Pentru a calcula IMC-ul tu, nu trebuie s consultai medicul dumneavoastr, ai putea folosi doar un calculator sau un program de calculator casa, acest lucru este exact ceea ce eu v arat aici. Calculatorul BMI este un program Visual Basic, care pot calcula indicele de mas corporal, IMC sau a unei persoane pe baza de greutatea corporal n kilograme i nlimea corpului n metri. IMC poate fi calculat folosind formula greutate / (inaltime) 2, n cazul n care greutatea se msoar n kg i nlime n metri. Dac tii doar greutatea i nlimea n lb si in picioare, atunci ai nevoie pentru a le converti la sistemul metric (ai putea scrie, ntradevr un program VB pentru conversie). Cod: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArsgs) Handles Button1.Click Dim height, weight, bmi As Single

height = TextBox1.Text weight = TextBox2.Text bmi = (weight) / (height ^ 2) Label4.Text = bmi End Sub De ieire este prezentat n diagrama de mai jos. n acest exemplu, nlimea dumneavoastr este de 1.80 m (aproximativ 5 picior 11), greutatea dumneavoastr este de 75 kg (aproximativ 168Ib), i a IMC este de aproximativ 23.14815.Lectur sugereaz c eti sntos. (Nota, 1 picior = 0.3048, 1 lb =. 45359237 kilogram)

Din exemplele de mai sus, putei vedea care efectueaz operaii aritmetice este relativ usor. Aici sunt mai multe proiecte de aritmetice, putei ncerca s programe: Area of a triangle Area of a rectangle Area of a circle Volume of a cylinder Volume of a cone Volume of a sphere Compound interest Future value Mean Variance Sum of angles in polygons Conversion of lb to kg Conversion of Fahrenheit to Celsius

..

Hello, in acest articol voi aborda face doua exercitii, deoarece unul este foarte scurt si nu are rost sa fac un articol doar pentru el. Primul exercitiu va fi un counter, mai exact vom face un buton si un Label in care va aparea de cate ori am apasat pe buton.

Pentru acest program vom avea nevoie de:


un Label un CommandButton

Am numit labelul numar si am modificat marimea fontului din containerul Properties, iar la Caption am pus cifra zero, apoi am asezat butonul si programul meu a ajuns sa arate astfel:

Acuma, dublu-click pe butonul +1 si scrieti urmatorul cod:


numar.Caption = numar.Caption + 1

Cam asta este tot programul. Va contoriza fiecare click pe butonul +1. Mai exact, programul i-a Caption din labelul nostru numar si il aduna cu 1 de cate ori apasam butonul +1. In cel de al doilea tutorial voi incepe sa va povestesc despre Variabilele in Visual Basic. Dar pentru a intelege variabilele, inainte de ele voi scrie putin despre tipurile de date in Visual Basic. Am explicat in mare in urmatorul tabel dimensiunile(in numar de caractere) Valorilor(Data):

(click pe imagine pentru marire) Bun, acuma ca stim ce e fiecare(in mare) definirea unei variabile se face astfel:
Dim NumeVariabila As TipData

Unde Dim este tipul variabilei, in cazul nostru Dimension, NumeVariabila este numele variabilei noastre, ii putem da orice nume, cu doua conditii: sa nu contina spatii si sa nu inceapa cu o cifra, As defineste tipul variabilei, iar TipData este tipul variabilei(byte, integer, long, single, double, string, etc). Pentru a nu aparea probleme cu variabilele trebuie definite tot timpul, putem lucra si cu ele nedefinite, insa pot aparea erori. Visual Basic are o functie care ne vine in ajutor putin, in cazul in care uitam sa definim o variabila, aceasta functie ne spune ca variabila este nedefinita. Aceasta functie se numeste Option Explicit, si pentru a o activa, trebuie sa scriem pe primul rand al programului care foloseste variabile textul Option Explicit Bun, acuma sa incepem sa facem un calculator foarte simplu. Urmand ca in urmatorul articol sa il complicam putin. Pentru acest calculator vom folosi:

doua Textbox doua Label un CommandButton

Eu mi-am aranjat programul in felul urmator:

Am schimbat numele Textbox-urilor din Textbox1 si Textbox2 in nr1 si nr2. Cele doua label-uri sunt: semnul +(Caption) si un label cu Caption gol cu (Name) rezultat. Acuma, vom face ca acest program sa adune numarul introdus in prima casuta(nr1) cu numarul introdus in a doua casuta(nr2). Dublu-click pe butonul = si scriem codul urmator:
Option Explicit Private Sub CommandButton1_Click() Dim operand1 As Integer Dim operand2 As Integer Dim rez As Integer

operand1 = nr1.Text operand2 = nr2.Text rez = operand1 + operand2 rezultat.Caption = rez End Sub Am inceput cu functia despre care am vorbit mai devreme Option Explicit, apoi a urmat actiunea pe CommandButton1. Am definit trei variabile(operand1, operand2, rez) ca si numar intreg(Integer), apoi le-am dat valori(operand1=nr1.text - aici operand1 ia valorile din prima casuta text(nr1), operand2=nr2.text - aici operand2 ia valorile din a doua casuta text(nr2) si rez=operand1 + operand2 - va face adunarea intre cele doua numere), iar in cele din urma am pus ca rezultatul rezultat sa reprezinte valoarea variabilei rez, suma celor doua numere.

Acest calculator va functiona doar cu numere intregi. Pentru a-l face sa functioneze cu numere reale schimbam pur si simplu tipul variabilei din Integer in Double, iar calculatorul nostru va stii si de numere cu virgula. Inca un lucru mai vreau sa mentionez si am terminat, operatorii in Visual Basic sunt: + (adunare) - (scadere) * (inmultire) / (inpartire)

^ (ridicare la putere) Filed under: Digital Life, download, express, microsoft visual basic Dupa cum am spus, in acest articol ne jucam putin cu calculatorul facut in articolul anterior. Mai exact, in acest articol voi explica putin conditiile din Visual Basic: IF si ELSE IF. Vom face aproape acelasi program doar ca in acesta vom folosi:

trei Textbox un CommandButton un Label

Vom folosi trei Textbox-uri, si anume nr1, nr2, semn. Pentru inceput, asezam putin calculatorul sa arate decent, eu l-am asezat astfel:

Primul Textbox din imagine l-am denumit nr1 [(Name) din containerul Properties], al doilea(cel mic) l-am numit semn, iar al treilea nr2. Label-ul unde scrie rezultat trebuie sa fie gol(Properties-Caption) si sa aiba numele rez. Bun, acuma incepe distractia, vom folosi o conditii pentru a comanda calculatorul sa calculeze cele doua numere in functie de semnul dintre ele. Dublu-click pe butonul egal, declaram Option Explicit pe primul rand, apoi scriem urmatorul cod:
Dim Dim Dim Dim numar1 As Double numar2 As Double calc As String rezultat As Double

numar1 = nr1.Text numar2 = nr2.Text calc = semn.Text If calc = "+" Then rezultat = numar1 + numar2 ElseIf calc = "-" Then rezultat = numar1 - numar2 ElseIf calc = "*" Then rezultat = numar1 * numar2 ElseIf calc = "/" Then rezultat = numar1 / numar2 ElseIf calc = "^" Then rezultat = numar1 ^ numar2 End If

rez.Caption = rezultat

Ce am facut mai sus: am declarat variabilele numar1, numar2 si rezultat ca fiind Double, deoarece voi avea nevoie de numere reale(cu +/- si virgula), apoi am declarat variabila calc ca fiind String(sir de caractere), aceasta variabila va fi defapt semnul. Apoi am dat valori variabilelor(numar1 = nr1.Text, etc). Apoi am trecut la partea interesanta, am folosit If, ElseIf si End If. Tot timpul o conditie va incepe cu If, de obicei nu putem exprima totul printr-o singura conditie, atunci vom folosi ElseIf pentru urmatoarele conditii, oricate ar fi, iar la sfarsit, trebuie sa oprim conditia folosind End If. Conditia de mai sus verifica urmatorul lucru: daca calc(semn) este egal cu unul dintre cele cinci semne va calcula cele doua numere in functie de semn si va pune rezultatul in variabila rezultat. La sfarsit, tot ce trebuie sa mai facem este sa afisam rezultatul in label-ul rez, deci: rez.Caption = rezultat Vom avea nevoie de conditii aproape in fiecare program de acuma inainte, de aceea urmatorul articol va fi tot despre conditii, pentru a intelege mai bine cum functioneaza. Iata rezultatele mele la testarea programului: Programul simplu:

Adunare:

Scadere:

Inmultire:

Impartire:

Ridicare la putere:

Cam atata despre conditii deocamdata. Pana la urmatorul articol, exersare placuta va doresc! Salutare, in acest articol voi mai face un program folosind cateva conditii. Va fi putin mai complex, insa nu va fi greu. Pe scurt, vom face un program simplu cu:

un Textbox un CommandButton un Label

Label-ul nu este absolut necesar, l-am adaugat pentru ca utilizatorul sa stie ce sa faca in acest program. Textbox-ul l-am denumit varsta [(Name) din Properties] si cam atata. Programul meu arata cam asa pana acuma:

Acuma, dati dublu-click pe butonul Confirma si sa trecem la treaba scriind urmatorul cod:

Dim ani As Integer ani = varsta.Text If ani > 0 AND ani < 6 Then MsgBox "Salut bebelusule!", MsgBoxStyle.Information, "Bebelus" ElseIf ani > 5 AND ani < 15 Then MsgBox "Salut copilule!", MsgBoxStyle.Information, "Copil" ElseIf ani > 14 AND ani < 21 Then MsgBox "Salut adolescentule!", MsgBoxStyle.Information, "Adolescent" ElseIf ani > 20 AND ani < 31 Then MsgBox "Salut tinere adult!", MsgBoxStyle.Information, "Tanar Adult" ElseIf ani > 30 AND ani < 61 Then MsgBox"Salut adultule!", MsgBoxStyle.Information, "Adult" ElseIf ani > 60 Then MsgBox "Salut batrane!", MsgBoxStyle.Information, "Batran" End If

In codul de mai sus am declarat variabila ani ca si Integer(numar intreg), apoi am creeat niste conditii in functie de care sa primesc un mesaj intr-un Messagebox. Daca varsta este mai mare ca 0 si mai mica decat 6, sa imi spuna ca sunt un bebelus, s.a.m.d.. In alta ordine de idei, la articolul cu primul calculator am uitat sa precizez cativa operatori aritmetici, si anume: > (mai mare) >= (mai mare sau egal) < (mai mic) <= (mai mic sau egal) Filed under: Digital Life, download, express, free, gratis, microsoft visual basic, tutorials

Leave a Reply
alutare, in acest articol voi vorbi despre cateva functii predefinite din Visual Basic. Aceste functii au rolul de a ne ajuta cu unele actiuni de care avem nevoie. Mai exact, voi explica putin functiile: Len(), Left(), Right(), Mid(), InStr(). Iar la final voi face un mic exercitiu folosind aceste functii.Bun, sa incepem:

Len() - se foloseste pentru a calcula dimensiunea unui sir de caractere. Exemplu: Len(TEXT) va rezulta cifra 4. Left() - se foloseste pentru a taia o parte dintr-un sir de caractere incepand din stanga spre dreapta pana la caracterul definit de noi. Exemplu: Left(TEXT PREDEFINIT, 4) va rezulta textul TEXT, deoarece noi i-am spus functiei Left sa afiseze primele 4(caracterul definit de noi) caractere din sirul respectiv. Right() - la fel ca si Left se foloseste pentru a taia o parte dintr-un sir de caractere incepand din dreapta spre stanga pana la caracterul definit de noi. Exemplu: Right(SIMPLE TEXT, 4) va rezulta textul TEXT, explicatia de la Left este valabila si aici. Practic functia Right() incepe numaratoarea de la ultimul caracter spre primul caracter in ordine crescatoare(T-1, X-2, E-3, T-4). Mid() - aceasta functie o vom folosi mai putin, ea taie un sir de caractere folosind doua puncte, fata de Right si Left. Exemplu: Mid(SIMPLE TEXT2, 7, 11) va rezulta textul TEXT, deoarece functia mid incepe sa afiseze caracterele incepand cu al 7-lea

caracter(in exemplu al 7-lea caracter este spatiul) pana la al 11-lea caracter(ultimul T din cuvantul TEXT). InStr() - se foloseste pentru a cauta un anumit caracter/sir de caractere/cuvant intr-un text mai lung. Exemplu: InStr(Textbox1.text, text) va rezulta pozitia cuvantului text in textul introdus in casuta Textbox1, in cazul in care acesta exista, daca nu exista va rezulta 0(zero).

Acuma, sa facem un exercitiu simplu folosind functiile Len(), Left(), Right(), InStr(). In programul urmator vom folosi:

Un Label Un Textbox Un CommandButton

Dupa ce am aranjat putin cele trei elemente, programul meu arata asa:

Partea de cod va fi ceva mai lunga, deoarece vom desparti numele de prenume si afisa. Deci, dublu-click pe butonul Afiseaza Informatii , pe prima linie Option Explicit iar apoi in Subrutina butonului nostru:
Dim nume As String Dim prenume As String Dim lungimetext As Integer Dim spatiu As Integer

lungimetext = Len(TextBox1.Text) spatiu = InStr(TextBox1.Text, " ") prenume = Left(TextBox1.Text, spatiu - 1) nume = Right(TextBox1.Text, lungimetext - spatiu) Label1.Caption = Label1.Caption & "Numele dvs. este: " & nume & ", iar prenumele: " & prenume

Astfel, am declarat patru variabile: nume, prenume(String sir de caractere), lungimetext, spatiu(Integer numar real), apoi le-am dat valori: lungimetext a devenit lungimea textului, folosind functia Len, spatiu a devenit pozitia spatiului din sirul nostru de caractere(Prenume Nume) introdus in TextBox1 folosind functia InStr. Am lasat ce e mai greu la sfarsit: prenume folosind functia Left va prelua textul de la pozitia 1(primul caracter) pana la pozitia spatiu-1(ultimul caracter din primul cuvant), am pus spatiu-1 nu spatiu, pentru ca nu am nevoie si de spatiu in prenumele meu. nume folosind functia Right va prelua textul de la ultimul caracter introdus pana la pozitia spatiului. Dupa cum am explicat anterior, Right ia ultimul caracter ca fiind primul, penultimul ca fiind al doilea, etc. Apoi am afisat totul in Label-ul nostru concatenand(unind) Label1.Caption cu variabilele nume si prenume, folosind semnele & inainte si dupa fiecare sir de text sau variabila. Rezultatul acestui program a fost:

Microsoft Visual Basic #7 despre Matrici/Vectori


Pentru inceput, o matrice nu este nimic altceva decat o variabila cu mai mult spatiu, se declara la fel: Dim matrice(x, y) as Integer -> unde x si y sunt dimensiunile. In continuare vom face o matrice simpla patratica(5 randuri/5 coloane). In program vom avea nevoie de un Label si un Buton(optional doua, pentru butorul End).

Asa arata deocamdata programul meu, acuma Dublu-Click pe Populeaza si scriem codul:
Option Explicit Private SubCommandButton1_Click() Dim matrice(4, 4) As Integer Dim i As Integer Dim j As Integer For i = 0 To 4 For j = 0 To 4 matrice(i, j) = i & j Label1.Caption = Label1.Caption & i & j & " " Next j Next i End Sub

Bun, acuma sa explic putin, in prima parte a codului am declarat variabilele si matricea/vectorul, apoi, am populat matricea cu numere de la 0 la 4 folosind o iteratie(For), astfel: am luat coloana i=0 pana la 4, si l-am umplut cu numere de la 0 la 4, apoi, am luat randul j de la 0 la 4 si l-am umplut cu numere de la 0 la 4 folosind linia: matrice(i, j)=i & j care la coloana i si randul j va pune valoarea i si j(mai exact va pune numarul coloanei si numarul elementului din randul respectiv). Apoi, pentru a si afisa matricea noastra ne folosim de randul: Label1.Caption = Label1.Caption & i & ->care nu face altceva decat sa ia valoarea label-ului existent si sa adauge i si j si un spatiu pentru a arata mai bine matricea. Apoi folosim Next j si Next i pentru a face asta de la 0 la 4.

Asa va arata matricea in momentul asta. Ceea ce vreau sa mai mentionez este:

am declarat matrice(4, 4) si ea este defapt o matrice 55 pentru ca in Visual Basic primul element dintr-o numaratoare este 0(zero) Butonul Exist se face foarte simplu dnd dublu-click pe el si scriind End

Succes!

Microsoft Visual Basic #matrici


In acest articol voi face o noua matrice care se foloseste de siruri de caractere pentru a afisa ceva, in acelasi timp ea va scrie valoarea elementelor intr-un label, unu cate unu. Avem nevoie de un buton si un TextLabel, dupa ce le-am aranjat ele arata asa:

Dublu-click pe buton si scrieti codul de mai jos:


Dim matrice(3) As String matrice(0) = "Ana" matrice(1) = "are"

matrice(2) = "mere" matrice(3) = "frumoase" For i = 0 To 3 MsgBox matrice(i) Label1.Caption = Label1.Caption & " " & matrice(i) Next i

Am definit o matrice simpla de cu 3 elemente(+1 pentru ca numerotarea incepe de la 0). Apoi le-am definit cu matrice(0), matrice(1), matrice(2), matrice(3), apoi am facut o simpla iteratie care sa ia toate numerele de la 0 la 3 si sa imi afiseze un MsgBox cu valoarea elementului din matrice la punctul i. (matrice(i)), totodata am facut sa afiseze si in TextLabel rezultatul, am luat valoarea actuala a Label-ului si am unit-o cu un spatiu gol si matricea in punctul i.

Home Administratie Arta cultura Biologie Casa gradina Diverse Economie Geografie Gradinita Informatica Istorie Jurnalism Limba Literatura romana Management Medicina Personalitati Profesor scoala Sociologie Stiinta Arhitectura constructii Astronomie Chimie Drept Fizica Informatica Abbyy finereader Access Adobe photoshop Autocad Baze de date C Dc Excel Foxpro Hardware Html Java Linux Oracle Php Retele Sql Visual basic Windows Word Matematica Stiinte politice Tutorials

Exploreaza

Mediul de programare VISUAL BASIC

ALTE DOCUMENTE Sortare folosind "qsort()" Virtual Dub XPAntiSpy 3.41 FORCARE Plotarea Allplan Recunoasterea componentelor electronice Topologie wireless Tehnologia informatiei (IT)

Mediul de programare Tehnica mecanica VISUAL BASIC Timp liber

1.1. Introducere in mediul de programare Visual Basic

MS-DOS Concepte de baza ale Tehnologiei Informatiei test

VISUAL BASIC este un limbaj de programare 17117l1120r de inalt nivel facindu-si pentru prima data aparitia in prima sa versiune DOS numita BASIC (Beginers' Allpurpose Symbolic Instruction Code). El este cel mai prietenos si cel mai usor de invatat limbaj de programare 17117l1120r . Diferite companii produc software sub diferite versiuni BASIC, printer care enumeram: Microsoft QBASIC furnizat o data cu sistemul de operare Windows 95, 98. QuickBASIC GWBASIC IBM BASICA

VISUAL BASIC este un limbaj de programare VISUAL operind intr-un mediu grafic bazat pe reprezentari sub forma de obiecte pe cind ascendentul sau BASIC este un limbaj de programare 17117l1120r ce opereaza intr-un mediu de programare text, programul executindu-se secvential. Un program VISUAL BASIC este o colectie de subprograme , fiecare cu codul sau de program ce poate fii executat independent si simultan, si care pot fii legate intre ele intr-un mod sau altul. In momentul lansarii in executie VISUAL BASIC 6 va afisa un ecran care permite: Putem alege una dintre urmatoarele optiuni: Creerea unui nou proiect Deschiderea unui proiect existent Selectia unei liste a recentelor programe deja deschise

Un proiect reprezinta o colectie de fisiere care compun un anumit tip de

aplicatie. Obiectivul prioritar este de a creea programe standard executabile, cu extensia .EXE. Prin urmare vom executa clic pe icoana Standard EXE pentru a intra in mediul de programare VISUAL BASIC.

1.2. Manipularea datelor in VISUAL BASIC


Pentru a manipula cu usurinta datele, precum:

nume adrese bani datele evolutia pe piata bursiera a stocurilor statistici

VISUAL BASIC imparte datele in doua tipuri diferite: Date numerice Date nenumerice

1.3. Date numerice


Datele numerice au la baza numerele si sint impartite in sapte mari tipuri, precum in tabela 1.1. Tabela 1.1.: Tipuri de date numerice TIP Byte Integer Long Single FORMAT 1 byte 2 bytes 4 bytes 4 bytes GAMA DE REPREZENTARE 0 to 255 -32,768 pina la 32,767 -2,147,483,648 pina la 2,147,483,648 -3.402823E+38 pina la -1.401298E-45 pentru valori negative 1.401298E-45 pina la 3.402823E+38 pentru valori pozitive -1.79769313486232e+308 pina la 4.94065645841247E-324 pentru valori negative 4.94065645841247E-324 pina la 1.79769313486232e+308 pentru valori positive -922,337,203,685,477.5808 pina la

Double 8 bytes Currency 8 bytes

922,337,203,685,477.5807 +/- 79,228,162,514,264,337,593,543,950,335 Decimal 12 bytes +/- 7.9228162514264337593543950335 (28 pozitii zecimale).

1.4. Tipuri de date nenumerice


Sint prezentate in Tabela 1..2. Tabela 1.2.: Tipuri de date nenumerice TIPUL DE DATE FORMAT GAMA DE REPREZENTARE Lungimea unui String(lungime fixa) 1 pina la 65,400 caractere string String(lungime Lungimea + 10 0 pina la 2 miliarde caractere variabila ) bytes Ianuarie 1, 100 pina in Decembrie Date 8 bytes 31, 9999 Boolean 2 bytes True sau False Object 4 bytes Orice obiect compus Orice valoare mai mare decit Variant (numeric) 16 bytes Double Lungimea+22 Variant (text) La fel ca si un string variabil bytes

1.5. Utilizarea sufix-urilor in reprezentarea datelor


Uneori avem nevoie sa adaugam in fata datelor cite un sufix astfel incit VB poate manipula cu acuratete aceste date in timpul efectuarii calculelor. Aceste sufixuri sint prezentate in Tabela 1.3. Tabela 1.3: Sufix-uri utilizate in reprezentarea datelor SUFIX & ! # @ TIP DE DATE Long Single Double Currency

Sirurile de caractere (oricare caracter precum numere, date si simboluri) sint incluse intre doua apostrofuri, iar datele de tip Date sint incluse intre

doua semne #.

1.6. Manipularea Variabilelor


Variabilele reprezinta locatii de memorie RAM pentru incarcarea temporara a datelor. In Visual Basic fiecare variabila poarta un nume, precum a, b, c, d, i, k, lungime, latime, raza, volum, etc., care respecta urmatoarele reguli: Trebuie sa fie mai mici decit 255 caractere Nu sint permise spatii intre caractere Nici un nume nu incepe printr-un numar Punctul nu este permis in cadrul sirului de caractere

Example de variabile valide si invalide sint prezentate in tabela 1.4 . Tabela 1.4.: Variabile valide si invalide VALID NAME Comenzi_IPA Acest trimestru INVALID NAME Comenzi.IPA 7ABC Nick&fratele Client_Date_Personale_Contract is not acceptable

*&

1.7. Declararea Variabilelor


Declararea unei variabile consta in specificarea numelui sau si al tipului de date careia ii apartine. In Visual Basic declararea variabilelor are loc inainte ca acestea sa fie utilizate. Ele sint de obicei declarate in sectiunea ferestrei de code utilizind instructiunea Dim (dimensiune) si au formatul urmator: Dim numele variabilei as Tip de date Exemple de declarare a unor variabile putem da: Dim numeutilizator as String ( declararea sirului de caractere "Viorel") Dim parola as String (declararea sirului de caractere "Vasile") Dim primuloperand as Integer (declararea variabilei cu valori intregi primuloperand) Dim rezultat as Integer (declararea variabilei cu valori intregi rezultat) Dim raza as Integer (declararea variabilei cu valori intregi raza)

Dim datanasterii as Date (declararea varaiabilei de tip Date datanasterii) In sectiunea de cod unde efectuam declararea lor putem scrie aceste variabile pe aceiasi linie sau pe mai multe linii, grupate intre ele si separate printr-o virgula ca de exemplu: Dim numeutilizator, parola as String Dim primuloperand, rezultat, raza as Integer Dim datanasterii as Date Daca tipul de data nu este specificat Visual Basic automat va declara variabila respective de tip Variant. Pentru declararea unui sir de caractere exista doua formate posibile, unul de lungime variabila iar celalalt de lungime fixa, precum in exemplele de mai jos: Dim numeutilizator as String (lungime variabila) Dim parola as String * 9, unde 9 defineste numarul de caractere al sirului, care nu poate fii depasit.

1.8. Asignarea valorilor Variabilelor


Dupa declararea diferitelor variabile cu ajutorul instructiunii Dim vom putea asigna valori acestor variabile, utilizind urmatorul format general: Variabila = Expresie unde Variabila poate fii oricare dintre variabilele declarate anterior , iar Expresie ar putea fii o expresie matematica, un numar (initializare), un sir de caractere, o valoare logica booleana (true si false), etc, precum in exemplele de mai jos:
primuloperand = 100 (initializarea rezultat = 3*primuloperand +100 numeutilizator = "Viorel" parola.Text = parola Label1.Visible= true Command1.Visible = false Label4.Caption = textbox1.Text raza = Val(usernum1.Text) variabilei operand)

1.9. Operatori in Visual Basic


Pentru efectuarea calculelor aritmetice si generarea de rezultate pentru utilizator vom utiliza diferiti operatori matematici, precum cei prezentati in

tabela 1.9. Tabela 1.9: Operatori utilizati in Visual Basic OPERATOR FUNCTIE MATEMATICA Exponentiala ^

EXEMPLU 3^4=81 5*4=20 16/2=8 10 Mod 3 = 1

*
/ Mod

\ + or &

Multiplicare Impartire Impartire cu rest (returneaza doar restul impartirii cu numere intregi) Impartire intre numere integi cu rest ( returneaza doar citul neglijind zecimalele) Concatenare sir

21\5=4 "Visual"&"Basic"="Visual Basic"

In afara acestora mai sint si operatorii logici AND, NOT, OR in cazul operarii cu expresii logice booleene.

1.10 Instructiuni de control 1.10.1 Controlul Structurilor


Multe dintre sarcinile implicate in programare sint repetitive Orice sarcina care poate fii calculata poate fii construita utilizind constructori: secventa (realizeaza o secventa de actiuni)

conditie (daca o conditie este indeplinita atunci se poate trece la realizarea actiunii, in caz contrar se va executa cu totul altceva)

repetitie

(repeta o operatie)

Ramificare conditionata

Instructiunea If Else Bucle (Loops) o Bucla Do

contor = 0 Do Until contor = 1000 contor = contor + 1 MsgBox contor Loop


o

Bucla Do While contor = 1 Do MsgBox contor contor = contor+ 1 Loop While contor < 1001

Select Case

Este utilizata pentru selectarea unei alternative dintre toate cele existente si are urmatorul format general: Select Case expresie Case valoare1 Bloc cu una sau mai multe instructiuni Visual Basic Case valoare2 Bloc cu una sau mai multe instructiuni Visual Basic Case valoare3 Bloc cu una sau mai multe instructiuni Visual Basic ... Case Else Bloc cu una sau mai multe instructiuni Visual Basic End Select Tipul de date specificat in expresie trebuie sa fie acelasi din Case valoare Cuvintul cheie Is este utilizat aici pentru impunerea de conditii in cazul datelor

1.11. Functii in VISUAL BASIC


Functiile sint similare cu procedurile normale, rolul lor fiind acela de a accepta anumite valori pentru parametrii de intrare si apoi trecerea acestora in programul principal pentru terminarea executiei. Distingem doua tipuri de functii, functii de biblioteca (interne) si functii create de programator. Formatul general al unei functii este de forma: Numelefunctiei(argumente) unde argumentele sint valorile parametrilor ce trebuiesc trecute prin functie

programului principal. In cele ce urmeaza vom prezenta doua dintre cele mai utilizate functii interne in programarea Visual Basic MsgBox( ) si InputBox( ).

1.11.1 Functia MsgBox ( )


Rolul functiei MsgBox( ) este de a produce un "pop-up" caseta de mesaj si a invita (prompt) utilizatorul sa execute mai inti un clic pe butonul de comanda inainte de a continua. Formatul unei caste de mesaj este de forma:

1.11.2 Functia InputBox( )


Functia InputBox( ) afiseaza o caseta de mesaj unde utilizatorul poate introduce o valoare sau mesaj sub forma de text, avind urmatorul format: RezultatMsg = InputBox(Prompt, Title, default_text, x-position, y-position) RezultatMsg este o variabila de tip variant care de obicei este declarata ca sir de caractere, ce accepta mesajul de intrare introdus de utilizator. Argumentele functiei au urmatoarea semnificatie: Prompt Title - Mesaj afisat normal ca o intrebare - Titlul casetei de intrare (Input Box).

default-text - Textul prestabilit care apare in cimpul de intrare x-position si y-position -pozitia sau coordonatele casetei de intrare Interfata Codul Procedurii pentru butonul OK

1.11.3 Creerea Functiilor proprii ( externe, de catre programatori)


Formatul general al functiei este de forma: Public Function functionName (Arg As dataType,..........) As dataType sau Private Function functionName (Arg As dataType,..........) As dataType unde Public semnifica faptul ca functia este valabila in intregul program

pe cind Private semnifica ca functia este aplicabila numai la anumite module sau proceduri.

Document Info

A fost util? Daca documentul a fost util si crezi ca merita sa adaugi un link catre el la tine in site

Accesari: 2752 Apreciat:

Copiaza codul in pagina web a site-ului tau.


<a

Comenteaz a documentu l: Nu esti inregistrat Trebuie sa fii utilizator inregistrat pentru a putea comenta Creaza cont nou

Copyright Contact (SCRIGROUP Int. 2013 )

Autentificare sau nregistrare


Acas Forumuri > Cu mna pe claviatur > Programare, administrare si securitate >

Visual Basic Programming


Discuie n 'Programare, administrare si securitate' nceput de Sniffer, 29 Iulie 2002. Pagina 2 din 3 < Prec 1 2 3 Urmtoarea >

1. animaluts back from the dead


Oleg , tu ce Windows ai ?

animaluts, 19 August 2002 #21

2. imported_Oleg Membru nou


Daca m-ai intrebat in Windows: XP Dar pe deasupra mai tin shi Linux Mandrake (ca n-am alt distributiv) ... cine are SuSE ... raspundetzi va rog! imported_Oleg, 19 August 2002 #22

3. Mask Membru nou


Pentru Sniffer Deci uite care este raspunsul meu: 1.In primul rind se socoate ton foarte urit sa folosesti GoTo in program. Straduite sa nu le folosesti sau sa reduci folosirea lor la minim. 2. Excellul intelege variabilele, trebuie doar sa le folosesti corect. De exemplu: -------------Cum e incorect------------Range("a+1:2").Select Selection.Copy Range("a").Select ActiveSheet.Paste --------------Cum e corect-------------Range(Str(a + 1) + ":2").Select Selection.Copy Range(Str(a)).Select ActiveSheet.Paste -----------------Lamurire---------------Ca argument pentru Range tu ii dai o valoare textuala "a+1:2", adica tu nu folosesti variabila _a_(sa presupunem ca a este egal cu 4) in argumentul tau si ca rezultat Range primeste ca argument exact stringul "a+1:2" in loc de "5:2". Pentru ca variabila _a_ sa fie folosita in expresia ta care este trimisa ca argument pentru Range, trebuie sa formez un string care o sa contina datele din variabila. In primul rind tu calculezi a+1 si primesti 5. In aldoilea rind transferi numarul 5 in stringul "5" folosind functia Str. In altreilea rind concatenezi stringul "5" cu stringul ":2" si ca rezultat primesti exact un string "5:2" care este trimis ca parametru. La fel si in cazul cind tu trimiti "a" ca argument pentru Range. Daca vrei sa trimiti valoarea textuala a variabilei _a_ atunci foloseste functia Str pentru ca sa o transformi in tip text.

Mask, 19 August 2002 #23

4. Sniffer Seeking serial monogamy


Mersi mult , o sa vad cum iese si iti scriu ! Sniffer, 20 August 2002 #24

5. Sniffer Seeking serial monogamy


Da cum faci daca si a doua cifra tre sa fie o variabila ? Exemplu : ======================== Range(Str(a + 1) + ":2").Select Selection.Copy Range(Str(a)).Select ActiveSheet.Paste ======================== Daca in loc de 2 tre sa fie o variabila ca in exemplul lui a+1 , atunci cum scriu ca am incercat asa dar nu a mers : sa zicem ca 2 sta in loc de d ======================== Range(Str(a + 1) + ":"Str(d)).Select Selection.Copy Range(Str(a)).Select ActiveSheet.Paste ======================== Am crezut ca asa trebuie , dar nu merge ! Ce fac ? Sniffer, 20 August 2002 #25

6. Mask Membru nou


Concatenarea unui string in VB Aproape e corect. Numai ca incearca sa evaluezi parametrul care tu il trimiti Str(a + 1) + ":"Str(d) - ce avem aici? Un string care e Str(a+1), alt string care e ":" si altreilea string care e Str(d).

Acuma scopul nostru e sa le concatenam pe toate 3. Concatenarea a stringurilor in VB se face cu ajutorul operatorului +, adica pentru a concatena Str(a) si ":" si Str(b) trebuie sa scriem urmatoarea expressie: Str(a)+":"+Str(d) Tu ai scapat plusul din expresie Mask, 21 August 2002 #26

7. Sniffer Seeking serial monogamy


Chestia e ca am incercat varianta , dar nu a mers ! Daca ai alta varianta , zii , dar oricum vad eu , poate am gresit ceva si revin ! Sniffer, 21 August 2002 #27

8. Mask Membru nou


La mine totul a mars, controleaza sintaxa. Mask, 21 August 2002 #28

9. Sniffer Seeking serial monogamy


O.k. Iata chestia. Eu am incercat mai multe variante dar nu mi-a iesit cum trebuie , asa ca o sa-ti explic ce tre sa fac si daca o sa ai ceva timp incearca sa vezi de poti face Modulul , o.k. ? Des. 1 Deci , sa zicem ca introducem in celula I2 numarul ce trebuie sters din tabela , ex : 4 . modulul tre sa verifice in ce rind se afla numarul 4 si sa copie toate rindurile urmatoare , adica 5 , 6, etc. peste acesta . Adica daca 4 se afla la B7 atunci toate rindurile incepind cu B8 in jos sa le copie in B7 ! Sper ca ai inteles . Tre sa iasa ceva de tipul : Des. 2 Sper ca ai observat diferenta . Rindul 5 si 6 sau mutat mai sus , numerele se schimba automat ! Dar cum sa fac sa le copii ? Cum sa fac sa iasa cea ce am in Des. 2 ?! :-? Sniffer, 22 August 2002 #29

10. Mask Membru nou


Intrebari Am citeva intrebari: 1. Numerele celea(1,2,3,4,5, etc.) tot timpul o sa fie in colonitsa B si o sa starteza din celula 3, adica tot timpul numarul 1 o sa fie in b4, numarul 2 o sa fie in b5, numarul n o sa fie in bn+3? 2. Cum se inscriu numerele in celule? Ai vre-o formula ca celulele sa fie pline? Adica B5=B4+1? Sau le introduci manual? Mask, 22 August 2002 #30

11. Sniffer Seeking serial monogamy


Da , ai inteles corect . Numerele vor fi in B . Conform la intrebarea cu formula , si asta e corect . Fiecare celula aduna +1 la valoarea celulei precedente ! Si o sa inceapa din celula a treia , adica de la B4 numerele ! Sniffer, 22 August 2002 #31

12. Mask Membru nou


Cam asa tre sa arate codul: Sub GoRemove() Dim ln As Integer Dim i As Integer Dim rx, ry, column As Integer rx = 9 ' coloana unde se afla numarul rinduui care tre de sters ry = 2 ' rindul unde se afla numarul rinduui care tre de sters column = 2 ' rindul in care se afla coloana cu numerele rindurilor din lista ln = Cells(ry, rx) ' in ln bagam numarul rindului care tre de sters ' creem un ciclu care gaseste rindul care tre de sters i=1 While Cells(i, column) &lt;> ln i=i+1 Wend ' stergem rindul si mutam rindurile de mai jos in sus Rows(i).Select Selection.Delete Shift:=xlUp ' renumerotam rindurile While Cells(i, column) &lt;> "" Cells(i, column) = ln

i=i+1 ln = ln + 1 Wend End Sub Mask, 22 August 2002 #32

13. Sniffer Seeking serial monogamy


Mersi , acus incerc ! Sniffer, 22 August 2002 #33

14. Sniffer Seeking serial monogamy


' renumerotam rindurile While Cells(i, column) &lt;> "" Cells(i, column) = ln i=i+1 ln = ln + 1 Wend In rindul acesta imi da greseala ! Adica e colorat in galben ! Poate nu ai notat corect "" , adica poate celula goal se noteaza altfel ?![/code] Sniffer, 22 August 2002 #34

15. Sniffer Seeking serial monogamy


' renumerotam rindurile While Cells(i, column) &lt;> "" Cells(i, column) = ln i=i+1 ln = ln + 1 Wend In rindul acesta imi da greseala ! Adica e colorat in galben ! Poate nu ai notat corect "" , adica poate celula goal se noteaza altfel ?! Sniffer, 22 August 2002 #35

16. Mask Membru nou


Care este mesajul greselei? La mine merge fine! Mask, 22 August 2002 #36

17. Sniffer Seeking serial monogamy


Error Type mismatch ! Sniffer, 22 August 2002 #37

18. Mask Membru nou


hm ... straniu ... ok, scrie dara Str(Cells(i, column)) in loc de Cells(i, column) Mask, 22 August 2002 #38

19. Sniffer Seeking serial monogamy


si inca ceva ... daca lasi Celula 2,9 goala atunci modulul sterge rindurile goale de inainte de tabel . Cum faci sa scrii un If de tipul ...

......... ln = Cells(ry, rx) ' in ln bagam numarul rindului care tre de sters If ln = "" Then GoTo 1: Else End If ' creem un ciclu care gaseste rindul care tre de sters I=1 ......... 1: sub end

sau o alta varianta care sa nu stearga celule de inainte ci sa sara peste ele ? Sniffer, 22 August 2002

#39

20. imported_Adrenalin Cu Tractorashu:)


O intrebare din VB Cum sa aflu cite simboluri ex.":" sunt intro variabila shi de exemplu imi trebuie sa aflu fiecare simbol al citilea este in string Sper ca ma inteles cineva Functia InStr arata numai primul simbol gasit dar daca eu vreau sa aflu pe al-2lea ? :roll: imported_Adrenalin, 4 Septembrie 2002 #40 (Trebuie s te autentifici sau nregistrezi pentru a rspunde.) Pagina 2 din 3 < Prec 1 2 3 Urmtoarea >

Public aceast pagin


Acas Forumuri > Cu mna pe claviatur > Programare, administrare si securitate >

Acas Forumuri o Caut n forumuri o Ce e nou? Albume Ajutor We.md Romn (RO)

Contacteaz-ne Acas n sus RSS

XenForo 2011 XenForo Ltd.

Biologie Istorie

Chimie Literatura

Didactica Matematica

Fizica Psihologie

Geografie

Informatica

Informat

rmatica in Visual Basic

Prelucrarea fisierelor in Visual Basic


Prelucrarea fisierelor in Visual Basic

Access

Adobe photo Autocad

ne de Visual Basic, fisierele au fost prelucrate folosind instructiunea Open si alte instructiuni si functii isme sunt suportate complet in Visual Basic 6.0, insa ele pot fi inlocuite, eventual, prin utilizarea SO (File System Object).

Baze de date C

aplicatia dumneavoastra pentru utilizarea bazelor de date, nu veti avea nevoie sa asigurati accesul direct date si controalele legate permit citirea si scrierea datele din si in baza de date; acest procedeu este mult cat utilizarea tehnicilor de acces direct la fisiere.

Calculatoare Corel draw Excel Foxpro Html Internet Java Linux

s la fisiere

e, de fapt, o succesiune de bytes stocati pe disc. Cand aplicatia acceseaza un fisier, ea trebuie sa prezinta caractere, numere, siruri s.a.m.d.

de date pe care le contine fisierul, trebuie sa folositi tipul potrivit de acces la fisiere. In Visual Basic, exista siere:

entru citirea si scrierea fisierelor text in blocuri continui.

m) Pentru citirea si scrierea fisierelor text sau binare cu inregistrari de lungime fixa. citirea si scrierea fisierelor structurate arbitrar.

Mathcad Matlab Outlook Pascal Php Powerpoint

tial este destinat prelucrarii fisierelor de text simple. Acessul secvential presupune ca fiecare caracter din caracter de text fie o secventa de formatare a textului (cum ar fi, un caracter de linie noua). Datele sunt ANSI.

in acces aleator (sau acces direct) se presupune ca este format din inregistrari (articole) de lungime fixa puri de date definite de utilizator pentru a crea articole cu numeroase campuri; fiecare camp putand ate. Datele sunt stocate ca informatii binare.

a permite sa utilizati fisiere pentru a stoca orice informatie vreti. Ele sunt similare fisierelor in acces tului ca nu se face nici o prezumptie privind tipul de date sau lungimea inregistrarilor. Totusi, pentru elor trebuie sa cunoasteti cum au fost stocate datele.

Retele calcul Sql Windows Word

uctiunile ce se pot utiliza pentru accesul la fisiere

ator sunt prezentate pe scurt principalele instructiuni ce se pot utiliza pentru accesul la un fisier: Descriere Asigura executarea operatiilor de intrare/iesire asupra unui fisier. Incheie operatiile de intrare/iesire pentru un fisier deschis cu instructiunea Open. Citeste intr-o variabila datele dintr-un fisier disc deschis cu instructiunea Open. Scrie datele dintr-o variabila intr-un fisier pe disc deschis cu instructiunea Open. Citeste datele dintr-un fisier deschis in acces secvential si le atribuie unor variabile. Citeste o singura linie dintr-un fisier secvential deschis si o atribuie unei variabile de tip String. Scrie intr-un fisier cu acces secvential datele formatate pentru afisare. Scrie intr-un fisier variabilele precizate separandu-le prin virgule si incadrand intre ghilimele sirurile de caractere. Sterge un fisier de pe disc Redenumeste un fisier, director sau dosar. Stabileste pozitia pentru urmatoarea operatie de citire/scriere intr-un fisier deschis cu instructiunea Open Declara un tip de data definit de utilizator.

Concepte ale controlului a de control timp real - con

Macromedia Dre

Programe info

UNITATEA DE DISC F

Fundamentele program

TINERET SI PUTERE SOF

VISUAL BASIC - T

Inginerie Software - Defin cerintelor

LISTE CIRCULARE SIMP

nctii utilizate in prelucrarea fisierelor sunt prezentate in urmatorul tabel:

SISTEME DE O

un intreg reprezentand valoarea booleana True cand s-a intalnit sfarsitul de fisier in cazul unui fisier tru acces secvential sau aleator. un sir continand caracterele citite dintr-un fisier deschis in modul Input sau Binar. un intreg lung repezentand lungimea, in bytes, a unui fisier deschis cu instructiunea Open. un intreg lung care specifica pozitia curenta de citire/scriere dintr-un fisier deschis cu instructiunea

un intreg lung care specifica pozitia curenta de citire/scriere intr-un fisier deschis. un intreg lung care specifica lungimea, in bytes, a unui fisier. un intreg care reprezinta urmatorul numar de fisier disponibil pentru utilizare intr-o instructiune Open.

r prezinta principalele instructiuni si functii disponibile in functie de tipul de acces la fisier: Tipul de acces Secvential Aleator Binar X X X X X X X X X X X X X X X X X -

ecvential

tial lucreaza cel mai bine cand vreti sa prelucrati fisiere ce contin numai text, cum ar fi fisierele create cu ext (WordPad, Notepad) adica, fisiere in care datele nu sunt organizate intr-un sir de inregistrari. ste indicat pentru stocarea unui sir de numere, deoarece fiecare numar este memorat ca un sir de u, un numar de 4 cifre va necesita pentru memorare 4 bytes, in loc de 2 bytes cat ar fi nevoie pentru a v ca un intreg codificat binar..

pentru acces secvential

ti un fisier pentru acces secvential, puteti sa executati una din urmatoarele operatii:

elor dintr-un fisier (modul Input);

erelor intr-un fisier (modul Output)

cterelor intr-un fisier (modul Append)

ide un fisier in acces secvential se foloseste o instructiune Open a carei sintaxa este:

<nume> For <mod> As #<nrfisier> [Len = <lng>]

xpresie de tip String care specifica un nume de fisier, putand include directorul/dosarul si unitatea in e se gaseste fisierul. cuvant cheie care specifica modul de deschidere al fisierului. Poate fi unul din urmatoarele cuvinte ie: Input (citire), Output (scriere) sau Append (adaugare).

numar corect de fisier, cuprins intre 1 si 511. Se foloseste pentru a specifica fisierul in instructiunile si ctiile de prelucrare a fisierului respectiv. ntreg, cel mult egal cu 32767 (bytes), care se poate utiliza in cazul fisierelor secventiale pentru a preciza marul de caractere din zona tampon (buffer).

fisier secvential este deschis pentru citire (modul Input), el trebuie sa existe, in caz contrar se produce o de executie.

cercati sa deschideti un fisier secvential inexistent pentru scriere (modul Output) sau adaugare (modul d), instructiunea Open creaza mai intai fisierul specificat si apoi il deschide.

ntul optional Len specifica numarul de caractere ce se pastreaza in buffer atunci cand se copiaza datele ier si programul dumneavoastra.

schiderea unui fisier secvential pentru o operatie de citire, scriere sau adaugare trebuie sa-l inchideti, d instructiunea Close, inainte de-al redeschide pentru un alt tip de operatie.

erele secventiale

intr-un fisier secvential continutul unor variabile se executa urmatoarele operatii:

chide fisierul respectiv pentru o operatie de scriere sau adaugare. Spre exemplu pentru a scrie in fisierul at continutul unei variabile numite sLinie, deschiderea fisierului se poate realiza astfel:

Test.dat For Output As #1

seste instructiunea Print # sau Write # pentru a transmite in fisier continutul variabilei sLinie, astfel:

#1, sLinie

e #1, sLinie

Instructiunea Write # permite scrierea intr-un fisier a unei liste de expresii numerice si/sau siruri de re. In fisiere, valorile fiecarei expresii se separa prin virgule, iar sirurile de caractere sunt incluse intre ele. Spre exemplu, segmentul de cod:

Nume As String, iNumar As Integer

= Ionescu Vasile

r = 24536

#1, sNume, iNumar

e in fisierul desemnat prin numarul de fisier #1 urmatoarea inregistrare:

cu Vasile,24538

v toate semnele de punctuatie.

ea instructiunilor Write # si Input # pentru scrierea si respectiv citirea fisierului secvential simuleaza direct sau binar la fisier. Ele sunt foarte indicate atunci cand vreti sa folsoiti date organizate in trari (sau articole) fara a folosi un tip de data definit de utiliztor.

le instructiunilor Print # si Write # sunt identice:

Write #<nr.fisier>, [<lista_iesire>]

sier> Numarul cu care a fost deschis fisierul. _iesire> Lista variabilelor a caror continut se va scrie in fisier. In lista variabilele se vor separa prin virgule.

rele secventiale

area continutului unui fisier secvential se executa urmatoarele operatii:

chide fisierul pentru o operatie de citire. Spre exemplu, pentru deschiderea fisierului Test.dat din plu anterior se va folosi o instructiune Open de forma:

Test.dat For Input As #1

sesc instructiunile Line Input # sau Input # sau functia Input() pentru a citi datele intr-o variabila de am. Spre exemplu, pentru a citi datele din fisierul Test.dat intr-o variabila numita sLinie se poate utiliza n urmatoarele linii de cod:

nput #1, sLinie

#1, sLinie

= Input(10, #1)

() poate fi folosita pentru a citi intr-o variabila orice numar de caractere dintr-un fisier secvential. Sintaxa tiei Input() este urmatoarea:

rcatere>, [#]<nr.fisier>)

aractere> O expresie numerica corecta care specifica numarul de caractere ce se va returna. ier> Numarul de fisier asociat prin instructiunea Open.

Line Input # se foloseste in special atunci cand datele au fost scrise in fisier folosind instructiunea Print structiunii este:

<nr.fisier>, <variabila>

isier> Numarul cu care a fost deschis fisierul.


Numele variabilei, de tip String, in care se vor citi datele.

abila>

a citeste o linie de caractere din fisier, adica toate caracterele intalinite pana la secventa carriage return venta de coduri ASCII 13 si 10). Instructiunea Line Input # recunoaste aceasta secventa de coduri, atunci te o linie intr-o variabila, dar nu le pastreaza.

Input # permite citirea unei liste de valori numerice si/sau sir de caractere scrise intr-un fisier folosind a Write #. Sintaxa acestei instructiuni este:

sier>, <lista_intrare>

sier> Numarul asociat fisierului la deschidere. _intrare> Lista de variabile, separate prin virgule, in care se vor citi datele scrise intr-o inregistrare din fisier.

irect

ele in acces aleator formeaza inregistrari (articole) identice; fiecare inregistrare putand contine unul sau nregistrare cu un singur camp corespunde unui tip standard de data, cum ar fi un intreg sau un sir de rare cu mai multe campuri corespunde unui tip de data definit de utilizator, folosind instructiunea Type

egistrare

schide un fisier pentru acces aleator trebuie sa definiti un tip care va corespunde inregistrarilor pe care le c in fisier. Spre exemplu, pentru a prelucra un fisier ce contine sau va contine date despre persoane, tip de data definit de utilizator, numit Persoana astfel:

eger

As String * 15 As String * 15 As Date As String * 30 As String * 20 As String * 2 As String * 11

tes, a unei astfel de inregistrari este de 103 bytes (icodul ID de tip Integer ocupa 2 bytes, data nasterii de iar sirurile ocupa spatiul precizat prin valorile atasate).

prelucra datele dintr-un fisier in acces aleator este necesar sa declarati o variabila a tipului de data ciat inregistrarilor din fisier, folosind una din instructiunile de declarare variabile. Spre exemplu:

rsoana

la a tipului Persoana.

e inregistrarile dintr-un fisier in acces aleator trebuie sa aiba aceeasi lungime, este util ca elementele de r-un tip de data definita de utilizator sa aiba o lungime fixa, asa cum s-a vazut in declaratia tipului xemplu, campurile Nume si Prenume au o lungime fixa de 15 caractere. Daca sirul real contine mai putine mea fixata pentru elementul de tip sir corespunzator, Visual Basic il va completa cu spatii. Daca insa, sirul mensiunea campului, el va fi trunchiat.

uri cu dimensiune variabila, marimea totala a oricarei inregistrari scrise cu instructiunea Put sau citite cu ebuie sa depaseasca lungimea inregistrarii declarate in clauza Len a instructiunii Open.

exemplifica in continuare utilizarea unor instructiuni pentru fisierele in acces direct vom considera ca in e urmatoarele linii de cod: Declararea unui tip de data definit de utilizator

eger As String * 15 As String * 15 As Date

As String * 30 As String * 20 As String * 2 As String * 11

rsoana Varibila a tipului Persoana Numarul asociat fisierului la deschidere Lungimea, in bytes, a inregistrarii Pozitia inregistrarii curente Numarul ultimei inregistrari

ger

ng

ng

Abonat) Determina lungimea unei inregistrari

cod asigura definirea unui tip de date, declararea unor variabile si determinarea lungimii, in bytes, a .

in acces aleator

Open necesara deschiderii unui fisier in acces aleator are urmatoarea sintaxa:

_fisier> [For Random] As <nr.fisier> Len = <lung.art>

ele fisierului ce va fi deschis in acces aleator. Poate fi un specificator complet de fisiere, adica numele si nsia fisierului va fi precedat de calea si unitatea de disc pe care se afla fisierul. arul de fisier (cuprins intre 1 si 511) asociat la deschiderea fisierului.. fica lungimea, in bytes, a inregistrarii.

pentru deschiderea fisierului Aleator.dat se poate folosi urmatoarea linie de cod:

For Random As iNrFisier Len = lLungArt

esul aleator este tipul prestabilit de acces la fisiere, cuvintele cheie For Random pot lipsi din instruciunea chidere a unui fisier in acces aleator.

a declarata (argumentul <lung.art>) este mai mica de cat lungimea articolului scris in fisier, se genereaza

deschiderea unui fisier in acces aleator nu se precizeaza tipul operatiei (de citire sau de scriere), fisierul ate fi scris si/sau citit; deci intr-un fisier cu acces aleator se pot actualiza inregistrarile. hise in acces aleator

a edita datele dintr-un fisier deschis in acces aleator trebuie parcurse urmatoarele operatii:

derea fisierului in acces aleator.

narea pe inregistrarea de editat. in variabile de memorie a inregistrarii de editat.

carea valorilor din variabilele de memorie.

erea inregistrari editate.

or in variabile

egistrare din fisier in variabile de memorie se foloseste instructiunea Get a carei sintaxa este:

<nr.fisier>, [<nr.art>], <variabila>

Numarul de fisier care a fost asociat la deschiderea fisierului. Numarul articolului (expresie numerica de tip Long) care va fi citit. Reprezinta pozitia inregistrarii in fisier. Daca nu se precizeaza acest argument, se citeste inregistrarea curenta. abila> Variabila de memorie in care sunt citite datele (o variabila a unui tip de data definit de utilizator).

sier> t>

emplu, pentru a citi inregistrarea curenta in variabila recAbonat de tip Persoana, declarate anterior, se olosi urmatoarea linie de cod: , recAbonat

ilelor in inregistrari

a scri o inregistrare intr-un fisier in acces aleator se foloseste instructiunea Put, a carei sintaxa este:

<nr.fisier>, [<nr.art>], <variabila>

sier> t>

Numarul de fisier care a fost asociat la deschiderea fisierului. Numarul articolului (expresie numerica de tip Long) care va fi scris. Daca nu se precizeaza aceasta valoare, se scrie in pozitia curenta, adica dupa ultima inregistrare citita sau scrisa.

abila> Variabila din care sunt scrise datele (o variabila a unui tip de data definit de utilizator).

emplu, pentru scrierea continutului variabilei recAbonat de tip Persoana, declarate anterior, in trareai cu numarul lPozitie se poate utiliza linie de cod urmatoare: lPozitie , recAbonat

colelor

re se foloseste o instructiune Put specificand pozitia (numarul de inregistrare) inregistrarii pe care vreti s-o inlocuiti. Spre exemplu, pentru a e va utiliza urmatoarea linie de cod:

11, recAbonat

noi inregistrari

trari la sfarsitul unui fisier deschis in acces aleator se folosec urmatoarele linii de cod:

Art = Lof(iNrFisier) / lLungArt + 1 lUltimArt, recAbonat

inie de cod determina numarul de inregistrari din fisier si-l majoreaza cu o unitate, pentru a putea scrie ltima inregistrare din fisier. Functia Lof() determina lungimea, in bytes, a unui fisier deschis.

gistrarilor

trarile dintr-un fisier deschis in acces aleator nu pot fi sterse; se poate doar goli campurile, inregistrarea and in continuare in fisier. Totusi operatia de stergere se poate simula executand urmatoarele operatii: Se deschide un nou fisier. Din fisierul original se copiaza in noul fisier numai inregistrarile corecte. Se inchid ambele fisiere. Se sterge fisierul original folosind instructiunea Kill, a carei sinatxa este urmatoarea: Kill <nume_fisier> unde <nume_fisier> este o expresie sir de caractere care specifica numele fisierului ce se va sterge, putand include calea si unitatea unde se gaseste fisierul respectiv. Se redenumeste noul fisier cu numele vechiului fisier folosind instructiunea Name, a carei sintaxa este urmatoarea: Name <nume_fisier_vechi> As <nume_fisier_nou> unde <nume_fisier_vechi> si <nume_fisier_nou> reprezinta numele vechiului fisier (putand include

calea si unitatea unde se gaseste fisierul) si respectiv noul nume de fisier. Fisierul indicat prin <nume_fisier_nou> nu trebuie sa existe.

i fisiere deschise in acces aleator trebuie sa respectati urmatoarele reguli: fisier cu instructiunea Put se citesc cu instructiunea Get.

are dintr-un fisier deschis pentru acces aleator are <nr.art> egal cu 1, al doilea are <nr.art> egal cu 2, n instructiunile Put sau Get omiteti <nr.art>, se scrie/citeste urmatoarea inregistrare dupa ultima referita de catre ultimul apel al functiei Seek(). Functia Seek() returneaza o valoare de tip Long care a curenta pentru scriere/citire a fisierului deschis in acces aleator cu instructiunea Open. Sintaxa ek() este:

>)

> reprezinta numarul asociat fisierului la deschidere.

mpul prelucrarii fisierelor in acces aleator sa nu se produca erori neprevizibile, este indicat ca lungimea crise in fisier sa corespunda cu lungimea specificata in clauza Len a instructiunii Open.

mea reala a unei inregistrari depinde de tipul de date asociat campurilor din tipul definit de utilizator lungimea sa se determine nu prin insumarea spatiului necesar fiecarui camp, ci prin apelarea functiei sintaxa este:

a>)

a> reprezinta numele variabilei ce contine sau va contine datele scrise respectiv citite in/din fisier.

a> ce se scrie/citeste este un sir de lungime variabila, datele sirului sunt precedate de un descriptor de 2 e lungimea sirului. Deci lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa 2 bytes mai mare de cat lungimea reala a sirului.

a> ce se scrie/citeste este un tablou dinamic, la numarul total de bytes necesar tabloului se adauga un rui lungime este egala cu 2 plus de 8 ori numarul dimensiunilor tabloului. Spre exemplu, urmatoarea ablou necesita 118 bytes atunci cand tabloul este scris intr-un fisier:

(1 To 5,1 To 10) As Integer

unt distribuiti astfel: 18 bytes pentru descriptor (2 + 8 * 2; tabloul are doua dimensiuni) si 100 bytes * 10 * 2; cinci linii, fiecare cu 10 coloane de intregi).

gistrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai mare sau cel putin egala cu ytes necesari citirii/scrierii datelor tabloului si a descriptorului de tablou.

ungime fixa nu au un descriptor de tablou; deci in fisier vor exista numai datele tabloului.

a> este un Variant a tipului numeric, la numarul de bytes necesari stocarii datelor se mai adauga 2 bytes ea tipului (VarType) de numar. Spre exemplu, VarType este egal cu 3 pentru datele de tip Long. Deci

istrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai mare sau cel putin egala cu a inregistrarii plus 2 bytes.

> apartine oricarui alt tip diferit de sir de lungime variabila, Variant sau tablou dinamic, in/din fisier se mai datele. Deci lungimea inregistrarii specificata in clauza Len din instructiunea Open trebuie sa fie mai utin egala cu lungimea reala a inregistrarii.

Prelucrarea unitatilor, dosarelor si fisierelor

ati in Windows, este foarte important sa aveti posibilitatea de a adauga, muta, schimba, crea sau sterge tine informatii despre unitati si de a le manipula.

permite sa procesati unitatile, dosarele si fisierele in doua moduri diferite: folosind metodele nstructiunile Open, Write # etc. si prin intermediul unui nou set de instrumente modelul obiectului File

ului FSO ofera aplicatiilor posibilitatea de a crea, modifica, muta si sterge dosare sau de a detecta daca si daca da unde se gasesc ele. De asemenea, puteti obtine informatii despre dosare, cum ar fi numele fost create etc.

modelul obiectului FSO usureaza procesarea fisierelor. Cand procesati fisiere, principalul obiectiv al ocarea datelor intr-un spatiu eficient si intr-un format usor de accesat. De asemenea, aveti nevoie de fisierelor, de inserare si modificare a datelor si de citirea datelor. Puteti stoca datele intr-o baza de date, ar aceasta va adauga o suprasarcina semnificativa aplicatiei. Din mai multe motive, este posibil sa nu na durere de cap sau accesul la date necesar nu impune folosirea tuturor facilitatilor bazelor de date. In elor intr-un fisier text sau binar este cea mai eficienta solutie.

ului FSO admite crearea si manipularea fisierelor text prin intermediul obiectului TextStream. Obiectul leaza fisiere binare; acestea vor fi create si manipulate folosind instructiunile traditionale pentru fisiere.

elului FSO

ului FSO are urmatoarele obiecte:

escriere rmite culegerea de informatii despre unitatile atasate sistemului, cum ar fi cat spatiu este disponibil, care te numele partajat al acestora etc. Prin unitate nu se intelege in mod obligatoriu un hard-disc. Aceasta ate fi o unitate CD-ROM, un disc RAM etc. De asemenea, nu este necesar ca unitatile sa fie fizic atasate stemului; ele pot fi conectate logic prin intermediul unui LAN (Local Area Network retea locala de lculatoare). rmte crearea, stergerea sau mutarea dosarelor, precum si interogarea sistemului despre caracteristicile estora: nume, cale etc. rmite crearea, stergerea si mutarea fisierelor, precum si interogarea sistemului despre caracteristicile estora: nume, cale etc. te principalul obiect al grupului si contine metodele care permit crearea, stergerea, obtinerea de formatii si in general manipularea unitatilor, fisierelor si dosarelor. Multe dintre metodele acestui obiect duplica pe cele ale altor obiecte. ofera posibilitatea sa cititi si sa scrieti fisiere text.

n modelul obiectului FSO

n modelul obiectului FSO implica trei etape principale:

dei CreateObject sau declararea unei variabile de tip FileSystemObject pentru a crea un nou obiect.

a dintre metodele obiectului nou creat.

rietatilor obiectului.

ului FSO este continut intr-o biblioteca de tip numita Scripting, aflata in fisierul Scrrun.Dll. Daca nu aveti iblioteca, selectati caseta de validare a optiunii 'Microsoft Scripting Runtime' din caseta de dialog selectand comanda References din meniul Project). Folosind fereastra Object Browser puteti vizualiza oprietatile, metodele si evenimentele obiectului FSO, precum si constantele acestuia.

rea obiectului FileSystemObject

n obiect FileSystemObject puteti folosi una din urmatoarele procedee:

riabila a obiectului FileSystemObject, ca in aceasta linie de cod:

o As New FileSystemObject

da CreateObject, ca in urmatoarea linie de cod: = CreateObject('Scripting.FileSystemObject') este numele bibliotecii de tip, FileSystemObject este numele obiectului pentru care vreti sa creati o

u lucreaza numai in Visual Basic, in timp ce al doilea procedeu lucreaza atat in Visual Basic cat si in

este folosirea uneia dintre metodele obiectului FileSystemObject. Spre exemplu, daca vreti sa creati un si metoda CreateFolder sau CreateTextFile (modelul obiectului FSO nu admite crearea sau stergerea

ergeti obiectele, puteti folosi metodele DeleteFile si DeleteFolder ale obiectului FileSystemObject sau telor File si Folder.

dele corespunzatoare, puteti copia si muta fisiere sau dosare.

alitati ale modelului obiectului FileSystemObject sunt redundante. Spre exemplu, puteti copia un fisier pyFile a obiectului FileSystemObject sau metoda Copy a obiectului File object. Ambele metode lucreaza a oferi o mai mare flexibilitate programarii.

a o unitate, un dosar sau un fisier existent trebuie sa folositi una din metodele get ale obiectului

Drive, GetFolder sau GetFile.

eSystemObject, fil As File

'c:test.txt')

, totusi, nu este necesar sa folositi metodele 'get' pentru obiectele nou create, deoarece functiile de o cale de acces la aceste obiecte. Spre exemplu, daca creati un nou dosar folosind metoda CreateFolder, poi metoda GetFolder pentru a accesa proprietatile acestuia, cum ar fi Name, Path, Size etc. Trebuie a la functia CreateFolder pentru a obtine o cale de acces la noul dosar creat, apoi puteti accesa e si evenimentele acestuia:

older()

SystemObject, fldr As Folder

Folder('C:MyTest')

at se numeste: ' & fldr.Name

in care aveti o cale de acces la un obiect, puteti folosi proprietatile lui. Spre exemplu, sa presupunem ca e unui anumit dosar. In primul rand creati o instanta a obiectului, apoi obtineti o cale de acces la acesta acest caz, metoda GetFolder, deoarece dosarul deja exista):

er('c:')

inut calea de acces la un obiect Folder, puteti verifica proprietatea Name a acestuia:

dosarului este: '; fldr.Name

edeti cand a fost modificat un fisier, folositi urmatoarele linii de cod:

ystemObject, fil As File

:detlog.txt') ' Obtinerea obiectului File dorit

modificare: '; fil.DateLastModified ' Afisarea datei

ati si dosare

lul obiectului FSO puteti lucra cu unitatile si dosarele in mod programatic la fel cu o faceti interactiv in

matiilor despre unitati

va permite sa obtineti informatii despre diferitele unitati atasate sistemului fie fizic, fie printr-o retea de

tile acestui obiect va permit sa obtineti urmatoarele informatii:

unitatii, in bytes (proprietatea TotalSize)

bil pe unitate, in bytes (proprietatile AvailableSpace sau FreeSpace)

signata unitatii (proprietatea DriveLetter)

e este, cum ar fi: amovibila, fixa, retea, CD-ROM sau disc RAM (proprietatea DriveType)

ie al unitatii (proprietatea SerialNumber) folosit de unitate, cum ar fi FAT, FAT32, NTFS etc. (proprietatea FileSystem)

este disponibila pentru utilizare (proprietatea IsReady)

tajare si/sau a volumului (proprietatile ShareName si VolumeName)

rul radacina al unitatii (proprietatile Path si RootFolder)

ire a obiectului Drive

mplu prezinta modul de folosire a obiectului Drive pentru culegerea informatiilor despre o unitate. In a o referinta la un obiect Drive real, in schimb, veti folosi metoda GetDrive pentru a obtine o referinta la t (in acest caz, drv):

d3_Click()

SystemObject, drv As Drive, s As String

ve(fso.GetDriveName('c:'))

se('c:') & ' - ' & drv.VolumeName & vbCrLf ' & FormatNumber(drv.TotalSize / 1024, 0)

Lf & 'Spatiul liber: '

er(drv.FreeSpace / 1024, 0) & ' Kb' & vbCrLf

re

r prezinta cele mai des folosite operatii cu dosarele si metodele necesare acestora: Metoda

FileSystemObject.CreateFolder Folder.Delete sau FileSystemObject.DeleteFolder Folder.Move sau FileSystemObject.MoveFolder Folder.Copy sau FileSystemObject.CopyFolder Folder.Name FileSystemObject.FolderExists FileSystemObject.GetFolder FileSystemObject.GetParentFolderName FileSystemObject.GetSpecialFolder

nui dosar tei unui dosar pe o unitate nte la un obiect Folder existent arului parinte al unui dosar r sistemului

ilustreaza utilizarea obiectelor Folder si FileSystemObject pentru manipularea dosarelor si obtinerea e:

d10_Click()

SystemObject.

SystemObject, fldr As Folder, s As String ' Obtinerea obiectului Drive.

der('c:')

dosarul parinte este: ' & fldr

t de unitatea ' & fldr.Drive ' Afsarea numelui radacinii.

= True Then

dosar este dosar radacina.'

dosar nu este dosar radacina.'

sar folosind obiectul FileSystemObject.

Bogdan')

folder C:Bogdan' baza al dosarului. de baza = ' & fso.GetBaseName('c:Bogdan')

Bogdan') Stergerea noului dosar creat

s dosarul C:Bogdan'

re

puteti lucra cu fisiere folosind noile obiecte orientate FSO cum ar fi Copy, Delete, Move si mpreuna cu altele sau prin folosirea vechilor functii si instructiuni existente cum ar fi Open, Close, De retinut ca puteti muta, copia sau sterge fisiere indiferent de tipul acestora.

ri categorii de manipulari ale fisierelor:

area sau eliminarea datelor si citirea fisierelor

rea si stergerea fisierelor

e a crea un fisier de text secvential (referit uneori ca 'text stream'). Una dintre cai se bazeaza pe utilizarea e. Pentru a crea un fisier de text gol se folosesc urmatoarele linii de cod:

ystemObject, fil As File

xtFile('c:testfile.txt', True)

ului FSO nu suporta inca crearea fisierelor cu acces direct sau binare. Pentru a crea fisiere in acces direct nstructiunile de prelucrare a fisierelor clasice. creare este utilizarea metodei OpenTextFile a obiectului FileSystemObject avand indicatorul ForWriting

ystemObject, ts As New TextStream

File('c:test.txt', ForWriting)

cale de creare consta in utilizarea metodei OpenAsTextStream avand indicatorul ForWriting setat:

ystemObject, fil As File, ts As TextStream

t('Scripting.FileSystemObject')

est1.txt')

est1.txt')

xtStream(ForWriting)

or in fisier

l text a fost creat, puteti adauga date in el executand urmatoarele operatii:

ierului text pentru scrierea datelor. Pentru deschiderea fisierului puteti utiliza fie metoda

eam al obiectului File fie metoda OpenTextFile a obiectului FileSystemObject.

r. Pentru a scrie date intr-un fisier text se folosesc metodele Write sau WriteLine ale obiectului ferenta dintre Write si WriteLine consta in faptul ca WriteLine adauga caracterele de linie noua la specificat. Daca vreti sa adaugati o linie goala in fisierul text, folositi metoda WriteBlankLines.

erului. Pentru inchiderea unui fisier, se foloseste metoda Close a obiectului TextStream.

e prezinta un exemplu de prelucrare a unui fisier text:

ct('Scripting.FileSystemObject')

teTextFile('c:testfile.txt', True) este un test. ') Scrie o linie

e caractere

stare 1, 2, 3.')

goale

nes(3)

tele dintr-un fisier text, se folosesc metodele Read, ReadLine sau ReadAll ale obiectului TextStream: Metoda
Read

pecificat de caractere dintr-un fisier

egi (pana la caracterul linie noua, dar fara sa le includa) ReadLine ReadAll tinut al unui fisier text

etoda Read sau ReadLine si vreti sa sariti peste o anumita portiune de date, puteti folosi metoda Skip sau

n urma utilizari unei metode de citire este stocat intr-un sir ce poate fi afisat intr-un control, analizat prin m ar fi, Left, Right si Mid), concatenat etc.

ewLine contine un caracter sau caractere (in functie de sistemul de operare) pentru avansul cursorului la are (carriage return -linefeed)..

eSystemObject, txtfile, _ fil1 As File, ts As TextStream

teTextFile('c:testfile.txt', True)

ierului', vbCritical

e('c:testfile.txt') Scrierea unei linii.

TextStream(ForWriting)

d'

fisierului.

TextStream(ForReading)

a si stergerea fisierelor

ului FSO are cate doua metode pentru mutarea, copierea si stergerea fisierelor: Metoda File.Move sau FileSystemObject.MoveFile File.Copy sau FileSystemObject.CopyFile File.Delete sau FileSystemObject.DeleteFile

mplu creaza un fisier text in directorul radacina a unitatii C, scrie cateva informatii in el, il muta intr-un alizeaza o copie intr-un director numit temp si sterge copiile din ambele directoare. Pentru a rula acest a exista cele doua directoare numite tmp si temp in directorul radacina a unitatii C.

SystemObject, txtfile, fil1, fil2

teTextFile('c:test.txt', True)

ierului' este un test.') Screrea unei linii. Inchidere fisierului.

sierului in c:tmp', vbCritical

de acces la radacina unitatii C:.

e('c:test.txt') Mutare in directorul tmp.

.txt')

sierului in c:temp', vbCritical Copierea fisierului in temp

t.txt')

isierelor'

acces la locatiile curente ale fisierelor.

e('c:tmptest.txt')

e('c:temptest.txt') Stergerea fisierelor.

vbCritical

Copyright 2013 - Toate drepturile rezervate

Visual Basic blog


Just another WordPress.com weblog

Functiile ToLower,ToUpper si Trim pt.variabile string

Module Module1 Sub Main() 'citirea datelor de la tastatura' Console.WriteLine("Bine ati venit!") Console.WriteLine("") Console.Write("Introduceti numele:") Dim nume As String nume = Console.ReadLine() Console.WriteLine("") Console.Write("Introduceti prenumele cu majuscule:") Dim prenume As String prenume = Console.ReadLine() Console.WriteLine("") Console.Write("Introduceti localitatea:") Dim localitate As String localitate = Console.ReadLine() Console.WriteLine("") 'afisarea datelor citite de la tastatura' 'folosire operator concatenare &' 'afisare nume' Console.WriteLine(" Prima afisare" & " Prima metoda") Console.WriteLine(nume) Console.WriteLine("") 'la apasarea tastei ENTER afiseaza' Console.ReadLine() 'afisare prenume' Console.WriteLine(" A doua afisare" & " A doua metoda") Console.WriteLine(prenume) Console.WriteLine("") 'la apasarea tastei ENTER afiseaza' Console.ReadLine() 'afisare localitate' Console.WriteLine(" A treia afisare" & " A treia metoda") Console.WriteLine(localitate) Console.WriteLine("") 'la apasarea tastei ENTER afiseaza' Console.ReadLine() ' conversie in litere mari a numelui citit' Console.WriteLine("Conversia numelui in litere mari " & nume.ToUpper()) 'conversie in litere mici a prenumelui citit' Console.WriteLine("Conversia numelui in litere mari " & prenume.ToLower()) Console.ReadLine()

End Sub End Module

Efectul rularii:

Functia trim elimina spatiile dintr-un sir de caractere . Este folosit in cazul variabilelor string. Exemplu:

Efectul rularii:

About these ads

Published in:

Aplicatii consola

on September 29, 2009 at 6:12 pm Leave a Comment

The URI to TrackBack this entry is: http://visbasic.wordpress.com/2009/09/29/functiiletolower-si-toupper/trackback/ RSS feed for comments on this post.

Leave a Reply

September 2009 M T W T F S S Oct 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

September 2009 M T W T F S S 21 22 23 24 25 26 27 28 29 30

Categories: o Aplicatii consola o Aplicatii GUI Archives: o January 2010 o October 2009 o September 2009

Blogroll
o o

WordPress.com WordPress.org

Blog at WordPress.com. | RSS 2.0 | Comments RSS 2.0 | The Quentin Theme. Follow

Follow Visual Basic blog


Get every new post delivered to your Inbox. Powered by WordPress.com

Structura programelor in Visual Basic

Codul surs de pentru dezvoltarea aplicaiilor Visual Basic este implementat n module (echivalente conceptual cu unit-urile Pascal). Un modul poate conine declaraii de variabile i/sau definiii de proceduri i funcii. n Visual Basic exist trei tipuri de module: - module standard (. BAS) - module ataate formelor (. FRM) - conin (alturi de decl. de variabile, proceduri sau funcii utilizator) proceduri de tratare a evenimentelor declanate de forme sau controale ale acstora - module de definire de clase (. CLS) - pentru crearea de obiecte.

Declaraii de variabile n Visual Basic Dim nume-variabila [As tip] Numele de variabile: - ncep cu o liter, - au lungimea maxim de 255 caractere, - au nume unic n cadrul domeniului de vizibilitate. Domeniul de vizib. al variabilelor declarate n funcii/proceduri este corpul funciei/procedurii. Variabilele locale a cror declaraie este precedat de cuvntul cheie Static i pstreaz valoarea ntre dou apeluri succesive ale funciei/procedurii n care au fost declarate. Domeniul de vizib. al var. declarate n afara funciilor sau procedurilor este modulul. Domeniul de vizib. al variabilelor a cror declaraie este precedat de cuvntul cheie Public este ntreaga aplicaie. n Visual Basic declararea unei variabile nu este obligatorie (declaraie implicit - se aloc memorie pentru o variabil nedeclarat n momentul iniializrii acesteia).

Tipuri de date utilizate n Visual Basic Tip Sp. de memorare (octei) Domeniu Valoare iniial Byte 1 0 - 255 0 Boolean 2 True/False False Integer 2 -32768... 32767 0 Long Integer 4 -2147483648... 2147483647 0 Single 4 max 3. 402823E+38 0 Double 8 - 0 Currency 8 - 0 Date 8 1/1/100... 12/31/9999 Object 4 adr. obiecte VB, controale, etc String lungime sir 1 - 65. 400 car "" Variant 16 poate stoca toate tipurile definite in sistem Empty Declaraii de proceduri/funcii n Visual Basic A) Proceduri [Private|Public][Static]Sub NumeProcedura (lista-parametrii) instructiuni End Sub B) Funcii [Private|Public][Static]Function NumeFunctie (lista-param) [As tip] instructiuni NumeFunctie = expresie `valoare returnata instructiuni End Function

Structuri de control n Visual Basic A) Structuri condiionale IF... THEN If conditie Then instructiune If conditie Then instructiuni End If IF... THEN... ELSE If conditie1 Then [instructiuni-1] [ElseIf conditie2 Then [instructiuni-2]] ... [Else [instructiuni-n]] End If SELECT CASE Select Case expresie-de-test [Case lista-expresii-1 [instructiuni-1]] [Case lista-expresii-2 [instructiuni-2]] . . . [Case Else [instructiuni-n]] End Select B) Structuri iterative (de ciclare) Do... Loop (nr. nedefinit de pasi) - cu test iniial Do While conditie instructiuni Loop Do Until conditie instructiuni Loop - cu test final Do instructiuni Loop While conditie Do

instructiuni Loop Until conditie For... Next (nr. cunoscut de pasi) For var-contor = start To final [Step incrementare] instructiuni Next [var-contor] For Each... Next (parcurgere colecii de date) For Each element In colectie instructiuni Next element C) Structuri de salt necondiionat Exit For / Exit Do (ieire din structuri iterative) For var-contor = start To final [Step incrementare] *instruciuni+ [Exit For] [instructiuni] Next [var-contor] Do [{While | Until} conditie] [instructiuni] [Exit Do] [instructiuni] Loop Exit Sub / Exit Function (ieire din proceduri/funcii) ...

folosirea fisierelor in Visual Basic Visual Basic-ul are integrat o multime de functii si proceduri utile in lucrul cu fisiere. Pentru ca acest tutorial sa aiba o structura mai usoara de inteles am sa incep cu procesarea fisierelor text . Pentru deschiderea acestora se foloseste comanda OPEN astfel: Open "cale" For Atribut As #numar ,unde "cale" este este calea catre fisier, "atribut" este descriptorul operatiilor pe care le putem face.El poate lua urmatoarele valori: --> Input -- pentru citire.Neexistenta fisierului duce la mesaj de eroare. -->Output -- pentru scriere.Neexistenta fisierului duce la creearea acestuia. -->Append -- pentru adaugarea de date la sfarsitul fisierului -->Binary -- pentru deschiderea fisierului in mod binar Pentru numar este recomandata folosirea procedurii FreeFile() care returneaza primul numar disponibil. Exemple:

Dim ff As Byte ff=FreeFile() Open "c:\autoexec.bat" For Input As ff

Scrierea intr-un fisier se poate face cu ajutorul urmatoarelor functii: -->Write -- se foloseste dupa urmatoarea sintaxa :Write #numar, continutul ce se doreste a fi scris -->Print -- se foloseste dupa aceiasi sintaxa ca si Write -->Put -- se foloseste in cazul fisierelor deschise in mod binar conform sintaxei:Put #numar, ,continutul ce se doreste a fi scris

Exemple: .. Dim s as String s="test" Print #ff, s Write #ff, s Put #ff, , s .. Citirea dintr-un fisier se poate face cu ajutorul urmatoarelor functii: -->Input -- se foloseste dupa sintaxa Input #numar , sir de variabile sau variabila -->Get -- se foloseste in cazul fisierelor deschise in mod binar conform sintaxei: Get #numr,, variabil

Inchiderea unui fisier se face cu ajutorul comenzii CLOSE astfel : Close #numar Pentru ca lucrul cu fisiere si directoare sa fie facil Microsoft$ a creat o multime de functii si procedurii utile.Mai jos se afla o scurta enumerare a lor impreuna cu o descriere: ---> Name As --> redenumeste un fisier sau ii schimba locatia.Se foloseste sub forma : Name cale1 As cale2 Name "c:\test.in" As "c:\tset.ni" Name "c:\test.in" As "d:\test\test.in" ---> FileCopy --> copiaza un fisier.Se foloseste sub forma : FileCopy locatie1, locatie2 FileCopy "c:\test.in", "c:\test\test.in" ---> Kill --> sterge unul sau mai multe fisiere(suporta '*' si '?').Se foloseste sub forma : Kill cale Kill "c:\windows\temp\*.*"

---> CurDir$ --> returneaza directorul curent ---> ChDrive --> schimba drive-ul\partitia curent\a.Se foloseste sub forma : ChDrive drive\partitie ChDrive "D:" ---> ChDir --> schimba directorul curent.Se foloseste sub forma : ChDir director ChDir "c:\windows" ---> MkDir --> creaza un director.Se foloseste sub forma : MkDir nume_director MkDir "c:\test" ---> RmDir --> sterge un director.Se foloseste sub forma : RmDir director RmDir "c:\test" ---> LOF --> returneaza marimea fisierului in octeti.Se foloseste sub forma :LOF (numar) ---> EOF --> returneaza "True" in cazul in care s-a atins sfarsitul fisierului.Se foloseste sub forma :EOF (numar) credite:Trimbitas Sorin si modificarii facute de mine _________________ Impossible is nothing !!

Acasa Echipa Dr. VB Cine suntem? Cauta in articole Cursuri cu Dr.VB Consultanta VB Altele Forum Visual Basic Video Visual Basic Articole VB Resurse Sunteti aici:DrVB.ro Altele Cum pot s folosesc fereastra Immediate ITLearning Contact Dr.VB

Cum pot s folosesc fereastra Immediate


Publicat de Echipa Dr.VB in categoria Altele - 0 Comentarii - (14 April, 2012 la
ora 6:52 am)

Preambul Folosim ferestra Immediate pentru executa rapid comenzi visual basic. Aceste comenzi nu sunt salvate in modul de cod, scopul principal este acela de a testa fie o comanda sau a afla/modifica valori ale unor proprietati. Fereastra Immediate poate fi folosita si pentru a tipari valori intermediare ale unor variabile, deasemeni in scopuri de testare. Metoda folosita in cod pentru tiparire in Immediate este Debug.Print.

Pasul 1 Deschideti aplicatia Excel 2010, deschideti VBE (Alt + F11). Pentru activarea ferestrei Immediate, in cadrul VBE (Visual Basic Editor), actionam fie: - Metoda 1: Combinatia de taste Ctrl + G - Metoda 2: Din meniul View comanda Immediate Window (1) Si acesta fereastra este redimensionabila (din margini) sau repozitionabila (prin tragerea cu mous-ul) in orice pozitie de pe ecran.

Pasul 2 Pentru a interoga/modifica valoarea unei proprietati: Interogare (read) valoare proprietate: in interiorul ferestrei Immediate (1) tastam semnul ? urmat de denumirea obiectului si a proprietatii de interogat (ex: pentru a afla denumirea foi de calcul active in Excel vom tasta ?ActiveSheet.Name sau versiunea de Excel ?Application.Version) dupa care actionam tasta Enter; valoarea proprietatii va fi tiparita pe linia imediat urmatoare. Modificarea valorii unei proprietati (pentru proprietatile care accepta modificare): vom scrie in Immediate denumirea obiectului si a proprietati (2) urmate de semnul egal si noua valoare (intre ghilimele daca acea valoare este text). Ex: modificarea denumirii foi de calcul active de sa scrie ActiveSheet.Name = DenumireNoua. Acesta comanda se va executa la actionarea tastei Enter Aceste comenzi vor ramane tiparite in fereastra Immediate putand fi refolosite oricand sau pot fi sterse la nevoie.

Pasul 3 Pentru a tipari in ferestra Immediate in timpul derularii unei proceduri: In procedura, acolo unde se doreste testarea valorii unei proprietati, se va insera comanda Debug.Print (1) si numele obiectului si a proprietatii. Ex: daca dorim sa tiparim valoarea celulei A2 la un moment inntermediar in timpul executarii de cod vom folosi comanda: Debug.Print Range(A2).Value Valoarea va fi tiparita in Immediate si va ramane pana la stergerea manuala (2) Folosim acesta metoda si ca o alternativa la comanda MsgBox, atunci cand dorim doar listarea valorii nu si intreruperea executiei de cod

Lasa un comentariu

Nume (Obligatoriu) Mail (nu va fi publicat) (Obligatoriu) Website

Lasa un comentariu

Acasa - Video VB - Articole VB - Forum VB Copyright 2011 Dr. VB | Termeni si conditii cursuri-excel.ro - cursuri-access.ro - cursuri-powerpoint.ro - cursuri-outlook.ro - cursuri-word.ro - cursuriproject.ro

Introducere practic n Prolog (I)


Creat: 2011/jun Comentarii backtracking | partiii | Prolog | triplete pitagoreice primitive

n programarea logic, ideea de baz este exprimat prin Algorithm = Logic + Control. Componenta Logic - asimilat cu "program Prolog", sau "baz de date" - vizeaz descrierea problemei: ce fapte se cunosc (aseriuni iniiale asupra obiectelor problemei) i ce reguli generale ("parametrizate" fa de obiectele problemei) trebuie folosite pentru a deduce ulterior alte fapte (noi). Componenta Control reprezint nsui interpretorul (ori fiina raional) care va "executa" programele; interpretorul de Prolog "aplic" metoda deducerii (plecnd de la baza de date furnizat de program) i un mecanism intern de backtracking recursiv - cutnd sistematic valori cu care s "nlocuiasc" necunoscutele implicate n scopul ("goal") satisfacerii clauzelor curente.

Sunt n uz diverse implementri ale componentei "Control" (vezi Prolog Systems) i n mare ele respect un acelai standard (ISO Prolog). Aici avem n vedere i utilizm SWI-Prolog.

O exemplificare clasic: relaii de rudenie


n privina ordinii exemplificrilor cuprinse n lucrri introductive de Prolog - prezentarea unei baze de date pe o tem larg cunoscut - cum ar fi, relaiile de rudenie - este clasic (la fel cu programele "Hello world!" cu care debuteaz prezentarea n alte limbaje). Prinii lui Fred sunt Ed i Edna (vezi The Flintstones); Pebbles este fiica lui Fred; etc.
man('Fred'). % exprim faptul c "Fred este brbat" man('Ed'). woman('Edna'). % Edna este femeie woman('Wilma'). woman('Pebbles'). parent('Ed', 'Fred'). % Fred este un copil al lui Ed parent('Edna', 'Fred'). parent('Fred', 'Pebbles'). parent('Wilma', 'Pebbles'). grandparent(X, Z) :% X este bunic/bunic a lui Z dac (notat :-): parent(X, Y) % exist Y nct este valabil parent(X, Y) , % i (virgula conjug clauzele) parent(Y, Z). % este satisfcut parent(Y, Z).

Am declarat nite fapte - man('Fred', woman('Wilma') etc. - nite relaii - parent(Ed,Fred) etc. - i o regul (pentru a fi "grandparent"). Caracterul . (denumit "full-point") ncheie declaraia. 'Fred' - cu apostrof - este o constant (alternativa era fred, cu litere mici dar fr ncadrare cu apostrof); Fred - cu majuscul iniial i nencadrat de apostrof - ar fi interpretat ca o variabil (cum sunt mai sus X, Y, Z). Interpretorul va substitui o variabil cu un obiect sau altul, dup caz. S lansm interpretorul SWI-Prolog, swipl:
vb@vb:~/docere/doc/Prolog$ swipl % library(swi_hooks) compiled into pce_swi_hooks 0.00 sec, 2,224 bytes Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.10.1) Copyright (c) 1990-2010 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?-

Fie "flintstones.pl" fiierul n care am salvat declaraiile de mai sus; la promptul ?- tastm:
?- [flintstones]. % flintstones compiled 0.00 sec, 1,604 bytes true. ?-

Interpretorul a ncrcat i a compilat fiierul respectiv, afind din nou promptul. Putem pune ntrebri (interogri, "queries") i putem formula diverse scopuri (similar cu "program main()").
?- man('Fred'). true. % acest fapt exist n baza de date ?- man('Mister'). false. % Nu exist (i nici nu poate fi dedus) ?- man(Fred). % aici Fred este o variabil! Fred = 'Fred' ; % se tasteaz ; pentru a obine rspunsuri alternative Fred = 'Ed'. ?-

Interogarea man(Fred) - unde Fred este o variabil (puteam folosi la fel de bine man(X), de exemplu) - are drept rspunsuri toate valorile cu care se poate nlocui "necunoscuta" Fred astfel nct s fie satisfcut clauza "man". Interpretorul caut o potrivire n baza de date, afieaz rspunsul gsit i apoi ateapt: dac se tasteaz ; (pentru "sau" soluie alternativ) atunci reia cutarea. n momentul ncrcrii i compilrii programului, interpretorul indexeaz intern termenii respectivi (dup nume i dup ordinea apariiei lor n program) - astfel c acum gsete foarte uor termenul "man" (mpreun cu "ramurile" respective: 'Fred' i 'Ed', n aceast ordine); gsind prima potrivire posibil - anume man(Fred) = man('Fred') - interpretorul marcheaz intern "ramura" respectiv - astfel c (dup ce se tasteaz ;) cutarea unei alternative va fi reluat ncepnd din acest loc.
?- parent(X, 'Pebbles'). X = 'Fred' ; % sau X = 'Wilma'. % Cine sunt prinii lui 'Pebbles'?

?- parent(X, 'Pebbles'), woman(X). X = 'Wilma'.

% Dar cine este mama lui 'Pebbles'?

Pentru ultima interogare de mai sus, interpretorul gsete nti "potrivirea" parent('Fred', 'Pebbles') i consider mai departe valoarea 'Fred' pentru toate apariiile lui X n cadrul interogrii; dar cu aceast instaniere a variabilei X, clauza woman('Fred') este nesatisfcut - "Fail" - i atunci revine - "Redo" - la cealalt "ramur", instaniind X cu 'Wilma':
?- trace. true. % pentru a trasa pas cu pas execuia urmtoarei interogri

[trace] ?- parent(X, 'Pebbles'), woman(X). Call: (7) parent(_G793, 'Pebbles') ? creep Exit: (7) parent('Fred', 'Pebbles') ? creep Call: (7) woman('Fred') ? creep Fail: (7) woman('Fred') ? creep Redo: (7) parent(_G793, 'Pebbles') ? creep Exit: (7) parent('Wilma', 'Pebbles') ? creep Call: (7) woman('Wilma') ? creep Exit: (7) woman('Wilma') ? creep X = 'Wilma'.

Dac valorile unuia dintre argumentele prevzute n clauze sunt indiferente, atunci putem folosi o variabil anonim - reprezentat prin _:
[trace] true. ?- notrace. % Anuleaz trasarea pas cu pas

[debug] ?- parent(X, _). % Care sunt prinii? X = 'Ed' ; % sau (se tasteaz ;) X = 'Edna' ; % sau X = 'Fred' ; % sau X = 'Wilma'. [debug] ?- grandparent(X, 'Pebbles'). X = 'Ed' ; X = 'Edna' ; false. % Cine sunt bunicii lui 'Pebbles'?

[debug] ?- findall(X, parent(X, _), Result_list). Result_list = ['Ed', 'Edna', 'Fred', 'Wilma']. [debug] ?- findall(X, grandparent(X, _), L). L = ['Ed', 'Edna'].

% List cu prinii

% List cu bunicii

?- explain(findall) va expune o documentare pentru predicatul predefinit respectiv (aici, findall); pentru documentare se poate folosi i help(findall), dar "explain" indic i

fiierul-surs aferent (uneori, aici gseti cea mai bun lmurire a lucrurilor!). Am observat mai sus, dar este de subliniat: cutarea n baza de date se face "de sus n jos" ceea ce nseamn c ordinea clauzelor este important - cu eventual revenire la precedentul punct n care exist alternative neexplorate; n cazul "execuiei" unei clauze (sau interogri) compuse din mai multe subclauze conjugate prin , - ordinea operrii este "de la stnga la dreapta" (iar aici "operare" nu nseamn "evaluare i atribuire" ca n alte limbaje, ci substituie i unificare, urmrind "potrivirea" final a termenilor).

Exemplificri aritmetice
Prolog a aprut n 1972 i are tangene conceptuale mai degrab cu SQL (unde deasemenea folosim interogri i baze de date relaionale), dect cu limbajele "clasice" (Pascal a aprut n 1970, iar C n 1978). Pentru tratarea serioas a unor aspecte matematice, limbajele "clasice" (ncepnd cu limbajul de asamblare) sunt desigur cele mai potrivite; altfel ns, diverse aspecte aritmetice pot fi tratate n orice limbaj i este interesant de vzut asemenea exemple n Prolog i n SQL.

Cel mai mare divizor comun


Amintim cum s-ar scrie o funcie Pascal care furnizeaz "Gcd":
function GCD(a, b: integer): integer; begin if b = 0 then GCD := a else GCD := GCD(b, a mod b); end;

Se recunoate desigur, algoritmul lui Euclid i fiind formulat recursiv, poate fi reflectat uor n Prolog (unde recursivitatea este "limba matern"):
gcd(A, B, G) :(B =:= 0 -> G is A ; R is A mod B, gcd(B, R, G) ). % gcd(A,B) este G dac: % % % % n cazul cnd B are valoarea 0, G = A altfel, (R fiind restul mpririi lui A la B), avem G = gcd(B,R).

Am definit un predicat cu o singur clauz, gcd/3 (de aritate 3, adic avnd 3 argumente). Construcia ( clauz -> clauz_1 ; clauz_2 ). corespunde cu "IF clauz THEN clauz_1 ELSE clauz_2". Pentru cazul valorilor numerice, operatorii prevzui pentru egalitate, inegalitate i "mai mic sau egal" difer ca simbol de alte limbaje: =:= (egalitate), =\= (inegalitate), =< (mai mic sau egal). asigur evaluarea expresiei aritmetice din partea dreapt i eventual, instanierea variabilei R cu valoarea rezultat; forma echivalent este is(R, Expresie).
R is Expresie

Lansm swipl i tastm la promptul interpretorului:


?- [pitagora]. true. ?- listing. gcd(C, A, B) :( -> ; ). true. ?- gcd(12, 21, G). G = 3. listing % o interogare A=:=0 B is C D is C mod A, gcd(A, D, B) % listeaz definiiile % consult fiierul pitagora.pl % pitagora compiled 0.00 sec, 592 bytes

nlocuiete identificatorii de variabile din program cu cte o anumit majuscul.

Dar putem face i probe mai interesante dect am fcut mai sus (pe numerele 12 i 21):
?- X is 3**20 * 5**10 * 7**12, Y is 3**25 * 7**8 * 11**11, gcd(X, Y, G). X = 471304534201247574228515625, Y = 1393590653142003761801219090073, % 320 * 510 * 712 % 325 * 78 * 1111

G = 20100618201669201. ?- G is 3**20 * 7**8. 78 G = 20100618201669201.

% cel mai mare divizor comun % verificare: cel mai mare divizor comun este 320 *

Pentru aritmetica numerelor ntregi sau raionale, SWI-Prolog - ca i alte interpretoare, pentru diverse limbaje - folosete biblioteca GMP (scris n C i limbaj de asamblare) - nct putem folosi "gcd" i pentru numere mari, cum am ilustrat mai sus. ns din punctul de vedere al definiiei "gcd", proba cea mai interesant este aceasta:
?- gcd(0, 0, G). G = 0.

Deci se "ncalc" definiia uzual, n care cel mai mare divizor comun este definit cu excepia cazului cnd ambii operanzi sunt nuli. Corect ar fi fost ca gcd(0, 0, G) s fie "false" (nu "G = 0"), la fel cum:
?- gcd(12, 21, 5). 12 i 21"? false. ?- gcd(12, 21, 3). 12 i 21"? true. % "este adevrat c 5 este cel mai mare divizor pentru % Nu. % "este adevrat c 3 este cel mai mare divizor pentru % Da.

Tratarea acestui caz de excepie (omis i n funcia Pascal de mai sus) ar necesita de obicei instruciuni n plus n cadrul funciei, constituia "clasic" a unei funcii recursive fiind: verific "condiia de oprire"; dac este satisfcut, atunci returneaz un anumit rezultat i "exit" - altfel, determin noii parametri i reapeleaz funcia cu acetia. i pe de o parte, verificarea condiiei de oprire va decurge la fiecare nou reapelare, iar pe de alta - "exit" nseamn "curarea" succesiv a cadrelor-stiv create pe parcursul reapelrilor, revenind "nnapoi" la contextul iniial de apel al funciei recursive respective. Putem imita i n Prolog aceast manier "clasic" de tratare, dar dispunem i de o metod specific, n fond mai "direct" (i posibil, mai eficient): anume, putem specifica diverse cazuri particulare n clauze separate (dar "n cadrul" aceluiai predicat):
gcd(A, 0, A) :- A > 0. gcd(A, B, G) :B > 0, R is A mod B, gcd(B, R, G). % dac A > 0, atunci gcd(A, 0) este A % gcd(A,B) este G dac: % B > 0 (n-a ajuns zero) i % (R fiind restul mpririi lui A la B), % avem G = gcd(B,R).

Acum predicatul "gcd" este format din dou clauze; condiiile A > 0 i B > 0 exclud cazul gcd(0, 0, G) (acum obinem corect "false" i nu valoarea 0). n plus, am reuit astfel (separnd clauzele) s evitm construcia IF-Then-Else (care este n general costisitoare, ca timp de execuie). Lucrurile nu decurg totui dup cum ar fi de dorit:

[trace]

?- gcd(2, 0, 2). % gsete clauza gcd(A, 0, A),

Call: (6) gcd(2, 0, 2) ? creep "nlocuind" A cu 2 ^ ^ Call: (7) 2>0 ? creep Exit: (7) 2>0 ? creep Exit: (6) gcd(2, 0, 2) ? creep true ;

% "A > 0" ? (din prima clauz)

% prima clauz este satisfcut, dar exist alternative (tastm ;) % gsete i a doua clauz, cu A <-- 2

Redo: (6) gcd(2, 0, 2) ? creep i B <-- 0 ^ ^ Call: (7) 0>0 ? creep Fail: (7) 0>0 ? creep Fail: (6) gcd(2, 0, 2) ? creep false.

% "B > 0" ? (din a doua clauz)

% a doua clauz nu este satisfcut

Avnd scopul gcd(2,0,2), interpretorul a cutat n baza de date curent o declaraie potrivit scopului respectiv i a gsit nti regula cu antetul gcd(A,0,A) (prin nlocuirea "necunoscutei" A cu valoarea 2, capul acestei reguli devine identic scopului de satisfcut). Gsirea unei "potriviri" are de obicei, dou urmri: interpretorul reine intern locul n care a gsit-o (dac ulterior va fi cazul, va relua cutarea din acel loc) i respectiv, se trece la "executarea" corpului constituent al regulii gsite. n cazul redat mai sus, se execut (6) i apoi (7), ncheind cu rezultatul "true" verificarea primei reguli gsite. Dar dup ce afieaz acest rspuns, interpretorul trece n starea de ateptare: dac se tasteaz ; atunci interpretorul execut "Redo" - adic reia cutarea din precedentul punct n care a reinut c exist alternative (n cazul de fa, alternativa urmtoare n baza de date este gcd(A,B,G) care se potrivete scopului prin substituia lui A cu 2, a lui B cu 0 i a lui G cu 2). Este clar c execuia ar fi trebuit ncheiat imediat dup verificarea primei reguli. O metod uzual pentru a impune aceasta (influennd din afar, mecanismul intern de backtracking) const n folosirea operatorului denumit cut i notat prin ! (acesta elimin - sau "taie" punctele de revenire precedente). Prima clauz se rescrie atunci astfel:
gcd(A, 0, A) :- A > 0, !. "Call" % ("cut") ignor alternativele precedentului

Cu aceast mic modificare (am adugat ! n prima clauz "gcd"), dac relum trasarea pentru gcd(2,0,2) (redat mai sus pentru cazul fr "cut") - constatm c acum execuia se ncheie corect, adic imediat dup constatarea verificrii primei clauze.

Triplete pitagoreice primitive


S gsim triunghiurile dreptunghice distincte care au catetele numere naturale coprime; acestea sunt numite primitive Pythagorean triple (PPT). Vorbim deci de tripletele (a,b,c) de numere ntregi pozitive care satisfac relaiile: a < b, gcd(a, b) = 1 i c2 = b2 + a2 (unde gcd este predicatul definit mai sus, pentru cel mai mare divizor comun).

"a < b" exclude triunghiurile congruente (triplete ca (3,4,5) i (4,3,5)), iar "a i b sunt coprime" exclude asemnarea (de exemplu (3k, 4k, 5k) n care k este un factor arbitrar). O descriere brut a proprietii PPT poate fi urmtoarea:
ppt(A, B, C) :% (A,B,C) este PPT (dar cu C <= 100) dac: between(5, 100, C), % C are o valoare 5..100 between(4, C, B), % B refer un ntreg 4..C (valoarea curent a lui C) between(3, B, A), % A refer un ntreg 3..B_curent gcd(A, B, 1), % A i B nu au divizori comuni (afar de 1) C^2 =:= A^2 + B^2. % i n final, este verificat teorema lui Pitagora

Privind between/3: ?- help(between)., sau ?- explain(between). Adugm aceast definiie n fiierul "pitagora.pl" (unde exist deja predicatul gcd/3) i rencrcm fiierul (la promptul interpretorului tastm "scurttura" [pitagora].). Formulm nti interogri de forma "este adevrat c tripletul cutare este PPT ?":
?- ppt(3, 4, 5). true. false. A=4) false. % se ndeplinesc toate clauzele PPT % Nu satisface a treia clauz ("not" between(3,B,A), unde B=3 i ?- ppt(4, 3, 5).

?- ppt(30, 40, 50). % Nu satisface a patra clauz (avem "not" gcd(30,40, 1))

Pentru un alt exemplu, (20, 99, 101) este PPT - dar ppt(20,99,101) va rspunde "false", pentru c nu este satisfcut prima clauz i ca urmare, nu se mai ajunge la verificarea celorlalte clauze. Dar definiia de mai sus permite i ntrebri de genul "care sunt valorile care satisfac" PPT:
?- ppt(A, false. % ?- ppt(A, A = 9, C = 41 ; false. ?- ppt(X, X = 33, Y = 56 ; X = 16, Y = 63 ; false. 20, C). Nu exist A, C nct A este prim cu 20 i A2 + 202 = C2 40, C). % tripletul (9, 40, 41) este PPT (i tastm ;) % Nu exist o alt soluie (A, 40, C) Y, 65). % tripletul (33, 56, 65) este PPT % (16, 63, 65) este PPT % Nu mai sunt soluii (pentru C=65)

Dac vrem o afiare mai convenabil, putem folosi predicatul predefinit writeln; iar dac vrem s form "Redo" (reluarea cutrii pentru o alt soluie, fr s mai tastm ;) atunci putem aduga fail:
... % operm la sfritul definiiei lui ppt: C^2 =:= A^2 + B^2, % am ters . final, nlocuind cu , writeln((A, B, C)), fail.

Rencrcnd apoi "pitagora.pl", vom obine:


?- ppt(X, Y, 65). 33,56,65 16,63,65 false. fail

foreaz backtracking-ul, nct primim deodat toate rspunsurile.

De obicei ns, alta ar fi perspectiva care ne-ar interesa: vrem tripletele "libere" (fr s fixm vreo valoare A, B, sau C) pn la o anumit limit (de exemplu, toate sistemele PPT cu C 1000; sau eventual, numai pe acelea pentru care 1000 C 2000). Deci, n primul rnd, trebuie s considerm dou argumente Min i Max, ntre valorile crora s varieze "necunoscuta" C. Putem considera pentru Min valoarea implicit 5:
ppt(N) :- ppt(_, _, N, 5). % toate PPT (c,b,a) cu 5 c N (c > b > a) (c > ppt(N, Min) :- ppt(_, _, N, Min). % toate PPT (c,b,a) cu Min c N b > a)

ppt(A, B, Max, Min) :between(Min, Max, C), % genereaz o valoare C nct Min C Max between(4, C, B), % 4 B C_curent between(3, B, A), % 3 A B_curent A^2 =:= (C - B) * (C + B), % ceva mai convenabil, dect C^2 =:= A^2 + B^2 gcd(A, B, 1), % A i B sunt coprime writeln((C, B, A)), fail. % afieaz soluia i reia ("Redo")

Dac vrem toate PPT pn la 100: ppt(100) (vezi imaginea alturat). Renunnd la clauza gcd(A,B,1) (o putem "comenta", prefixnd cu %) i repetnd - rencrcm

fiierul i lansm ppt(100) - vom obine toate cele 52 de triplete pitagoreice pn la 100 (nu numai pe cele 16 care sunt PPT). ns de exemplu pentru ppt(600, 500), rezultatul (lista PPT, ntre 500 i 600) se obine mult mai ncet. Aceasta, pentru c - fa de versiunea "brut" iniial - nu am prevzut dect "optimizri" minore (nelegate de fondul problemei): am nlocuit "C^2 =:= A^2 + B^2" cu o expresie care se evalueaz ceva mai repede i pe de alt parte, am inversat locurile pentru aceast clauz i respectiv, clauza gcd(A,B,1) (ceea ce este totui important: pentru exemplul din imagine, gcd(A,B,1) se va apela acum numai pentru cele 52 de triplete pitagoreice). Un PPT (a,b,c) are cteva proprieti implicite foarte simple, de care am putea ine seama n vederea eficientizrii programului. a i b fiind coprime, rezult c a, b, c sunt prime dou cte dou i c este impar; deci between(Min, Max, C) ar trebui s genereze doar valorile C impare. Ptratele dau sau restul 0, sau restul 1 la mprirea prin 3; deci, reducnd modulo 3 egalitatea a2 + b2 = c2, avem sau 0+1=1, sau 1+0=1 (cazul 0+0=0 trebuie respins fiindc a,b,c sunt coprime; cazul 1+1=1 trebuie evident, respins). Rezult c sau a, sau b este divizibil cu 3 (iar c nu poate fi multiplu de 3). O analiz similar pentru resturile mpririi prin 4 arat c valorile C trebuie s fie nu numai impare (cum am vzut mai sus), dar chiar congruente cu 1 modulo 4. Analog avem: modulo 16, ptratele sunt 0, 1, 4, sau 9; analiznd cazurile posibile pentru a2 + b2 = c2 (modulo 16) rezult c fie a, fie b este multiplu de 4. Putem evita deocamdat, modificarea "radical" a programului de mai sus (ar trebui rescris between, nct s genereze numai anumite valori - dar n feluri diferite pentru C, B i respectiv pentru A). Putem sintetiza cele stabilite mai sus n dou clauze: produsul a*b se divide cu 12 i respectiv, C ia numai valori congruente modulo 4 cu 1:
ppt(A, B, Max, Min) :between(Min, Max, C), % genereaz o valoare C nct Min <= C <= Max 1 =:= C mod 4, % Dar respinge imediat ("Redo") dac C nu este 1 modulo 4 between(4, C, B), between(3, B, A), 0 =:= A*B mod 12, % "Redo" dac A*B nu se divide cu 12 A*A =:= (C - B) * (C + B), % A*A este mai eficient ca A^2 (sau A**2) gcd(A, B, 1), writeln((C, B, A)), fail. % afieaz soluia i reia ("Redo")

Rencrcnd "pitagora.pl" putem constata c viteza de execuie se mrete de cteva ori, fa de prima versiune. De exemplu, lista PPT pn la 500 rezult cam n 8 secunde; dar mai departe pn la 1000, se ajunge totui la 1 minut:
?- time(ppt(1000)). 5,4,3 13,12,5 . . . . . . % pentru documentare, ?- help(time).

985,864,473 997,925,372 /* n cazul A^2 =:= (C - B) * (C + B) 52,959,287 inferences, 64.073 CPU in 64.121 seconds (100% CPU, 826543 Lips) */ /* n cazul A*A =:= (C - B) * (C + B) 52,959,130 inferences, 55.258 CPU in 55.295 seconds (100% CPU, 958397 Lips) */

Iniial, am folosit n program operatorul de ridicare la putere, A^2; dar - cum se poate deduce din listingul de mai sus - acesta necesit inferene n plus i timp mai mare dect nmulirea de ntregi (fiindc angajeaz reprezentri i calcul n virgul mobil). Dac ndrznim mai departe ppt(2000, 1000) rezult cam n 6.5 minute (folosind A*A; respectiv, peste 7 minute cnd s-ar folosi A^2). Dar programul poate servi pentru diverse alte obiective (nu numai pentru a lista tripletele PPT ntre dou limite fixate, ca mai sus). De exemplu: care PPT (A,B,C) cu C < 1000 au A divizibil cu 100:
?- L=[100,200,300,400,500,600,700,800,900], % Lista multiplilor de 100 (< 1000) | member(A, L), % selecteaz n A un membru din lista L | ppt(A, Y, 1000, 100). % PPT (A, Y, C) cu C < 1000 629,621,100 641,609,200 661,589,300 689,561,400 false.

Care triplete PPT ntre 1000 i 2000, au A impar ntre 49 i 63:


?- between(49, 63, A), 1201,1200,49 1301,1300,51 1405,1404,53 1513,1512,55 1625,1624,57 1741,1740,59 1861,1860,61 1985,1984,63 false. 1 =:= A mod 2, ppt(A, Y, 2000, 1000).

Pentru tripletele obinute mai sus avem C - B = 1. Exist i alte asemenea triplete? Putem folosi "ppt" inclusiv n scopul verificrii satisfacerii proprietii PPT prin ?- ppt(45, 1012, 1013, 5). (sau, un exemplu cu A=900: ?- ppt(900,2419,2581, 2581).).

Numrarea soluiilor, n Prolog


Dac ne intereseaz cte soluii sunt i nu lista acestora, n SWI-Prolog putem folosi metapredicatul aggregate(count, Goal, Result): apeleaz clauzele sau predicatul Goal i contorizeaz soluiile, returnnd numrul acestora n variabila "Result". S eliminm n prealabil, ultima linie din programul de mai sus (nu ne mai intereseaz "writeln" - deci comentm ntreaga linie i punem . dup clauza gcd(A, B, 1)); rencrcnd apoi "pitagora.pl", putem obine numrul de triplete PPT ntre diverse limite, astfel:
?- aggregate(count, ppt(1000), S). S = 158. ?- aggregate(count, ppt(2000,1000), S). S = 161.

Deci 158 de triplete PPT au ipotenuza mai mic dect 1000 - ceea ce este corect (vezi A101931) i sunt 161 de triplete PPT cu ipotenuza cuprins ntre 1000 i 2000. Obs. Numrul de PPT cu ipotenuza < N este aproximativ N / (2*PI) 0.1591549*N (D. N. Lehmer, 1900) i avem prilejul s verificm calitatea acestei aproximri: pentru N=1000 ea d 159, iar pentru N=2000 d 318 (fa de valorile exacte 158 i respectiv 158+161 = 319). Putem formula i o investigaie mai "amnunit":
?- time((member(N, [100,200,300,400,500,600,700,800,900,1000]), Min is N-100, aggregate(count, ppt(N, Min), S), N writeln((Min-N:S)), fail)). 0-100:16 100-200:16 200-300:15 300-400:16 400-500:17 500-600:15 600-700:17 700-800:16 800-900:12 900-1000:18 % % 52,959,340 inferences, 55.136 CPU in 55.187 seconds (100% CPU, 960527 Lips) % 16 PPT cu ipotenuza < 100 % 16 PPT cu ipotenuza ntre 100 i 200 % PPT cu ipotenuza ntre Min i

cere un singur argument i de aceea, am parantezat setul celor patru clauze care formeaz interogarea (regul uzual, cnd mai multe clauze ale unui aceluiai scop trebuie vzute ca un singur argument). Dac adunm valorile obinute aici pe intervale de lungime 100 - obinem ntr-adevr, totalul de 158 gsit anterior pentru numrul de PPT pn la 1000.
time/1

Dar aggregate face parte dintr-un modul specific interpretorului SWI-Prolog. O soluie mai portabil const n folosirea unui predicat ca findall (sau "find_all" n alte interpretoare):
?- findall( (A, B), ppt(A, B, 500, 5), L ), length(L, S). L = [(3,4),(5,12),(8,15),(7,24),(20,21),(12,35),(9,40),(28,45), (..., ...)|...], S = 80.

Orice triplet PPT este unic determinat de catetele sale; findall/3 colecteaz soluiile (A,B) ale ppt(A,B,500,5) n lista L; apoi, length/2 furnizeaz n S lungimea listei L, deci numrul de PPT. Desigur, am parantezat (A, B) nct s constituie un singur argument n "findall"; dar n acest caz, "parantezarea" este n acelai timp un ablon pentru elementele listei (n L avem: (3, 5), etc.) i se putea folosi i vreun alt format (de exemplu, findall(A-B, ...) ducea la L = [ 3-4, 512, ...]). De observat n plus, verificarea estimrii lui Lehmer: 0.1591549 * 500 79.58 80. Mai dm un exemplu (n care avem iari o "parantezare", n scopul unificrii ntr-un singur argument): s gsim PPT n care catetele sunt numere consecutive:
?- findall( A-B, (ppt(A, B, 1000, 5), B-A =:= 1), L ), length(L, S). L = [3-4, 20-21, 119-120, 696-697], S = 4.

Aceast metod servete situaia n care este necesar lista soluiilor (ca obiect n contextul execuiei programului, nu doar ca afiare), n scopul prelucrrii n program. Dac vrem doar numrul de soluii, atunci metoda bazat pe "findall" devine artificial (nu este necesar lista soluiilor). Prin urmare, ajungem la aceast problem: cum se contorizeaz soluiile unui predicat, n Prolog? ntr-un limbaj ca C++ instituim o variabil global iniializat cu 0 i o incrementm dup fiecare soluie obinut. Dar n Prolog variabilele sunt totdeauna "locale" predicatului n care apar i n plus, nu exist "atribuire" (memorare a unei valori ntr-o variabil) ci "unificare"; intern, "ppt(A,B,100,5)" (i orice alt termen) este reprezentat printr-o structur de pointeri (unul pentru functorul "ppt" i cte unul pentru fiecare argument) i "unificarea" revine n fond la validarea faptului c doi pointeri (sau copii locale ale lor) refer o aceeai zon (deci variabilele corespondente "au aceeai valoare"). n Prolog, "program" nseamn declaraii ntr-o "baz de date" i interogri - nct "global" revine la un fapt/regul/predicat care, fie exist din start (predicate predefinite) fie este definit n baza de date indicat interpretorului de ctre utilizator, fie este adugat bazei de date existente, prin efectul curent al execuiei interogrilor programului-utilizator. (este de observat c este vorba de "global", dar nici ntr-un caz de "variabil global"). Se pot aduga declaraii n baza de date existent folosind assertz (sinonim cu assert) i asserta ("la sfrit", respectiv "la nceput"); iar pentru "extragere" i eliminare - retract:
?true. ?elev(Nume). assert(elev(['Popa', 'Ion'])).

Nume = ['Popa', 'Ion']. ??false. retract(elev(X)). elev(Nume).

X = ['Popa', 'Ion'].

n acest exemplu de lucru, prin prima interogare s-a adugat elev(['Popa', 'Ion']) n baza de date; apoi s-a chestionat: exist o valoare pentru "necunoscuta" Nume care s satisfac termenul "elev"?. ntr-o interogare ulterioar, am folosit retract pentru a extrage ntr-o variabil X argumentul termenului "elev" existent i a elimina apoi acest termen din baza de date (interogarea ulterioar "elev(Nume)" nu mai poate fi satisfcut, fiindc faptul respectiv nu mai exist). Un meta-predicat count(Goal, N) care s lanseze repetat un predicat Goal indicat ca argument i s contorizeze de cte ori este satisfcut acesta (altfel spus, s dea numrul N de soluii ale predicatului indicat ca argument) se poate defini folosind assert i retract astfel:
% count(Goal, N) furnizeaz n N numrul soluiilor predicatului Goal count(Goal, N):assertz(contor(0)), count_(Goal), retract(contor(N)). count_(Goal):% iniializeaz contorul de soluii % lanseaz repetat Goal i actualizeaz contorul % obine n N valoarea final a contorului

/* Urmtoarea clauz se va executa numai dac count_(Goal) d "true" */

% Apeleaz repetat Goal, ct timp este satisfcut ("true").

call(Goal), % Cnd Goal d "false", ncheie count_(Goal) cu "false". retract(contor(N)), % Dac Goal este "true": N = rangul soluiei precedente, M is N + 1, % retracteaz contorul curent, incrementeaz N i nscrie contorul corespunztor acestei ultime assertz(contor(M)), % soluii. fail. soluie. count_(_). soluiile.

% Foreaz backtracking la call(Goal), pentru o nou

% ncheie count_(Goal) cu "true" i dup ce s-au epuizat

Uneori e mai greu de explicat "ce face" programul, dect s-l scrii - dar ne-am strduit mai sus, s comentm corespunztor clauzele respective. Dac ultima clauz ar lipsi, atunci apelul "count_(Goal)" (a doua linie din "programul principal") s-ar ncheia cu "false" i nu s-ar mai ajunge la clauza "retract(contor(N))"; poate c formularea cu If-Then-Else este mai clar:
% formulare cu If-Then-Else (nu mai necesit clauza final "count_(_).") count(Goal, N):assertz(contor(0)), ( % iniializeaz contorul de soluii count_(Goal) % va apela recursiv Goal, pn cnd rezult "false"

; ).

% "ELSE" (count_(Goal) nu este satisfcut) - execut "retract"-ul retract(contor(N)) %

ns n program am preferat (am justificat undeva mai sus, de ce) varianta fr If-Then-Else, adugnd atunci clauza final count_(_).. ntr-un exemplu redat mai sus am vzut cum putem folosi aggregate pentru a obine numrul de soluii: s-a generat lista soluiilor i s-a afiat lungimea acestei liste. S lansm acelai test, folosind de data aceasta count, pentru a numra direct soluiile:
?- time(( argument % a doua parantez este necesar fiindc time/1 are un singur member(N,[100,200,300,400,500,600,700,800,900]), Min is N - 100, count(ppt(N, Min), S), writeln(Min-N: S), fail )). 0-100:16 100-200:16 . . . . . . 700-800:16 800-900:12 % 38,584,787 inferences, 39.969 CPU in 40.000 seconds (100% CPU, 965362 Lips)

Desigur, constatm c - numrnd direct soluiile prin count, fr a genera lista acestora ca n aggregate - timpul este sensibil mai bun (40 secunde, fa de 55 secunde). n n jurul unei probleme de echilibru (II) ne-am ocupat de generarea unui anumit tip de partiii ntregi, constituind fiierul "espart2.pl" coninnd predicatele "espart2" i "parts_2". Dac vrem s contorizm soluiile folosind predicatul definit mai sus count, nlocuim linia
Suma_curenta =:= Numar_de_inclus -> scrie([Numar_de_inclus | Part])

din corpul predicatului parts_2" (linie prin care afiam soluia curent), cu:
Suma_curenta =:= Numar_de_inclus -> true ci numrul lor % Nu mai intereseaz soluiile,

i adugm n fiierul "espart2.pl" urmtorul predicat (angajnd i count):


espart3(N, Count) :halfTrig(N, Suma_initiala), count(parts_2(N, [0], Suma_initiala), Count).

ncrcnd pe lng "pitagora.pl" (n care avem definit count) i "espart2.pl" (dup salvarea modificrilor precizate mai sus), putem formula de exemplu, urmtoarea interogare:
?- between(10, 25, N), espart3(N, X), writeln(N: X), fail.

10:40 11:70 12:124 13:221 14:397

15:722 16:1314 17:2410 18:4441 19:8220

20:15272 21:28460 22:53222 23:99820 24:187692

25:353743 false.

Am obinut astfel numrul de "s-partiii" ale segmentului natural [n], pentru n=10..25 (dar vezi totui n jurul unei probleme de echilibru (I) o soluie mai rapid, angajnd o funcie generatoare pentru numrul de s-partiii).

Cautare

Userna inexist R Home Documente Upload Resurse

oare sina a ie

Access C sharp Frontpage Matlab Sql

Adobe photoshop Calculatoare Hardware Ms dos Tutorials

Algoritmi Corel draw Html Pascal Webdesign

Autocad Dot net Internet Php Windows

Baze de date Excel Java Power point Word

C Fox pro Linux Retele calculatoare Xml

e politica e calculatoare

PROIECT BAZELE PROGRAMARII PE OBIECTE


+ Font mai mare | - Font mai mic

ment

gie DOCUMENTE SIMILARE

Share on facebook Sh Share on email Share More Sharing Servic

Componentele arhitecturii ISA PROIECT INGINERIA SISTEM SOFTWARE Internetul - Comunicarea client

web Limbajul algoritmic (pseudocod Stergerea folderelor si fisierelor CODIFICAREA DATELOR Utilizarea vederilor dinamice in administrarea bazei de date Ora Proceduri. Programe. Utilitarul Norton Commander Functia comerciala

TERMENI importanti pentru document

: cod sursa vb6 contabilitate : op pot fii efectuate cu variabile de t basic : : comanda de derulare pe web :

Cuprins Partea 1. Teorie I. Programarea pe Obiecte.Notiuni Generale...pag3 I.1. Obiecte.Clase.Caracteristici.pag3 I.2. Modele Utilizate In Dezvoltarea de Produse Software..pag5 II.Limbajul VISUAL BASIC.....pag 8 III. VISUAL BASIC PRIN EXEMPLE PRACTICE15 IV. Limbajul de Programare Visual Basic.21 Partea 2. Aplicatii

Partea 1. Teorie I. Programarea pe Obiecte.Notiuni Generale I.1. Obiecte.Clase.Caracteristici.


I.1.1. Introducere.

Limbajele de programare, tehnicile si metodele de programare au evoluat in mod spectaculos de la aparitia calcul astazi, ca urmare a necesitatii de a raspunde la cresterea continua a complexitatii problemelor de rezolvat si deci, im programelor corespunzatoare.

Atunci cand limbajele de asamblare n-au mai facut fata complexitatii crescande a programelor, a fost necesara ut limbaje de nivel mai inalt, cunoscute sub numele de limbaje de programare de generatia I-a si a II-a, ca instrumente faciliteze gestionarea acelui nivel de complexitate. Reprezentante de seama ale acestei perioade sunt limbajele FOR COBOL, ALGOL.

Odata cu cresterea dimensiunii si complexitatii proiectelor software, a devenit tot mai clar ca pentru a le putea co absolut necesara abstractizarea datelor si ca in acest scop programarea structurata nu mai este eficienta.

S-a impus gasirea unui nou model de prrogramare capabil sa depaseasca limitarile programarii structurate si care sa realizeze abstractizarea adecvata a datelor. Asa s-au nascut limbajele bazate pe obiecte si apoi cele orientate p Dintre acestea cele mai raspandite sunt Ada si CLOS si mai de curand JAVA (bazate pe obiecte), respectiv Smallt (orientate pe obiecte).

I.1.2. Conceptul de Obiecte.

Prin obiect intelegem o entitate din lumea reala asupra careia se poate intreprinde o actiune, sau care poate intrep

Obiectul este deci un concept, o abstractiune sau un lucru, o entitate din lumea reala avand limite precise si un se contextul problemei studiate. Un obiect este caracterizat prin 3 elemente: o o o identitate; stare; comportament.

Spunem despre un obiect ca are doua componente: o o structura infirmationala; comportamentul sau operatiile care actioneaza asupra structurii.

Analizand mai atent obiectele, constatam ca acestea pot fi: o o obiecte concrete, care exista in mod fizic; obiecte conceptuale (o idee, o lege, etc.).

Comportamentul obiectelor poate fi declansat de stimuli externi sau evenimente (de exemplu: primeste o comand chitanta, repara automobilul, etc.).

Singura parte vizibila a unui obiect este constituita din operatiile (functiile) obiectului si este denumita interfata. Orice obiect are atribute si operatii.

Atributele descriu un obiect si sunt valori ale dtelor, in timp ce operatiile (functiile) deinesc comportamentul obie metode orientate obiect propun, pentru acelasi scop, utilizarea a trei tipuri de obiecte, definite in contextul problem obiecte entitate; obiecte de interfata; obiecte de control.

Arhitectura sistemelor cu obiecte se bazeaza pe clase, obiecte si interactiunea dintre ele. Un obiect dispune de proprietati, metode si evenimente.

Proprietatile unui obiect descriu caracteristicile fizice ale acestuia. Proprietatile reprezinta atribute ale obiectelor caracterizat prin proprietatile (atributele) sale: nume, dimensiune, culoare, eticheta si ale proprietatii care fac unic u

Din punct de vedere al programatorilor, un obiect reprezinta o multime de date si o serie de operatii, numite met manipuleaza datele. Obiectul se caracterizeaza prin:

Identitate - cea care individualizeaza obiectul (spre exemplu numele lui pentru a-l distinge fata de alte o Exemple de obiecte particulare pot fi: bicicleta lui Radu; o fereastra de la o statie de benzina; un triunghi desenat pe hartie.

Metodele obiectului - reprezinta elementele comportamentale ale obiectului atunci cand acesta este acce diverse din exteriorul sau.

O operatie este o actiune pe care o efectueaza un obiect. Implementarea specifica a unei operatii de catre o a numeste metoda.

Starea obiectului - este caracterizata de atributele care descriu obiectul. Fiecare atribut are un nume si o ca variabila de instanta. Variabila de instanta este o anumita compozitie a caracteristicilor obiectului la un mo (variabilele de instanta definesc proprietatile obiectului). Clsificarea - presupune ca obiectele care au aceeasi structura (aceleasi atribute) si acelasi comportament operatii) sunt regrupate in clase. Obiectul cu stari comportamentale asemanatoare formeaza o clasa de obiecte.

I.1.3. Conceptul de Clasa de obiecte.

O clasa de obiecte este o abstractie care descrie toate caracteristicile comune ale unui grup de obiecte si care per noi obiecte. Exemple de clase: Bicicleta, Fereastra, Triunghi,etc.

Clasa reprezinta un ansamblu de obiecte cu stari comportamentale asemanatoare, sau, altfel spus, o anumita cat obiecte ale carei proprietati si metode pot fi mostenite intr-o subclasa.

O clasa stocheaza si manipuleaza date si poate returna valori catre codul de program care utilizeaza un obiect al a

o clasa are un identificator (un nume) si campuri membre. Se pot crea clase in cadrul unor module specifice fieca anumite module de clasa.

Clasa este de fapt o entitate statica, avand interfata si proprietati bine determinate. Ea poate fi definita intr-un lim sau in mod grafic.

Subclasa defineste comportamentul modului de realizare a obiectului derivat dintr-o clas

Tipul este o descriere abstracta a unui grup de entitati asemanatoare; Subtipul este o parte a comportamentului.

In aceasta abordare deosebit de importante sunt conceptele de identitate, polimorfism, mostenire si incapsular

Identitatea semnifica faptul ca obiectele sunt entitati discrete si distincte.Fiecare obiect poseda propria sa identit

Polimorfismul reprezinta capacitatea unui obiect de a-si modifica forma. Polimorfismul se manifesta prin reactii diverselor obiecte la un acelasi mesaj.

Existenta unor operatii (sau metode) diferite, cu acelasi nume, dar cu comportament diferit, se numeste polimorf Exemple: a muta o bicicleta; a muta o fereastra; a muta un triunghi.

Mostenirea permite partajarea atributelor si operatiilor comune intre clase pastrand, in acelasi timp, diferentele. O rafinata in subclase din ce in ce mai fine. Fiecare subclasa mosteneste toate proprietatile superclasei sale si aduga p proprietati. Mostenirea reprezinta transmiterea de proprietati si metode. Msostenirea este marcata de o definire suplimentara proprietatile si metodele clasei. Mostenirea poate fi: o o simpla, cand o subclasa are o singura clasa parinte;

multipla, cand o subclasa mosteneste proprietatile si metode ale mai multor clas

Incapsularea reprezinta combinarea datelor si metodelor intr-o singura structura de date, definind totodata modu obiectul si restul programului pot referi date din obiect. In obiecte/clase de obiecte sunt ascunse atat structura cat si operatiilor prin procesul de incapsulare.

Incapsularea - reprezinta conceptul care defineste apartenenta unor proprietati si metode fata de un obiect. Incaps protejeaza obiectele de manevre eronate din afara.

I.2. Modele Utilizate In Dezvoltarea de Produse Software.


I.2.1. Generalitati privind activitatea de programare.

Programarea este practic activitatea prin care se concepe si se realizeaza programul pentru rezolvarea unei prob ajutorul calculatorului electronic.

Un program reprezinta o succesiune de instructiuni si comenzi apartinand unui/unor limbaje de programare (Pas

Visual Basic, Java etc.) care conduc la solutionarea problemei formulate. Daca ne referim la activitatea de programare, vom identifica in cadrul acesteia, urmatoarele etape:

o Formularea problemei - etapa in care se formuleaza efectiv problema de rezolvat, se definesc obiectiv datele de iesire si forma lor de prezentare, se determina datele de intrare necesare si cerintele de prelucrare.

o Eliberarea, identificarea si descrierea algoritmului de rezolvare a problemei date (sub forma de ps schema logica). Ea presupune analiza corecta, exacta si completa a problemei formulate, pentru gasirea si apoi algoritmului ei corect de rezolvare.

o Scrierea programului - etapa in care are loc scrierea propriu-zisa a programului, intr-un limbaj de pro programator. Se obtine astfel asa numitul program sursa. o Testarea programului - activitate prin care se verifica sintactic si logic corectitudinea programului.

o Realizarea, completarea si definitivarea documentatiei programului, care trebuie sa fie accesibila a cat si specialistilor (programatori sau operatori) care vor dezvolta, completa sau intretine programul in viitor.

o Exploatarea curenta, utilizarea si intretinerea programului, are ca obiectiv intretinerea si dezvoltar daca este necesar. Modele utilizate in dezvoltarea programelor. Un model este o notiune abstracta si este construit pentru a intelege problema inainte de a implementa solutia. Cele mai utilizate modele in dezvoltarea programelor sunt: Modelul orientat procedural care se bazeaza pe proceduri si algoritmi; Modelul orientat pe obiecte, care consta intr-o colectie de obiecte ce apartin unor clase; Modelul orientat pe reguli (de tip If-Then); Modelul orientat logic in care anumite scopuri se exprima prin calcule cu predicate; Modelul orientat pe constrangeri (relaModelul orientat pe constrangeri (relatii de invarianta);

Cea mai mare raspandire o are modelul procedural si cel mai mare interes il reprezinta in ultimul timp modelul or obiecte. I.2.2. Scurta prezentare a modelului procedural.

Modelul procedural reprezinta, prin intermediul algoritmilor de prelucrare, succesiunea operatiilor elementar finit, care trebuie parcurse pentru rezolvarea unei probleme.

Modelul procedural are la baza abstractia procedurala si principiul substitutiei conform careia, la apelul unei pr pozite de parametru formal din corpul acesteia, poate fi ocupata de o valoare de parametru identica din punct de ve sau de un nou apel la o procedura, inclusiv a procedurii in cauza (recursivitate), care reintoarce tipul corespunzator

substituit. Din limbajele de tip procedural amintim: Pascal, Cobol, Basic, C++, FoxPro.

Modulul program reprezinta o parte a unui program, compusa din mai multe instructiuni, care are un nume prop rezolva o anumita functie a programului respectiv. Orice modul se caracterizeaza prin urmatoarele elemente: nume, necesar pentru apelare; o functie concreta; un algoritm de rezolvare; o interfata cu programul.

Algoritmii, odata ce au fost identificati, sunt reprezentati prin: sceme logice care pot fi de program sau de sistam;

pseudocod, un limbaj formalizat, care contine enunturi standard si nestandard si care nu are reg precum limbajele de programare; tabelele de decizii; diagrame de tip arbore, daca avem de a face cu o proiectare modularizata; limbaje de programare.

I.2.3. Modularitatea.

Clasele si obiectele obtinute in urma abstractizarii si incapsularii trebuie grupate si apoi stocate intr-o forma fiz modul.

Modulele pot fi privite xa si containere fizice in care declaram clasele si obiectele rezultate in urma proiectarii l Modulele formeaza asadar arhitectura fizica a programului.

Modularizarea consta in divizarea programului intr-un numar de module care pot fi compilate separat, dar acr (cuplate) intre ele. Reguli Generale de Modularizare. a) Structura fiecarui modul trebuie sa fie suficient de simpla pentru a putea fi complet inteleasa.

b) Implementarea unui modul trebuie sa depinda doar de interfetele altor module, adica trebuie sa fie posi implementarii unui modul fara a avea cunostiinte despre implementarea altor module si fara a afecta comport module. c) Detaliile sistemului care se presupune ca se vor modifica independent vor fi plasate in module diferite. d) Singurele legaturi intre module vor fi acelea a caror modificare este improbabila.

e) Orice structura de date este incapsulata intr-un modul; ea poate fi adresata direct din interiorul modulul fi accesata din afara modulului decat prin intermediul obiectelor si claselor continute in acel modul.

Elementul fizic de constructie in limbajele bazate/orientate pe obiecte este modulul care contine o colectie de clas

Un program orientat pe obiecte are putine date globale, intrucat datele si operatiile sunt unite intr-un mod nou car blocurile logice fundamentale ale sistemului sa nu mai fie algoritmii, ci clasele si obiectele I.2.4. Programarea Orientata pr Obiecte. Concepte de Baza.

Proiectarea orientata pe obiecte este o metoda de implementare in care programele sunt organizate ca si colectii coopereaza intre ele, fiecare obiect reprezentand instanta unei clase; fiecare clasa apartine unei ierarhii de clase, cla prin relatii de mostenire. Aceasta definitie cuprinde trei parti importante, si anume: obiectele si nu algoritmii sunt blocurile logice fundamentale; fiecare obiect este o instanta a unei clase; clasele sunt legate intre ele prin relatii de mostenire. Limbaj de Programare Bazat pe Obiecte. Programare cu Tipuri de Dtae Abstracte.

Un limbaj de programare care ofera suport pentru utilizarea calselor si a obiectelor, dar care nu are implementa relatiilor de mostenire intre clase este un limbaj de programare bazat pe obiecte. Concepte Fundamentale in Programarea pe Obiecte.

Programarea orientata spre obiecte reprezinta un stil de programare nou, care utilizeaza concepte si constructii noi de structurare a datelor, de tratare a colectiilor de date si chiar de programare. Ea pune in centrul atentiei obicte definesc ca unitati de program independente, care cuprind laolalta datele si procedurile ce actioneaza asupra obiect Principalele concepte care stau la baza programarii orientate pe obiecte sunt: Abstractizarea; Incapsularea; Modularizarea; Ierarhizarea.

Abstractizarea este una din caile fundamentale prin care noi, oamenii, ajungem sa intelegem si sa cuprindem c In contextul programarii pe obiecte, Booch ne ofera urmatoarea definitie a abstractiunii:

O abstractiune exprima toate caracteristicile esentiale ale unui obiect, care fac ca acesta sa se distinga de alte abstractiunea ofera o definire precisa a granitelor conceptuale ale obiectului, din perspectiva unui privitor extern.

In procesul de abstractizare atentia este indreptata exclusiv spre aspectul exterior al obiectului, adica spre comp

ignorand implementarea acestei comportari. Se poate spune ca abstractizarea consta in focalizarea pe aspectele esentiale ale unei entitati.

Incapsularea consta in separarea aspectelor externe ale unui obiect, care sunt accesibile altor obiecte, de aspecte obiectului, care sunt ascunse celorlalte obiecte. Utilizatorul obiectului poate accesa doar anumite atribute si operati publice, in timp ce alte atribute si operatii ii raman inaccesibile (acestea se numesc private).

Incapsularea este un concept complementar abstractizarii. Daca rezultatul operatiei de abstractizare pentru un a este identificarea protocolului sau, atunci incapsularea are de a face cu selectarea unei implementari si tratarea aces secret al respectivei abstractizari. Prin urmare, incapsularea este procesul in care are loc ascunderea implement majoritatea obiectelor-client. Ierarhizarea reprezinta o ordonare a abstractiunilor. Cele mai importante ierarhii de clase in paradigma obiectuala sunt: Ierarhia de clase (relatie de tip 'is a'); Ierarhia de obiecte (relatie de tip 'part of'); Mostenirea (ierarhia de clase).

Mostenirea defineste o relatie intre clase in care o clasa impartaseste structura si comportarea definita in una sau (dupa caz vorbim de mostenire simpla sau multipla). Agregarea (ierarhia de obiecte). Majoritatea metodelor orientate obiect utilizeaza reguli sau operatii semantice cum sunt : generalizarea / specializarea; agregarea / descompunerea combinate cu mostenirea si incapsularea. Agregarea este relatia intre doua obiecte in care unul dintre obiecte apartine celuilalt obiect. Agregarea reda obiect la un alt obiect.

Evenimentul - este actiunea savarsita de sistem atunci cand operatorul solicita executarea unei comenzi. Evenim declansate interactiv sau programat. 1.2.5. Modele ale proiectarii si programarii pe obiecte.

Modelul obiectual - este descrierea structurii statice a obiectelor, claselor de obiecte, a operatiilor si atributelor p legarturilor si a relatiilor dintre ele. O diagrama de obiecte este un graf ale carui noduri sunt obiectele si ale carui a dintre obiecte.

Modelul dinamic - descrie interactiunea dintre obiecte si este focalizat pe aspecte ce se schimba in timp, deoarec are un ciclu de viata cu un punct de pornire si unul de sfarsit. O diagrama de stare este un graf ale carui noduri sun

carui arce sunt tranzactiile intre stari, cauzatre de evenimente externe.

Modelul functional - descrie transformarile valorilor datelor precizand sursa, transformarile si destinatia lor. O d de date este un graf ale carui noduri sunt procesele si ale carui arce sunt fluxurile de date.

Modalitatea de coordonare si interactiune intre obiecte este transmiterea mesajelor. Trimiterea unui mesaj are c unei metode (operatii asociate cu sablonul uni mesaj) a obiectului receptor cu argumentele continute in mesaj.

II. Limbajul VISUAL BASIC


2.1. Prezentare generala.

Visual Basic reprezinta o varianta si totodata o dezvoltare a vechiului limbaj de programare Basic (Begginer's A Symbolic Instructions Code-codul instructiunilor simbolice de uz general pentru incepatori) si a fost lansat pe piata MicroSoft in anul 1991. MicroSoft specifica termenul 'Visual' deoarece limbajul permite proiectarea unei interfete program si utilizator (Grafic User Interfaces - GUI) cu ajutorul unor formulare (forme). Acestea contin elemente v obiecte sau controale, cum ar fi butoane de comanda, casete de validare, casete de dialog, casete text, etc., care utilizatorilor sa obtina, sa afiseze, sa inscrie date, imagini, etc.

Visual Basic este un mediu integrat de dezvoltare, deoarece integhreaza functii de proiectare, editare de tex depanare in cadrul unui mediu comun.

Visual Basic este un limbaj interactiv, adica implementeaza fiecare instructiune pe masura ce e introdusa de l compiland partial codul si semnaland orice eroare sintactica, daca instructiunea este corecta, executand-o.

Visual Basic stocheaza fisierele sursa ca fisiere ASCII ale caror nume de fisier contin una din urmatoarele patru extensie: .frm pentru forme - O forma asigura programului mijloacele visuale de prezentare a datelor; .bas pentru module cod sursa - Un modul stocheaza secvente de cod care nu necesita o forma;

.cls pentru module clase - Un modul clasa este un tip special de modul cod care contine o singura clasa asociate acesteia;

.res pentru resurse - Un fisier de resurse contine imaginile si textele necesare programului, precum si al orientate pe prezentare. Visual Basic lucreaza cu mai multe tipuri de proiecte (standard.exe, ActiveX.exe, ActiveX.DLL, ActiveX fiecare avand particularitatile sale. Incercand o prezentare succinta a limbajului de programare Visual Basic, acesta se poate caracteriza astfel: Cel mai rapid si cel mai simplu limbaj de dezvoltare a unei aplicatii sub Windows; Poate realiza tot ce poate fi realizat cu oricare alt limbaj de programare sub Windows;

Co

Este un mediu integrat de dezvoltare deoarece integreaza functiile de proiectare, editare de text, compil in cadrul unui mediu comun;

Visual Basic abordeaza interactiv dezvoltarea codului nefacand distinctie intre scrierea, compilarea si tes

Combina elemente de programare orientata pe obiecte cu elemente de programare orientata pe eveniment

Poate crea baze de date pentru cele mai raspandite tipuri de date: Microsof Access, Microsoft FoxPro, dB Microsoft SQL Server, etc.; Permite integrarea functiilor furnizate de catre alte aplicatii (de ex.:Microsoft Word, Excel, etc.);

Permite accesul la documente si aplicatii din internet sau intranet sau crearea unor aplicatii de tip Internet Detine toate documentele necesare crearii unor aplicatii de uz personal sau pentru grupuri de lucru.

2.2. Mediul integrat de dezvoltare Visual Basic (IDE)


2.2.1. Lansarea in executie. Lansarea in executie a programului Visual Basic se poate face in mai multe moduri: Se activeaza butonul START de pe bara de task-uri;

Se activeaza optiunea PROGRAMS si, in lista de optiuni se executa click pe Microsoft Visual Studio Microsoft Visual Basic 6.0

Mediul de programare Visual Basic (IDE - Integrated Development Environment) este un ansamblu de meni instrumente si ferestre cu ajutorul carora programatorul poate proiecta si crea aplicatii in Visual Basic. 2.2.2. Mediul de lucru Visual Basic. Mediul de lucru Visual Basic poate contine:

Bara de meniuri contine maniurile standard ale uni meniu Windows: File, Edit, View, Windows si Help, prec care cuprind comenzi specifice programarii in Visual Basic, precum: Project, Format, Debug.

Toolbar (bara de instrumente) permitre accesul rapid la comenzile cele mai des folosite in mediul Windows: fisier, salvare, tiparire, copiere, mutare, etc. La acestea se pot adauga (sau elimina) si alte bare cu instrumente cu aj Toolbar din meniul View.

Toolbox (cutia de instrumente) situatx de regula in partea din stanga a ecranului, contine un set de pictograme obiectelor care pot fi folosite in timpul proiectarii aplicatiilor cum ar fi: Label, TextBox, CommandButton, Combo introduse in formular (forma). Unii programatori clasifica aceste controale in trei grupe: o o o Intrinseci (care apar in Toolbox atuci cand se porneste prima data Visual Basic); Externe (controale ActiveX, care pot fi adaugate de la ToolBox); Inserabile (controale facute din aplicatii externe, precum MS Excel).

Meniuri contextuale contin comenzi rapide pentru actiuni efectuate in mod frecvent. Meniurile contextuale se

executand click dreapta pe obiectul respectiv. Ele contin comenzi ce pot fi utilizate la locul si in momentul respecti Fereastra Project Properties serveste la stabilirea unor informatii despre proiect. In sectiunea General se pot stabili: Project Type, deci tipul proiectului (.exe, .dll, .ocx, etc.); Startup Object, deci care este 'forma' cu care incepe aplicatia; Project Name, defineste numele fisierului help aferent proiectului; Project Description pentru o scurta descriere a proiectului.

In sectiunea Make se pot stabili informatii cu privire la versiunea aplicatiei, numarul versiunii, titlul, pictogram acesteia. Sectiunea Compile stabileste optiunile de compilare ale proiectului: p-Code sau Native Code.

Fereastra 'Project Explorer' faciliteaza lucrul cu diferitele componente ale proiectului, afisate sub forma unei arborescente. Fiecare componenta are un nume si un nume de fisier(acestea apar intre paranteze). Exista sapte tipur componente ce pot aparea aici: Projects (.VBP) Forms (.FRM) Modules (.BAS) Class Modules (.CLS) User Controls (.OCX) User Documents (.DOB) Property Pages (.PAG)

Fereastra Project Browser afiseaza informatii despre prototipurile tuturor functiilor, procedurilor, care se afla biblioteca (dll, olb, ocx) legate la proiect. In fereastra Classes se poate vedea ce contine biblioteca: clase, module, e definite de utilizator, iar in fereastra din partea dreapta continutul fiecarei dintre acestea.

Fereastra 'Properties Window' (fereastra de proprietati) afiseaza toate proprietatile formei/controlului sele acestora. Fiecare proprietate are un nume si o valoare setata fie de Visual Basic, fie de programator. In denumirea foloseste un prefix din trei litere mici, reprezentand tipul obiectului:
Prefix cbo chk cmd Tipul obiectului Combo box Check box Command button

frm img lbl lst mnu pic txt

Form Image Label List box Menu Picture box Text box

O serie de proprietati sunt comune mai multor controale Visual Basic, cum sunt: Proprietatea Alignment Backcolor Borderstyle Caption Enabled Font Forecolor Height Left MousePointer Explicatia textul de pe control poate fi aliniat la stanga, la centru sau la dreapta culoarea fundalului tipul bordurii din jurul controlului textul afisat de pe control Daca are valoarea logica 'true', utilizatorul poate interactiona cu controlul; daca are valoarea 'false', controlul nu raspunde la actiunea utilizatorului determinx fontul, marimea lui si stilul textului afisat pe control Determina culoarea textului de pe un control inaltimea controlului (in twips) distanta de la marginea din stanga a formei (ecranului) determina forma cursorului mouse-ului cand acesta trece peste controlul respectiv numele controlului textul care apare cand utilizatorul tine cursorul mouse-ului peste controlul respectiv distanta de la marginea de sus a formei (ecranului) determinx daca controlul este vizibil sau nu latimea controlului

(Name) ToolTipText

Top Visible Width

Fereastra Form Designer afiseaza un formular pe care programatorul in poate personaliza inserand controale, imagini, proiectand astfel intefata aplicatiei cu utilizatorul. Fiecare formular (forma) din cadrul proiectului are prop tip Designer, aceasta fiind practic fereastra de proiectare a fiecarui formular.

Fereastra 'Form-Layout' afiseaza o schita in miniatura a formei, reprezentand locatia de pe un ecran unde ace in timpul executiei programului. Din aceasta fereastra se poate stabili, de asemenea, locatia initiala a formei, prin m

Fereasra Code Editor este folosita ca un editor de texte pentru a introduce codul procedurilor aplicatiei. Pentr se poate deschide o fereastra de cod (code window). Fereastra ne pune la dispozitie un procesor de texte specializat facilitati pentru scrierea de cod in Visual Basic.

Fereastra References afiseaza diferitele legaturi ce se pot stabili cu alte componente soft inregistrate in sistem

putea folosi in cadrul aplicatiei proceduri sau obiecte ce se gasesc in diferite fisiere DLL sau OCX trebuie sa se sta legatura cu acestea.

In fereastra References sunt afisate toate legaturile spre bibliotecile de prototipuri care au fost inregistrate in sis dorim sa legam la proiect un fisier care nu este in lista, vom folosi butonul Browse. Fereastra Components, cu ajutorul ei se pot introduce in proiect legaturi cu diferite controale (fisiere .OCX). fereastra References numai ca se pot stabili legaturi doar cu controalele ActivX inregistrate in sistem.

Ferestrele Immediate, Locals si Watch sunt utilizate de regula in faza de testare si corectare a programului de disponibile numai in timpul executiei programului. Fereastra Options este importanta pentru a stabili diverse optiuni ale IDE. Cele mai utilizate optiuni sunt:

Optiunea Auto Syntax Check cere compilatorului V.B. sa verifice corectitudinea sintaxei comenzilor i scrie codul si sa atentioneze asupra eventualelor greseli; Optiunea Require Variable Declaration stabileste daca trebuie sa se declare explicit variabilele;

Optiunea Prompt for project din sectiunea Environment permite alegerea unui sablon de proiect care s pentru un proiect nou;

Optiunea Create default stabileste un sablon de proiect care se va incarca automat de cate ori se dorest un proiect nou;

In sectiunea Advanced se poate alege unul din cele doua stiluri ale IDE: SDI-single document interface multiple document interface. Alegand SDI toate ferestrele din IDE pot fi mutate oriunde pe ecran; alega ferestrele sunt continute intr-o singura fereastra parinte.

2.3. Concepte de baza in Visual Basic.


2.3.1. Obiecte. Proprietati.

Obiectul se poate defini astfel, din punct de vedere al proiectantului, ca un ansamblu de date si operatii, numite manipuleaza datele.

Obiectele stau in centrul programarii in Visual Basic. Fiecare obiect are o identitate a sa, proprie si este caracte serie de proprietati sau atribute.

Proprietatile unui obiect descriu caracteristicile fizice ale acestuia: dimensiunea, culoarea, pozitia acestuia, ina numele obiectului, etc. Avem doua posibilitati de a modifica proprietatile unui obiect: in momentul proiectarii, folosind fereastra de proprietati; in timpul executiei, prin codul programului.

Modificarea valorilor proprietatilor unui obiect in faza de executie a programului se face prin cod, referirea ace

realizandu-se printr-o expresie cu sintaxa: NumeObiect.Proprietate = Valoare 2.3.2. Metode.

O metoda este o actiune pe care programul o poate efectua asupra obiectului. O metoda este o procedura din pr poate fi invocata pentru a asocia o anumita actiune unui obiect. Sintaxa apelului unei metode este urmatoarea: [NumeObiect].Metoda [lista-parametri] Metoda Move presupune utilizarea cuvantului cheie Move si patru parametrii: Left, Top, Width si Height. Pe langa proprietati si metode, majoritatea obiectelor din Visual Basic dispun si de un eveniment, cel putin. Un eveniment este raspunsul unui obiect la o actiune a utilizatorului sau la o actiune a programului.

Codul din aplicatiile Visual Basic se imparte in blocuri de dimensiuni mai mici numite proceduri. O procedur contine cod care este executat atunci cand se produce un anumit eveniment. 2.3.3. Aplicatii Visual Basic. Caracteristici.

Modulele formelor constitue baza pentru majoritatea aplicatiilor create in Visual Basic. Ele contin declaratii d constante, tipuri definite de utilizator, enumerari, proceduri ce gestioneaza evenimentele, proceduri si functii globa

Modulele standard (fisiere c extensia .bas)contin proceduri si declaratii care pot fi accesate din orice alt modu Putem adauga module standard la aplicatiile noastre cu ajutorul comenzii AddModule din meniul Project.

Modulele claselor constitue baza programarii orientate pe obiecte in Visual Basic. Astfel, putem scrie cod in m pentru a crea obiecte noi, cu proprietati si module proprii. Putem adauga un modul clasa la aplicatie cu ajutorul com Class Module. Etapele proiectarii unei aplicatii in Visual Basic. Crearea unei aplicatii in Visual Basic parcurge, in mod normal urmatoarele etape: 1. Formularea problemei si deci definirea aplicatiei de rezolvat cu calculatorul; 2. Proiectarea interfetei grafice cu utilizatorul (forme, obiecte, evenimente); 3. Stabilirea proprietatilor pentru obiectele identificate; 4. Scrierea codului (asociat diferitelor evenimente); 5. Rularea (executia) aplicatiei si corectarea erorilor; 6. Salvarea Proiectului. 2.3.4. Formulare Visual Basic.

Un formular reprezinta o zona rectangulara, asemanatoare unei ferestre. Pe ecran pot aparea la un moment dat u multe formulare. Toate proiectele Visual Basic au cel putin cate un formular. Avem doua tipuri de interfete:

Interfata de tip SDI - Singular Document Interface, ceea ce inseamna ca se poate deschide un singur d

Interfata de tip MDI - Multiple Document Interface, ceea ce inseamna ca este permisa afisarea mai m in acelasi timp.

Proprietatile unui formular definesc caracteristicile fizice ale acestuia: Caption stabileste textul care va fi afisat in bara de titlu a formularului; Icon stabileste pictograma care va fi afisata cand se va minimiza formularul; MaxButton si MinButton arata daca formularul poate fi maximizat sau minimizat; BorderStyle controleaza comportamentul formularului la redimensionare; Height si Width caracterizeaza dimensiunile initiale ale formularului; Left si Top determina dispunerea formularului relativ relativ la coltul din stanga sus a ecranului;

WindowStyle stabileste starea ferestrei astfel incat la pornire formularul sta sa apara in forma Maximed sau Normal; Name - atribuie un nume formularului, prin care acesta va fi apelat in cadrul codului Visual Basic. 2.3.5. Controale Visual Basic.

In Visual Basic obiectele se mai numesc si controale si acestea pot fi: butoane de comanda, butoane de optiune dialog, casete de validare, bare de derulare, etc. Un control dispune de proprietati, metode si evenimente. In Visual Basic controalele pot fi grupate in mai multe categorii, astfel: 1. Controale de tip buton Acestea sunt de doua tipuri: Buton de comanda - Command Button; Buton imagine - Image Button. 2. Controale care afiseaza imagini si grafica. Acestea sunt:

Controlul imagine - folosit pentru a afisa imagini de tipul: pictograme, bitmap, JPEG sau G

Controlul forma grafica (shape) - foloseste la desenarea unor forme grafice predefinite pe formular ca: patrat, oval, cerc, dreptunghi, etc.; Controlul linie - este folosit pentru a genera segmente de linie pe un formular;

Controlul caseta cu imagini - este folosit pentru afisarea graficii, ca un container pentru alt 3. Controale eticheta (Label)

Acest control afiseaza text care poate fi doar citit, nu si modificat in mod direct de utilizator. Controalele et diferite mesaje, care se pot schimba in functie de context. 4. Controale caseta cu text (text Box)

Acest control permite introducerea unui text de la tastatura si/sau afiseaza un text introdus de utilizator sau evaluarea unei expresii. Acest text este controlat de proprietatea Text si poate fi modificat doar in cazul in care pro Locked nu are valoarea True. 5. Controale cu optiuni pentru utilizator.

Visual Basic pune la dispozitia utilizatorilor sai mai multe controale standard oferindu-le posibilitati de alegere Caseta de validare Check Box; Butoane de optiune (Butoane radio) Option Button; Caseta cu lista - List Box si Combo Box.

Controlul caseta de validare (Check Box) permite utilizatorului sa aleaga una sau mai multe optiuni si afiseaz validare cand este selectat. Aspectul acestei casete se stabileste cu proprietatile: Style, Picture, DownPicture si Dis

Controlul butoane de optiune (Option Button) se folosesste pentru a afisa o lista de optiuni dintre care utiliz alege una singura la un moment dat. Starea controlului este controlata de proprietatea Value, care are valoarea True este selectat si Falsein caz contrar. Controlul de tip Caseta cu lista prezinta doua posibilitati: Caseta cu lista List Box; Caseta combinata Combo Box.

Controlul Casetx cu listx (List Box) afiseaza pe verticala o lista de optiuni din care utilizatorul poate alege un elemente. Sintaxa controlului este: NumeCaseta.AddItem element [,index], in care Nume Caseta numele casetei cu lista;

Element sirul de caractere care trebuie adaugat in lista; index pozitia in care va fi inserat elementul in lista. Daca acesta are valoarea zero, elementul va fi adaugat la iar daca liseste elementul va fi adaugat la sfarsitul listei.

Stergerea unui anumit element din lista se face cu metoda RemoveItem, putand specifica pozitia din lista a elem Stergerea tuturor elementelor din lista se face cu metoda Clear, cu sintaxa: NumeCAseta.Clear

Crearea casetelor cu lista multicoloana si multiselectie se face atribuind valori corespunzatoare proprietatilor C MultiSelect.

Controlul Caseta Combinata (Combo Box) oferx utilizatorului o lista de optiuni reunind caracteristicile unei cu cele ale unei casete cu lista. Caseta combinata are trei stiluri gestionate de proprietatea Style: o o Derulanta DropDown Combo este stilul implicit cand proprietatea Style are valoarea zero;

Simpla Simple Combo este o caseta in care lista de optiuni este intotdeauna vizibila, proprietatea Sty valoarea1;

Lista derulanta DropDown List afiseaza o lista de optiuni cand utilizatorul executa click pe sageata casetei, proprietatea Style avand valoarea 2.

6.Controale de acces la date:

ADO Data creaza rapid legaturi intre controalele asociate datelor(oricare poseda proprietatea D baza de date;

Data List si Data Combo asemanatoare cu controalele standard caseta cu lista si caseta combin

Data Grid afiseaza datele asemanator unei foi de calcul tabelar sub forma de randuri si coloane

Microsoft Hiperarchical Flex Grid (MSHFlexGrid) si Microsoft FlexGrid (MSFlexGrid) v formx de grila datele dintr-un set de inregistrari care provin din una sau mai multe tabele;

Data si Remote Data (date de la distanta) sunt incluse in Visual Basic pentru compatibilitate c vechi. 7.Controale pentru sistemul de fisiere.

DriveListBox - casetx cu listx a unitatilor de disc - ofera o lista derulanta a unitatilor de disc di utilizatorul poate alege; DirListBox - caseta cu lista a directoarelor;

FileListBox - casetx cu listx a fisierelor- afiseaza o lista cu numele fisierelor din cadrul director selectat. 8. Alte controale

1) Controlul de timp - Timer - masoara trecerea timpului si poate fi folosit pentru a crea un even intervale de timp regulate;

2) Controlul Container OLE - permite legarea sau incapsularea intr-o aplicatie Visual Basic a un cadrul unor aplicatii, precum si accesul la facilitatile oricarei aplicatii ce permite OLE;

3) Controlul dialog uzual - Common Dialog - acesta adauga intr-o aplicatie Visual Basic un set d dialog pentru: a) Deschiderea si salvarea fisierelor; b) Selectarea culorilor; c) Selectarea fonturilor; d) Selectarea functiilor de tiparire la imprimanta.

III. VISUAL BASIC PRIN EXEMPLE PRACTICE.


GENERALITATI Formele si controalele Visual Basic sunt obiecte ce au propriile proprietati, metode si evenimente.

Proprietatile sunt atribute pe care le poseda obiectul si care ii descriu modul de prezentare. Name, top, left, hei visible sunt doar cateva din proprietatile ce se intalnesc la marea majoritate a obiectelor.

Metodele stabilesc comportamentul obiectelor, indicand ce pot face ele efectiv. Ele sunt de fapt niste proceduri de cod, care determina obiectul sa faca un anumit lucru.

Evenimentele definesc interactiunea cu mediul extern proiectului (utilizatorul face parte din mediul extern pro

Pentru fiecare eveniment se poate scrie o procedura, denumita 'numeobiect.eveniment' care se va executa in m producerii acelui eveniment.

3.1. Proiectarea unei forme (formular)

Formele (formularele) constitue elementul de la care se incepe construirea unei interfete in Visual Basic, const ferestrele prin intermediul carora utilizatorul va interactiona cu aplicatia. Formele poseda propriile proprietati, evenimente si metode cu ajutorul carora putem controla modul de afisare comportamentul.

Proprietatea Caption stabileste titlul care va fi afisat in bara de titlu a formei; Icon stabileste iconita pentru form si MinButton stabilesc daca forma poate sa fie maximizata sau minimizata; BorderStyle controlam modul de redi

formei; Height si Width stabilesc dimensiunile initiale ale formei; Left si Top stabilesc locatia formei fata de colt ecranului; WindowState stabileste modul in care se va afisa forma la inceput: minimizata, maximizata sau normala stabileste un identificator cu ajutorul caruia putem referi forma respectiva. Pentru a afisa o forma pe ecran se va utiliza metoda Show. Form1.Show(Form1 reprezinta numele formei) Pentru a inlatura o forma de pe ecran (a o ascunde) vom folosi metoda Hide sau functia Unload: Form1.Hide sau Unload Form1

3.2. Buton de Comanda (Command Button).

Un buton de comanda este un control care are o anumita forma, afiseaza o eticheta si permite utilizatorului sa c executia unor actiuni prin activarea lui. Proprietatea Caption ne permite sa afisam un anumit text pe buton, de exemplu :OK, Cancel, Adauga, etc.

Cel mai frecvent eveniment intalnit la acest control si pentru care vom scrie cel mai mult cod este evenimentul ori utilizatorul va face click de mouse pe acest buton evenimentul se va produce si va determina executarea codulu procedura numita : NumeButton_Click(). La click de mouse pe butonul EXIT se doreste terminarea programului. Procedura va arata astfel: Private Sub EXIT_Click () end End Sub

3.3. Controale care manipuleaza texte.


Principalele controale utilizate pentru manipularea textelor sunt:

Eticheta (Label) - este un control grafic folosit pentru afisarea de text pe care utilizatorul nu il poate m care va fi afisat se stabileste prin intermediul proprietatii Caption. Acesta poate fi stabilit din faza de pr poate modifica in timpul executiei prin intermediul unei proceduri asociate.

Caseta de text (TextBox) - este folosit pentru a afisa textul specificat de dumneavoastrx din faza de pr proprietatea Text), sau introdus de la utilizator la executie sau asociat controlului prin program. Daca te afisat pe mai multe linii, proprietatea MultiLine trebuie sa aiba valoarea True.

3.4. Controale care permit alegerea unor optiuni.

3.4.1. Caseta de validare (CheckBox) - ofera utilizatorilor posibilitatea de a alege sau nu o anumitx optiune

Proprietatea Value este utilizatx pentru a determina starea controlului: 1=bifat, 0=nebifat, 2=indisponibil. Cu ajutorul proprietatii Caption putem adauga textul explicativ dorit in dreptul casetei.

3.4.2. Butonul de optiune (Option Button) - pun la dispozitia utilizatorului un set de optiuni, dintre care ace posibilitatea sa marcheze una singura la un moment dat. Selectarea unui buotn implicx automat deselectarea celorla

Butonul de optiune care este mercat are proprietatea Value=True, iar celelalte butoane din grup au proprietatea

Un buton de optiune poate fi dezactivat atribuind proprietatii Enabled valoarea False. Daca este dezactivat, bu apare in timpul executiei estompat.

Aspectul unui buotn de optiune poate fi schimbat prin intermediul proprietatilor Picture, Style, DownPicture s DisablePicture.

3.5. Caseta cu Lista (ListBox).

Caseta cu lista este un control care permite afisarea pe verticala a unei serii de articole din care utilizatorul poat mai multe. Daca numarul de articole depaseste capacitatea de afisare a casetei cu lista proiectata, atunci ei i se vor a bare de derulare verticala, respectiv orizontala.

In mod implicit articolele sunt afisate pe o singura coloana. Acest lucru poate fi schimbat prin modificare propr care poate avea atribuite urmatoarele semnificatii: 0 - caseta de tip lista are o singura coloana, cu derulare pe verticala; 1 - casetx de tip lista are o singura coloana, cu derulare pe orizontala; >1 - caseta de tip lista multicoloana cu derulare pe orizontala.

Daca dorim ca utilizatorul sa poata selecta mai multe articole din lista, atunci trebuie stabilita corespunzator val proprietatii MultiSelect: 0 - nu permite nici o selectie; 1 - permite selectie multipla simpla; 2 - permite selectie multipla extinsa. Proprietatea ListCount a unei liste returneaza numarul de articole din lista.

Proprietatea ListIndex este utilizata pentru a determina numarul articolului selectat. Numerotarea articolelor in Adaugarea unui nou articol in lista se face cu metoda AddIttem, care are sintaxa: Nume caseta. AddIttem element[,index] unde:

- nume caseta - este numele obiectului de tip lista;

- element - este sirul de caractere care trebuie adaugat in lista si care poate fi specificat ca atare, intre '' sau con variabila al carei nume trebuie specificat; - index - precizeaza pozitia din lista unde va fi inserat noul articol. NewIndex permite determinarea indexului ultimului articol din lista. RemoveItem permite stergerea unui articol din lista, avand sintaxa: Nume caseta.RemoveItem index Pentru stergerea tuturor articolelor din lista se utilizeaza metoda Clear : Nume caseta.Clear

3.6. Caseta Combinata (ComboBox)

CAseta combinata este un control care combina caracteristicile controlului caseta cu lista cu cele ale controlulu Existx trei tipuri de casetx combinata, in functie de valoarea proprietatii Style:

caseta derulanta combinata - contine o listx derulanta si o caseta de text. Utilizatorul are posibilitatea lista una sau sa scrie in caseta de text; caseta combinata simpla - contine o caseta de text si o lista nederulanta. Dimensiunea unui asemenea suma dimensiunilor portiunii de editare si a listei;

caseta cu lista derulanta - permite doar selectarea din lista derulanta, portiunea de text fiin neaccesibil

Proprietatea Text controleaza selectia articolelor din lista ComboBox. Aceasta inseamna ca aici vom gasi conti selectat la un moment dat.

3.7. Controale care afiseaza imagini si grafica.


Visual Basic ofera programatorilor patru controale cu ajutorul carora se pot afisa imagini grafice: Caseta cu poze (PictureBox); Imagine (Image); Figura (Shape); Linie (Line).

3.7.1. Caseta cu poze (PictureBox) Este un control utilizat pentru a afisa poze si imagini grafice. In timpul executiei programului, pentru a afisa o

a o schimba se foloseste functia LoadPicture pentru a stabili proprietatea Picture: Picture1.Picture=LoadPicture('Poza.gif')

Daca poza care va fi afisata nu are aceeasi dimensiune cu a controlului, se poate seta proprietatea AutoSize=T controlul va avea aceeasi dimensiune cu poza. Pot fi utilizate, de asemenea, metodele Circle, Line sau Pset pentru a afisa imagini grafice in caseta de poze. 3.7.2. Controlul Imagine (Image)

Daca dorim sa afisam o poza este recomandat sa folosim controlul Imagine. Acest contro incarca poza dar nu v prelucrare a acesteia. Stretch=True este o proprietate pe care o folosim atunci cand dorim ca poza sa aiba aceeasi controlul imagine. Se poate stabili poza care se va afisa cu ajutorul proprietatii Picture. 3.7.3. Figura (Shape) si Linie (Line)

Controalele figura si linie sunt folosite pentru a desena imagini grafice pe suprafata formei. Ele nu poseda nic modificand proprietatea Shape a controlului, acesta poate sa ia forma de cerc, oval, patrat, dreptunghi, patrat cu col sau dreptunghi cu colturi rotunjite. Controlul linie este asemanator cu cel figura, permitand trasarea unei linii.

3.8. Controale care permit manipularea fisierelor.

3.8.1. Controlul DriveListBox (caseta cu lista unitatilor de disc) - acest control se aseamana cu o caseta com contine toate unitatile de disc pe care le recunoaste sistemul. Selectarea unei unitati de disc din lista nu inseamna in automata a unitatii de disc curente. Pentru a schimba efectiv unitatea de disc se utilizeaza proprietatea Drive ca arg instructiunii ChDrive cu sintaxa: ChDrive Drive.Drive Proprietatea Drive permite aflarea unitatii de disc curente.

3.8.2. Controlul DirListBox (caseta cu lista a directoarelor) - in aceasta lista directorul (folderul) curent apa identat fata de cele de nivel ierarhic superior, iar subdirectoarele sale apar identate fata de el. Proprietatea Path stab returneaza calea si directorul curent.

Selectand cu click mouse un director, acesta devine evidentiat, iar daca se selecteaza cu dublu click mouse, atu director curent, astfel ca apare in proprietatea Path iar ListIndex ia valoarea -1. O comanda ChDir de forma: ChDir Dir1.Path stabileste directorul curent de lucru. Proprietatea ListCount returneaza, in acest caz, numarul de subdirectoare curent.

3.8.3. Controlul FileListBox (caseta cu lista a fisierelor) - se aseamana cu o caseta tip lista ce contine fisierel curent selectat si specificat de proprietatea Path in momentul executiei. Proprietatea FileName stabileste sau return

executiei numele fisierului selectat. Pentru a afisa toate fisierele directorului curent se poate utiliza instructiunea: File1.Path=dir1.Path unde File1 este numele implicit dat controlului utilizat. Daca se cere in proprietatea Pattern afisarea fisierelor cu extensia .bas, atunci se da comanda: File1.Pattern='*.bas'

3.9. Casete de dialog predefinite

Un mod simplu de a adauga o caseta de dialog aplicatiei noastre este sa folosim casetele de dialog predefinite. P Visual Basic ne pune la dispozitie doua functii: InputBox care afiseaza o caseta de dialog ca permite prelucrarea datelor de la utilizator; MsgBox care permite afisarea diferitelor informatii, mesaje.

Functia InputBox afiseaza o caseta de dialog modala care cere utilizatorului sx introduca date. Sintaxa: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) unde: - prompt - este un sir de caractere afisat ca mesaj in caseta de dialog. Numarul maxim este de caractere est - title - este un sir de caractere care va fi afisat ca titlu in bara de titlu a casetei de dialog;

- default - este un sir de caractere ce va fi afisat in caseta cu text si care va fi returnat de functie in caz ca ut introduce alte date;

- xpos, ypos - expresii numerice care specifica coordonatele coltului stanga sus al casetei de dialog fata de c al ecranului;

- helpfile - un sir de caractere ce specifica numele fisierului Help ce va fi folosit pentru a oferi asistenta in l de dialog. Functia MsgBox - se poate utiliza pentru a obtine raspunsuri de tipul Da/Nu de la utilizatori sau pentru a afisa de avertizare, erori, atentionari. Sintaxa functiei este: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) unde:

- prompt - este un sir de caractere afisat ca mesaj in caseta de dialog. Numarul maxim de caractere este de 1

- buttons - este o expresie numerica ce reprezinta suma valorilor care specifica numarul si tipul butoanelor a - title - un sir de caractere ce va fi afisat ca titlu in bara de titlu a casetei de dialog;

- helpfile - un sir de caractere ce specifica numele fisierului Help ce va fi folosit pentru a oferi asistenta in l de dialog.

3.10. Alte controale


1. Controlul de timp (TIMER)

Este un control care masoara timpul si ca urmare poate fi folosit pentru a crea un anumit eveniment la intervale regulate. Controlul Timer functioneaza independent de celelalte evenimente.

Proprietatea Enabled controleaza modul de actiune al controlului in sensul de a raspunde sau nu la actiuni ale u poate lua valoarea True, caz in care intra in functiune imediat dupa incarcarea formularului, sau False pentru a sus functionarea controlului.

Proprietatea Interval defineste intervalul de timp care se scurge intre doua evenimente, exprimat in milisecund valori intre 0 si 64767. 2. Controlul container OLE

Acest control permite legarea sau incapsularea intr-o aplicatie Visual Basic a unor obiecte din cadrul altor aplic accesul la aplicatii care permite OLE, cum sunt: MS Word, MS Excel, etc. 3. Controlul dialog uzual (Common Dialog)

Este un control care pune la dispozitia utilizatorului o metoda usoara pentru lucrul cu fisierele. Astfel, el ofera u de dialog pentru operatii cum sunt: deschiderea fisierelor; salvarea fisierelor; selectarea culorilor; selectarea fonturilor; stabilirea functiilor de imprimare.

3.11. Editarea de meniuri

Visual Basic pune la dispozitia programatorilor un editor de meniuri cu ajutorul caruia se pot crea meniuri orica intr-un mod relativ simplu. Activarea editorului se face activand meniul TOOLS si de caolo optiunea Menu Editor (Ctrl/E).

Caption stabileste un sir de caractere care va fi afisat pe ecran, permitand utilizatorului sa selecteze o anumita meniu. Caseta Shortcut permite precizarea tastelor de acces rapide

Checked este o optiune care poate lua valoarea logica de adevar sau fals. Daca are valoarea True va afisa un se inaintea textului stabilit din proprietatea Caption. Enabled stabileste daca meniul va fi activ sau nu. Daca nu este activ, textul de la Caption va fi afisat cu gri. Name stabileste numele obiectului cu ajutorul caruia acesta poate fi identificat atunci cand scriem cod. Shortcut stabileste o combinatie de taste prin apasarea careia se poate alege o anumita optiune din meniu.

Fiecare meniu poate contine submeniunri care la randul lor pot contine alte submeniuri. Exista cinci nivele de s

Pe langa aceste meniuri prezentate care se gasesc in bara de meniuri a aplicatiei, mai exista si meniurile Defilan Acestea 'defileaza' pe ecran in momentul cand se apasa butonul dreapta al mouse-ului.

Pentru a realiza un astfel de meniu trebuie sa creem un meniu ivizibil cu ajutorul editorului de meniuri care sa c un meniu invizibil. Il putem afisa pe ecran folosind metoda PopupMenu a formei.

3.12. Structuri de control


Structura liniara. Poate contine o succesiune de instructiuni de tipul: - instructiune de atribuire; - instructiune de apel de procedura.

Instructiunea cea mai importanta si cea mai frecventa a limbajului este instructiunea de atribuire, avand forma variabila=expresie sau Set variabila=obiect sau Nume_de_functie=expresie Instructiunea specifica faptul ca unei variabile sau unei functii (cea din stanga semnului '=') ii este atribuita o care este specificata printr-o expresie sau printr-un obiect. O expresie consta dintr-o secventa formata din operanzi constante, etc.) si operatori (simboluri operationale).

Instructiunea de apel de procedura specifica activarea (apelul) procedurii al carui nume apare in instructiune s

nume_de_procedura lista_parametri_actuali sau Call nume_de_procedura(lista_parametrii_actuali) Structura alternativa Este descrisa cu ajutorul instructiunilor If Then, If Then Else si Select Case. Structura repetitiva

Permite repetarea in anumite conditii a unei instructiuni sau a unei secvente de instructiuni sau a unei secvent instructiuni. Avem doux tipuri de structuri repetitive:

Structuri repetitive cu contor - descrise de instructiunile For Next si For Each Next care executa acela numar stabilit de ori;

Structuri repetitive cu conditie - descrise de diferitele variante ale instructiunii Do Loop ce indeplines sarcina atata timp cat o conditie existx sau pana cand nu mai exista o conditie.

Exemplu: Do While i<=9 MsgBox 'Este repetarea numarului: '+str(i) Loop

IV. Limbajul de Programare Visual Basic 4.1. Generalitati privind limbajele de programare.
Un limbaj de programare este un ansamblu de simboluri, cuvinte, instructiuni si semnificatii atribuite acestora, descrierea algoritmilor. Limbajul de programare este un mijloc de comunicare intre calculator si programator. Orice limbaj de programare presupune definirea urmatoarelor elemente componente: o o o o o Alfabetul; Vocabularul; Gramatica; Punctuatia; Semantica.

Program sursa - reprezinta programul scris ca text intr-un limbaj de programare, el fiind scris prin intermediul

texte al limbajului de programare sau acceptat de limbajul de programare respectiv (ex.: Notepad).

Compilatorul - este componenta software care realizeaza traducerea programului sursa in cod intern, rezultand program cod obiect.

4.2. Elemente ale limbajului de programare Visual Basic


Setul de caractere

Pentru a scrie instructiuni pe care calculatorul sa le interpreteze si sa le execute in cadrul programului folosim In cadrul limbajului de programare Visual Basic se pot folosi urmatoarele caractere: - Litere mari si mici ala alfabetului limbii romane :A-Z, a-z; - Cifrele sistemului de numerotatie zecimal: 0-9; - Caractere speciale: + - / ^ () [] . , ; : _ ! # $ % etc.; - Caractere speciale perechi, care definesc operatori de comparare: <=, >=, =, <>; - Separatori: spatiu, tab si caracterul Enter. Identificatori

Un identificator este numele dat de programator unui element dintr-un program, care poate fi o variabila, o c definit de utilizator, o enumerare, o procedura, o functie, un obiect, o metoda, o proprietate, un control, o forma sau insusi. Un proiect Visual Basic poate sa contina maxim 32000 identificatori. Comentarii, separatori, impartirea liniei

Comentariile sunt siruri de caractere care au in fata caracterul apostrof ( ' ) si servesc pentru a face textul pro lizibil, pentru a documenta programul.

Daca se doreste se pot scrie mai multe instructiuni pe o singura linie despxrtindu-le cu ajutorul separatorulu instructiuni si declaratii care este caracterul doua puncte ( : ).

Daca o declaratie sau o instructiune este prea mare, atunci ea se poate scrie pe mai multe linii folosind caracte continuatorul de linie, un spatiu urmat de o linie jos ( _).

4.3. Tipuri de date


Tipul unei date defineste multimea de valori pe care le poate lua o variabila si multimea de operatii care pot elementele multimii respective Fiecare tip de data permite o serie de operatii. 4.3.1. Constante

In Visual Basic exista doua tipuri de constante: o o Intrinseci sau definite de sistem; Simbolice sau definite de utilizator (se declarx prin instructiunea Const).

Formatul general al declaratiei de constante este: [Public|Private] Const Nume constanta[As type] = expresie 4.3.2. Variabile Visual Basic

Tipul variabilelor din Visual BAsic sunt: Variable, Byte, Boolean, String, Integer, Long, Single, Double, Cur Object.

Tipul Variant (nedefinit) este un tip special de date care poate contine date numerice, siruri de caractere si d calendaristice, precum si valorile Null (indica faptul ca o variabila nu contine nici o data vlida in mod deliberat) si faptul ca o variabila nu a fost initializata si este egala cu zero).

Declararea unei variabile inseamna practic a defini de la inceput informatiile necesare programului de varia astfel incat programul sa stie cum se numeste, ce tip de date poate stoca, ce zona de memorie trebuie sa-i aloce si u Declararea unei variabile se face astfel: [Public|Private|Dim] NumeVariabila As TipVariabila In Visual Basic principalele tipuri de date sunt: Tipul Byte poate lua valori de la 0 la 255; Tipul Integer are sufixul procent %, ocupa doi octeti si poate lua valori intregi cuprinse in intervalul 32767;

Tipul Long are sugixul &, ocupa 4 octeti si poate lua valori intregi cuprinse in intervalul-2.147.483.6 2.147.483.647; Tipul Single poate memora valori reale in simpla precizie; Tipul Double poate memora valori reale in dubla precizie;

Tipul Curency are ca sufix semnul @, ocupa 8 octeti si poate lua valori reale cuprinse intre -9.22*E l 9.22*E la puterea 14;

Tipul Date nu are suffix, ocupa 8 octeti si poate lua valori cuprinse intre 1 ianuarie 1000 si 31 decemb Tipul String are sufixul $ si ocupa numarul de octeti precizat prin declaratia de tip;

Tipul Boolean memoreaza valori logice de tip adevarat sau fals, da, nu, pornit sau oprit si ocupa doi o

Tipul de date Obiect reprezinta o variabila care poate stoca o valoare sau poate apela obiecte din cadr din alte aplicatii;

Tipul Variant este tipul implicit pentru orice variabila Visual Basic care nu a fost declarata in mod ex

4.3.3. Tipuri de date definite de utilizator.

Aceste tipuri de date sunt compuse dintr-un numar de componente numite campuri. Spre deosebire de tablouri, contine tipuri de date diferite. Sintaxa unui tip definit de utilizatori este urmatoarea: Private|Public Type NumeTip Nume_camp1 As TipData Nume_camp2 As TipData .. Nume_camp3 As TipData End Type 4.3.4. Date de tipul Enumerare.

Tipul de date enumerare defineste o multime ordonata de valori: se enumera un sir de identificatori care desem posibile. Sintaxa instructiunilor de declarare a unui tip enumerare este: Private|Public Enum NumeEnumerare Element1[=valoare] Element2[=valoare] .. Elementn[=valoare] End Enum

4.4. Operatori

Operatorii reprezinta comenzi speciale pentru operatiile ce pot fi executate cu datele din program. Visual Basic dispozitie 4 tipuri de operatori:

a) Operatori Aritmetici: +(adunare), -(scadere), *(inmultire), /(impartire), (impartire intreaga) si MOD (mod b) Operatori Logici - manipuleaza valorile True si False - : AND(conjunctia logica), OR(disjunctia logica),

exclusiva), NOT(negatia logica), EQV(echivalenta logica), IMP(implicatia logica);

c) Operatori de comparare: <(mai mic), <=(mai mic sau egal), >(mai mare), >=(mai mare sau egal), =(egal neegal); d) Operatori de concatenare: +, & realizeaza concatenarea (alipirea) a doua siruri de caractere.

4.5. Operatiuni de Intrare-Iesire


4.5.1. Dialogul standard cu utilizatorul Functia InputBox - afiseaza o caseta de dialog care contine un mesaj, doua butoane (OK si Cancel) si o zona se poata tasta un raspuns. Sintaxa functiei este: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Functia MsgBox - afiseaza un mesaj intr-o caseta de dialog si se asteapta ca utilizatorul sa actioneze unul dintr existente. Functia returneaza o valoare intreaga, indicand astfel care buton a fost actionat. Sintaxa este: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) 4.5.2. Comanda Print Puteti afisa text in interiorul formelor sau al casetelor cu poza cu ajutorul metodei Print. Sintaxa: [obiect.] Print [lista iesiri] [ ]

4.6. Functii incorporate in Visual Basic.


Acestea pot fi grupate in mai multe categorii, astfel:

a). Functii matematice si statice: ABS( ),EXP( ), INT( ), LOG( ), RND( ), SQR( ), ATN( ), SIN( ), COS( ) si TA

b). Functii pentru siruri de caractere: LCASE(sir), UCASE(sir), LTRIM(sir), RTRIM(sir), TRIM(sir), CHR(s LEN(sir), VAL(sir), StrREVERSE(sir), LEFT(sir,Nrc), RIGHT(sir,Nrc), MID(sir,Start [,Nrc]), INSTR([intStart, ] intCompara]); c). Functii de editare: Format, Format_String; d). Functii financiare: DDB, FV, IPMT, IRR, MIRR, NPER, NPV, PMT, PPMT, PV, RATE, SLN; e). Functii pentru conversia intregilor: Int(), CInt();

f). Functii pentru conversia tipului de data: CDbl(arg), CLng(arg), CSng(arg), Cstr(arg), CVar(arg), CCur(arg g). Functii de verificare a tipului de data: IsNumeric(), IsDate(), IsEmpty(), IsNull(), VarType();

h). Functii pentru lucrul cu date calendaristice: DateDiff(), IsDate(expresie), Time(), Date(), Now(), CStr (Tim (Date), CStr (Now); i). Functii pentru lucrul cu fisiere: Seek(NumarFisier), LOF(NumarFisier), EOF(NumarFisier).

4.7. Functii si proceduri utilizator in Visual Basic.

O functie este un modul program care efectueaza o anumita sarcina si returneaza o valoare identificata prin num O procedura eveniment devine activx atunci cand e apelata de utilizator sau de program in mod automat. O procedura functie este o procedura care realizeaza o anumita valoare identificata prin numele functiei. Procedurile tip proprietate pot returna si atribui valori si pot stabili referinte la obiecte. Procedurile sunt blocuri de cod constituite din instructiuni, date locale si alte subprograme.

Procedurile generale sunt blocuri de cod prin care se transmite aplicatiei cum trebuie sa indeplineasca o anum Procedurile eveniment sunt blocuri de cod asociate diferitelor evenimente recunoscute de un obiect si care se momentul in care se produce evenimentul respectiv. Apelarea unei proceduri se face in doua moduri, cu sintaxa: NumeProcedura lista_parametri_actuali sau Call NumeProcedura(lista_parametri_actuali)

4.8. Instructiuni de atribuire.


Atribuirea unei valori la o variabila de memorie se poate efectua prin instructiunile: Let, Set, Lset si Rset.

4.9. instructiuni de terminare sau oprire a programului.

Terminarea executiei unui program sau oprirea temporara a acestuia se pot realiza prin instructiunile: DoEvent Stop.

4.10. Comenzi pentru lucrul cu fisiere.

4.10.1. Deschiderea fisierului - este o operatie care trebuie executata inainte de orice prelucrare a acestuia. P iesire, orice fisier trebuie deschis cu comanda OPEN, cu sintaxa:

OPEN ( numefisier) FOR ( mod de deschidere ) [Access acces] [blocare] AS # numarFisier [Len=lungInreg 4.10.2. Comenzi pentru fisiere aleatorii.

Descrieirea campurilo - ce formeaza inregistrarile unui fisier aleator se face utilizand o declaratie de tip utilizator

TYPE numetip NumeVariabila1 as NumeVariabilak as EDN TYPE Scrierea unei inregistrari intr-un fisier se face cu instructiunea PUT care are urmatoarea sintaxa: PUT #NumeFisier, [NumarInreg] , NumeVariabila Pozitionarea pentru citire pe o inregistrare dintr-un fisiert aleator se face cu instructiunea GET, cu sintaxa: GET [#]numarfisier [, numar] 4.10.3. Inchiderea fisierelor - se realizeaza cu comanda CLOSE, a carei sintaxa este: CLOSE [lista fisiere] sau CLOSE [ # numarFisier1] [, # numarFisier2] [, # numarFisier3] 4.10.4. Comenzi pentru fisiere secventiale. a). Scrierea datelor intr-un fisier secvential se poate face cu comenzile: Print #NumarFisier, lista_expresii sau Write #NumarFisier, lista_expresii b). Citirea informatiilor din fisiere cu acces secvential - se poate face cu ajutorul instructiunilor: Input #NumarFisier, lista_expresii Line Input# NumarFisier, SirCaractere Input$ (NumarOcteti, [#] NumarFisier)

4.11. Grafica si Multimedia in Visual Basic.


Stergerea zonei de desenare.

Pentru a curata zona de desenare folositi metoda Cls care sterge si redeseneaza forma sau controlul pastrand ac fundal.

Stabilirea culorilor. BackColor - culoarea fundalului unui control sau a unei forme; ForeColor - culoarea folositx la desenarea figurilor si textelor; BorderColor - culoarea chenarului; FillColor - culoarea de completare a spatiului liber al unei figuri.

Afisarea textului - in interiorul formelor sau al casetelor cu poza se face cu ajutorul metodei Print, cu sintaxa [obiect.] Print [lista iesiri] [ ]

Desenarea unui dreptunghi se face folosind metoda Line a formei sau a casetei cu imagini, care are urmatoare obiect.Line [Step] (x1,y1) [Step] (x2,y2), [color], [B], [F]

Desenarea cercurilor, a arcelor de cerc si a elipselor - se realizeaza utilizand metoda Circles a formei sau a ca cu sintaxa: Obiect.Circle [Step] (x,y), radius, [color,[start, end, [aspect]]]

Desenarea punctelor intr-o forma sau Intr-o casetx cu poza se realizeaza cu ajutorul metodei Pset, cu sintaxa: obiect.Pset [Step] (x,y), [color]

PARTEA a 2-a Aplicatii. 1) Ceas cu alarma

Private Declare mciExecute Lib 'win (ByVal lpstrComma As Long Dim x

Private Sub Command1_Click()

On Error Resum Form2.Show

End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Label1.Caption = Format(Time, 'short time') End Sub Private Sub Timer2_Timer() If Label1.Caption = Text1.Text Then x = mciExecute('play alarm.wav') MsgBox ' End If End Sub Private Sub Command1_Click() On Error Resume Next Form1.Text1.Text = Form2.Text1.Text + ':' + Form2.Text2.Text Form1.Timer2.Enabled = True Form1.Timer2.Interval = 1000 If Text1.Text > 24 Or Text1.Text < 0 Then Alarma !!! ', vbInformation, 'Alarma'

MsgBox 'Introduceti o valoarea intre 0 si 24', vbExclamation, 'Ora setata incorect !' Text1.Text = '' ElseIf Text2.Text > 59 Or Text2.Text < 0 Then MsgBox 'Introduceti o valoarea intre 0 si 59', vbExclamation, 'Minute setate incorect !' Text2.Text = '' End If Unload Me End Sub Private Sub Form_Load() On Error Resume Next End Sub 2) Calculator

Dim n As Do

Private Sub Command1_Click

On Error Re

If Option1.V Then

Text3.Text = Val(Text1.Text) + Val(Text2.Text)

ElseIf Option True Then

Text3.Text = Val(Text1.Text) Val(Text2.Text)

ElseIf Option3.Value = True Then Text3.Text = Val(Text1.Text) * Val(Text2.Text) ElseIf Option4.Value = True Then If Text2.Text = '0' Then MsgBox 'Nu se poate imparti la 0', vbCritical, 'Eroare' Text2.Text = '' Else Text3.Text = Val(Text1.Text) / Val(Text2.Text) End If ElseIf Option5.Value = True Then Text2.Text = '0' Text2.Enabled = False If Val(Text1.Text) < 0 Then MsgBox 'Nu se poate extrage radical de oridin 2 din numere negative', vbCritical, 'Eroare' Else n = Val(Text1.Text) Text3.Text = Sqr(n) End If End If Text2.Enabled = True End Sub Private Sub Command2_Click() End

End Sub Private Sub Command3_Click() Text1.Text = Empty Text2.Text = Empty Text3.Text = Empty Option1.Value = False Option2.Value = False Option3.Value = False Option4.Value = False Option5.Value = False End Sub Private Sub Option5_Click() Text2.Enabled = False End Sub 3) Conversie valuatara

P Command1_Click() Unload Me End Sub Private Sub Command2_Click() OpDolar.Value = False OpEuro.Value = False OpFranc.Value = False OpYen.Value = False suma = Empty txtDolar = Empty txtEuro = Empty txtFranc = Empty txtYen = Empty End Sub

Private Sub Form_Load() End Sub Private Sub OpDolar_Click() curs = InputBox('Introduceti cursul valutar pentru USD:') txtDolar = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' USD' End Sub Private Sub OpEuro_Click() curs = InputBox('Introduceti cursul valutar pentru Euro:') txtEuro = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Euro' End Sub Private Sub OpFranc_Click() If OpFranc.Enabled = True Then curs = InputBox('Introduceti cursul valutar pentru Francul Francez:') txtFranc = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Franci' End If End Sub Private Sub OpYen_Click() If OpYen.Enabled = True Then curs = InputBox('Introduceti cursul valutar pentru Yenul Japonez:') txtYen = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Yeni' End If End Sub 4) Calcul dobanda

Option Explicit

Dim i As Integer, j As Inte Dim DobandaA As Long, As Long

Private Sub cmdCalcul_Cl

Select Case cmbCont.T

Case cmbCont.Text Then Me.Cls ''curata' forma de text

If cmbCont.Text =

For j = LBound(Record) To UBound(Record) 'incepe de la LBound - limita inferioa vectorului 'RECORD' - pana la UBound - limita superioara a vectorului

If Record(j).TermenDepozit = '1' Then DobandaA = (Val(Record(j).SumaDepusa Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '3' Then DobandaA = (Val(Record(j).SumaDepusa Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '6' Then DobandaA = (Val(Record(j).SumaDepusa Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '12' Then DobandaA = (Val(Record(j).SumaDepus Val(Record(j).TermenDepozit) / 12

SumaActual = Val(Record(j).SumaDepusa) + DobandaA & vbCrLf & _ 'VALOARE DOBANDA = ' & DobandaA & vbCrLf & _

Me.Print '(NR.CONT ' & Record(j).NrCont & ') ' & Record(j).Nume & ' ' & Record

'SUMA ACTUALIZATA = ' & SumaActual & vbCrLf

Next j

Else

If cmbCont.Text <> '' Then

Me.Cls

j = Val(cmbCont.Text)

If Record(j).TermenDepozit = '1' Then DobandaA = (Val(Record(j).SumaDepusa * Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '3' Then DobandaA = (Val(Record(j).SumaDepusa 100) * Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '6' Then DobandaA = (Val(Record(j).SumaDepusa 100) * Val(Record(j).TermenDepozit) / 12

If Record(j).TermenDepozit = '12' Then DobandaA = (Val(Record(j).SumaDepus 100) * Val(Record(j).TermenDepozit) / 12

SumaActual = Val(Record(j).SumaDepusa) + DobandaA & vbCrLf & _ 'VALOARE DOBANDA = ' & DobandaA & vbCrLf & _ 'SUMA ACTUALIZATA = ' & SumaActual

Me.Print '(NR.CONT ' & Record(j).NrCont & ') ' & Record(j).Nume & ' ' & Record

ElseIf i < 0 Then MsgBox 'Nu exista inregistrari', vbInformation

ElseIf i >= 0 Then MsgBox 'Alege NUMAR CONT', vbInformation

End If

End If Case '': Exit Sub

End Select End Sub Private Sub cmdRaport_Click() If i < 0 Then

MsgBox 'Nu exista inregistrari', vbInformation

ElseIf i >= 0 Then MsgBox 'Exista ' & i + 1 & ' inregistrari.', vbInformation

End If

End Sub Private Sub Form_Load() i = -1

End Sub Private Sub cmdIntroducere_Click() i = i + 1 'incrementare numar cont ReDim Preserve Record(i) 'redimensionare marime vector 'RECORD' Record(i).NrCont = i 'atribuire numar cont EnterNume: 'marcaj punct de inceput inregistrare Nume

Record(i).Nume = InputBox('NUME pentru REC.' & i, 'Inregistrare NR. ' & i) 'atribuire nu 'start verificari pentru Nume If Len(Record(i).Nume) = 0 Then 'verificare daca exista nume introdus

If MsgBox('NUME nu poate avea valoare nula.' & vbCrLf & _ 'Va rog introduceti NUME.' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', _

vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then 'Numele nu este in doreste anularea inregistrarii (utilizatorul a executat clic pe Cancel)

GoTo EnterNume 'executia se intoarce la marcajul de inceput inregistrare Nume (utiliz clic pe OK, deci doreste introducerea numelui, implicit executia continua

Else

'utilizatorul a executat clic pe Cancel, el nu mai doreste sa continue inregistrarea i = i - 1 'contorul de contruri se intoarce la starea precedenta

MsgBox 'Inregistrare anulata.' & vbCrLf & _

'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anul Exit Sub 'executia intregii subrutine se opreste

End If

End If EnterPrenume: Record(i).Prenume = InputBox('PRENUME pentru REC.' & i, 'Inregistrare NR. ' & i) If Len(Record(i).Prenume) = 0 Then

If MsgBox('PRENUME nu poate avea valoare nula.' & vbCrLf & _ 'Va rog introduceti PRENUME.' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', _ vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then

GoTo EnterPrenume

Else

i=i-1 MsgBox 'Inregistrare anulata.' & vbCrLf & _

'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anul Exit Sub

End If

End If EnterSumaDepusa:

Record(i).SumaDepusa = InputBox('SUMA DEPUSA pentru REC.' & i & vbCrLf & vbCrL

Record(i).Prenume & ', ' & UCase(Record(i).Nume), 'Inregistrare NR. '

If IsNumeric(Record(i).SumaDepusa) = False Then 'se verifica daca SumaDepusa este valo

If MsgBox('SUMA DEPUSA nu poate avea valoare nula si/sau sa fie un sir de caractere.' _

'Va rog introduceti SUMA DEPUSA (valoare numerica).' & vbCrLf & vbCrLf &

'Pentru a anula inregistrarea curenta clic 'Cancel'', vbExclamation + vbOKCancel invalide') = vbOK Then

GoTo EnterSumaDepusa

Else

i=i-1 MsgBox 'Inregistrare anulata.' & vbCrLf & _

'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anul Exit Sub

End If

End If EnterTermenDepozit:

Record(i).TermenDepozit = InputBox('TERMEN DEPOZIT pentru REC.' & i & vbCrLf & Record(i).Prenume & ', ' & UCase(Record(i).Nume) & vbCrLf & vbCrLf 'TERMENE: (introduceti cifra corespunzatoare)' & vbCrLf & _ '(1) O luna' & vbCrLf & _ '(3) Trei luni' & vbCrLf & _ '(6) Sase luni' & vbCrLf & _ '(12) Doisprezece luni', _ 'Inregistrare NR. ' & i)

If IsNumeric(Record(i).TermenDepozit) = False Or _ Record(i).TermenDepozit <> '1' And _ Record(i).TermenDepozit <> '3' And _ Record(i).TermenDepozit <> '6' And _

Record(i).TermenDepozit <> '12' Then 'se verifica daca TermenDepozit este valoare n daca aceasa este 1, 3, 6 sau 12

If MsgBox('TERMEN DEPOZIT nu poate avea valoare nula si/sau sa fie un sir de car vbCrLf & _ vbCrLf & _

'Va rog introduceti TERMEN DEPOZIT (valoare numerica: 1, 3, 6, 12).' & vb

'Pentru a anula inregistrarea curenta clic 'Cancel'', vbExclamation + vbOKCanc invalide') = vbOK Then

GoTo EnterTermenDepozit Else i=i-1

MsgBox 'Inregistrare anulata.' & vbCrLf & 'Incrementarea NumarCont nemodificat + 1 & ')', , 'Inregistrare Anulata' Exit Sub End If End If cmbCont.Clear For j = LBound(Record) To UBound(Record) cmbCont.AddItem j Next j cmbCont.AddItem '<ALL>'

End Sub

5) Lista de produseDim a As St

Private Sub cmdadauga_Click(

a = InputBox('Introduceti ce do adaugati in lista') If a = '' Then

MsgBox ('introduceti un produs Else lst1.AddItem (a)

End If End Sub Private Sub cmdsterge_Click() lst1.RemoveItem (ListIndex) End Sub Private Sub lst1_Click() lbl3.Caption = lst1.ListIndex + 1 End Sub 6) Analiza unui text preluat dintr-un fisier sau introdus de la tastatura Option Explicit

Dim retry As Integer, maxRetry As Integer Dim strPassword As String Private Sub cmdExit_Click()

Unload Me End Sub Private Sub cmdOK_Click() If Text1 <> strPassword Then retry = retry + 1 If retry >= maxRetry Then

MsgBox 'Parola incorecta.' & vbCrLf & 'S-a depasit numarul de incercari.' & vbCrLf & ' terminata.', vbCritical, 'Parola' Unload Me Else Select Case maxRetry - retry

Case 1: MsgBox 'Parola incorecta.' & vbCrLf & 'Mai aveti o incercare.', vbCritical, 'Pa Case Else 'Parola' End Select End If Else Me.Hide Load Form2 Form2.Show Unload Me End If End Sub

MsgBox 'Parola incorecta.' & vbCrLf & 'Mai aveti ' & maxRetry - retry & ' incercari.',

Private Sub Form_Load() retry = 0 maxRetry = 5 strPassword = 'parola' Label1 = 'Facultatea Informatica Manageriala' & vbCrLf & _ 'Universitatea Romano-Americana' & vbCrLf & vbCrLf & _ 'Descriere proiect: Analiza Text'

End Sub Private Sub Command1_Click() Unload Me End End Sub Private Sub Command2_Click() On Error Resume Next Dim cuv() As String Dim tot() As Long Dim i As Long, j As Long If Len(Text1) <> 0 Then cuv = Split(Trim(Text1), ' ', , vbTextCompare) Form3.Text1.Text = 'Cuvinte gasite: ' & UBound(cuv) + 1 & vbCrLf ReDim tot(UBound(cuv)) 'nr aparitii

For i = 0 To UBound(cuv) For j = 0 To UBound(cuv) If Trim(cuv(i)) = Trim(cuv(j)) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(cuv) For j = i + 1 To UBound(cuv) If Trim(cuv(i)) = Trim(cuv(j)) Then cuv(i) = '' Next Next ' afisare For i = 0 To UBound(cuv) If cuv(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Cuvant: ' & Chr(34) & cuv(i) nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '----------------------' 'afisare propozitii (succesiune de cuvinte urmate de .) Dim prop() As String prop = Split(Text1, '.', , vbTextCompare) Form3.Text1.Text = Form3.Text1.Text & 'Propozitii gasite: ' & UBound(prop) & vbCrLf ReDim tot(UBound(prop)) ' total aparitii For i = 0 To UBound(prop) For j = 0 To UBound(prop)

If Trim(prop(i)) = Trim(prop(j)) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(prop) For j = i + 1 To UBound(prop) If Trim(prop(i)) = Trim(prop(j)) Then prop(i) = '' Next Next ' afisare For i = 0 To UBound(prop)

If prop(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Propozitie: ' & Chr(34) & pro Chr(34) & ' nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '-------------------------' 'afisare frazele (succesiune de cuvinte urmate de . si ,) Dim fraz() As String fraz = Split(Text1, '.', , vbTextCompare) fraz = Split(Text1, ',', , vbTextCompare) Form3.Text1.Text = Form3.Text1.Text & 'frazele gasite: ' & UBound(fraz) + 1 & vbCrLf ReDim tot(UBound(fraz)) ' total aparitii For i = 0 To UBound(fraz) For j = 0 To UBound(fraz) If Trim(fraz(i)) = Trim(fraz(j)) Then tot(i) = tot(i) + 1

Next Next For i = 0 To UBound(fraz) For j = i + 1 To UBound(fraz) If Trim(fraz(i)) = Trim(fraz(j)) Then fraz(i) = '' Next Next ' afisare For i = 0 To UBound(fraz) If fraz(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'frazele: ' & Chr(34) & fraz(i) ' nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '------------------------' Dim lit() As String ReDim lit(Len(Text1)) Form3.Text1.Text = Form3.Text1.Text & 'Litere gasite: ' & UBound(lit) & vbCrLf ReDim tot(UBound(lit)) For i = 0 To UBound(lit) lit(i) = Mid(Text1, i + 1, 1) Next For i = 0 To UBound(lit) For j = 0 To UBound(lit) If lit(i) = lit(j) Then tot(i) = tot(i) + 1 Next

Next For i = 0 To UBound(lit) For j = i + 1 To UBound(lit) If lit(i) = lit(j) Then lit(i) = '' Next Next ' afisare For i = 0 To UBound(lit)

If lit(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Litera: ' & Chr(34) & lit(i) & C aparitii: ' & tot(i) & vbCrLf Next Else Form3.Text1 = 'ERROR: TEXT SURSA INEXISTENT' End If Form3.Show 1, Me End Sub Private Sub Command3_Click() On Error Resume Next Dim fileData As String CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 fileData = Input(LOF(1), 1) Close #1 Text1.Text = fileData

End Sub Private Sub Form_Load() CommonDialog1.Filter = 'Text (*.txt)|*.txt|All files (*.*)|*.*' End Sub Private Sub Form_Resize() On Error Resume Next

If Me.ScaleWidth <= 120 + Command3.Width + 240 + Command2.Width + 120 + Command 120 Then

Me.Width = 120 + Command3.Width + 240 + Command2.Width + 120 + Command1.Wid End If

Text1.Move 120, 120, Me.ScaleWidth - 240, Me.ScaleHeight - 240 - Command1.Height - 12 Command3.Move 120, Text1.Height + 240 Command2.Move Command3.Width + 240, Text1.Height + 240 Command1.Move Me.ScaleWidth - Command1.Width - 120, Text1.Height + 240 End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() End Sub 7) Aplicatie pentru un centru de vanzare si inchiriere carti, reviste, ziare.

Expl

Integ

As S

Form

Strin multu vizita nostr si inc carti,

Time True Text1.Text = 'Centru de inchirieri si vanzare' & vbCrLf & 'carti, reviste, ziare'

Text2.SetFocus k=1 End Sub Private Sub Timer1_Timer() strText = Mid(strText, 2) & Left(strText, 1) Text2.Text = strText k=k+1 If k = 30 Then Form5.Show

End If End Sub

Private bare_instrum w

BaraIns

End Su

Private Clienti_Clic

Clientii

End Su

Private Clienti_inch () ow End Sub Private Sub Command1_Click() End End Sub Private Sub culori_Click() aspect.Show End Sub Private Sub exit_Click() End

ClientiI

End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data' Unload Splash Unload Form5 If parolacon = 'admin' Then setari.Visible = True Else setari.Visible = False End If DB.Close 'Set DB = OpenDatabase(DBDir & DBName) 'Setdata1.recordset= DB.OpenRecordset('table1') End Sub Private Sub generare_app_Click() MsgBox ' Se genereaza Baza de date - numai la incarcarea aplicatiei pentru prima oara' 'Kill ('C:proiectVBdata.mdb') MsgBox 'Recreati Baza de Date ?', vbYesNo If vbYes Then Kill App.Path & 'data.mdb' '1) Creaza baza de date DATA 'Set DB = CreateDatabase(App.Path & 'data', dbLangGeneral, dbEncrypt)

Set DB = CreateDatabase(App.Path & 'data', dbLangGeneral) End If '2) Creaza tabela clienti MsgBox 'Doriti crearea tbelei CLIENTI ?', vbYesNo If vbYes Then

DB.Execute 'CREATE TABLE clienti' & '( nume_pren CHAR (30),legit int, cnp char(13),dat

DB.Execute 'insert into clienti (nume_pren ,legit , cnp , datan) values ('Ionescu Ion',1, '12345 '21/10/1986');' End If '3) Creaza tabela PRODUSE MsgBox 'Doriti crearea tbelei PRODUSE ?', vbYesNo If vbYes Then

DB.Execute 'CREATE TABLE PRODUSE ' & '(tipprod CHAR (7), numeprod CHAR (20), p autedit char(50), evbib char(1), inchiriat char(1), pret INT, cant int, imag char (20));'

DB.Execute 'insert into PRODUSE (tipprod,numeprod,prez,autedit,evbib,inchiriat,pret,cant,i ('ziar', 'ZIARUL', 'cotidian central','tipografia ziarul','0','0',1,1,'ziarul.jpg'); ' End If '4) Creaza tabela miscari MsgBox 'Doriti crearea tbelei MISCARI ?', vbYesNo If vbYes Then DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT, cnp CHAR(13), numeprod CHAR char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );' DB.Execute 'insert into miscari (legit) values ('1'); ' End If '5) Creaza tabela parole

MsgBox 'Doriti crearea tbelei PAROLE ?', vbYesNo If vbYes Then

DB.Execute 'CREATE TABLE parole ' & '(user CHAR (20), parola char (6), drepturi char (13

DB.Execute 'insert into parole (user, parola, drepturi) values ('Admin','admin','administrator') DB.Execute 'insert into parole (user, parola, drepturi) values ('Operator1','op1','operator'); ' DB.Execute 'insert into parole (user, parola, drepturi) values ('Operator2','op2','operator'); ' End If DB.Close MsgBox 'Baza de date OK' End Sub Private Sub imagini_Click() ModificareImagini.Show End Sub Private Sub imprumuturi_Click() Imprumutury.Show End Sub Private Sub Incasari_Click() Inkasari.Show End Sub Private Sub inregistrare_client_Click() InregistrareClient.Show End Sub Private Sub intrari_prod_Click()

produseNoi.Show End Sub Private Sub parola_Click() Parole.Show End Sub Private Sub Penalizari_Click() Penalizarile.Show End Sub Private Sub prod_neret_Click() Prodneret.Show End Sub Private Sub Produse_Click() Prods.Show End Sub Private Sub produse_existente_Click() ProduseExistente.Show End Sub Private Sub produse_inchiriate_Click() ProduseInchiriate.Show End Sub Private Sub produse_returnate_Click() Prodreturn.Show End Sub

Private Sub restantieri_Click() Restantierii.Show End Sub Private Sub text_Click() ModificareText.Show End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If Button.Index = 1 Then Imprumutury.Show End If If Button.Index = 2 Then Vanzari.Show End If If Button.Index = 3 Then InregistrareClient.Show End If If Button.Index = 4 Then ProduseExistente.Show End If If Button.Index = 5 Then Restantierii.Show End If If Button.Index = 6 Then

produseNoi.Show End If End Sub Private Sub tot_pro_client_Click() Totprod.Show End Sub Private Sub Vanzare_Click() Vanzari.Show End Sub

Private Combo1_Cl

DBDir

DBNa 'data.mdb'

Data1.Datab DBDir & D

Data1.Recor 'select nume from produs trim(tipprod Trim(Comb

Data1

Data1.Recor st 'MsgBox Data1.Recordset.RecordCount

If Data1.Recordset.RecordCount > 0 Then Combo2.Clear Data1.Recordset.MoveFirst While Not Data1.Recordset.EOF Combo2.AddItem Data1.Recordset.Fields(0) Data1.Recordset.MoveNext Wend Combo2.Text = Combo2.List(0) End If End Sub Private Sub Combo2_Click() Data1.Recordset.MoveFirst Data1.Recordset.Move Combo2.ListIndex Text4.Text = Data1.Recordset.Fields(1) End Sub Private Sub Command1_Click() InregistrareClient.Show Command2.Visible = True Text1.Visible = False Text2.Visible = False Text3.Visible = False End Sub

Private Sub Command2_Click() Text1.Visible = True Text2.Visible = True Text3.Visible = True Text1.Text = legitg Text2.Text = cnpg Text3.Text = numeg Command2.Visible = False Text5.SetFocus End Sub Private Sub Command3_Click() Data1.Recordset.Close Data1.Database.Close DBDir = App.Path DBName = 'data.mdb' Set DB = OpenDatabase(DBDir & DBName) 'DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT,cnp CHAR(13), numeprod CHAR char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );'

DB.Execute 'insert into miscari (legit,cnp,numeprod,tipprod,pret,datai,dataimp,datares,tipop) & Text1.Text & '', '' _ & Text2.Text & '', '' _ & Combo2.Text & '', '' _ & Combo1.Text & '', '' _ & Text4.Text & '', '' _

& Text6.Text & '', '' _ & Text6.Text & '', '' _ & Text7.Text & '', '1');' End Sub Private Sub Command4_Click() 'DB.Close Unload Me End Sub Private Sub Form_Load() Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Text1.Visible = False Text2.Visible = False Text3.Visible = False Command2.Visible = False Text6.Text = Mid(Now, 1, 10) End Sub Private Sub Text5_LostFocus() Text8.Text = Val(Text5.Text) * Val(Text4.Text) End Sub

Private Combo1_C

DBDir

DBNa 'data.mdb'

Data1.Datab DBDir & D

Data1.Reco 'select nume from produs trim(tipprod Trim(Comb

Data1

Data1.Reco st 'MsgBox Data1.Recordset.RecordCount

If Data1.Recordset.RecordCount > 0 Then Combo2.Clear Data1.Recordset.MoveFirst While Not Data1.Recordset.EOF Combo2.AddItem Data1.Recordset.Fields(0) Data1.Recordset.MoveNext Wend Combo2.Text = Combo2.List(0)

End If End Sub Private Sub Combo2_Click() Data1.Recordset.MoveFirst Data1.Recordset.Move Combo2.ListIndex Text4.Text = Data1.Recordset.Fields(1) End Sub Private Sub Command1_Click() InregistrareClient.Show Command2.Visible = True Text1.Visible = False Text2.Visible = False Text3.Visible = False End Sub Private Sub Command2_Click() Text1.Visible = True Text2.Visible = True Text3.Visible = True Text1.Text = legitg Text2.Text = cnpg Text3.Text = numeg Command2.Visible = False Text5.SetFocus

End Sub Private Sub Command3_Click() Data1.Recordset.Close Data1.Database.Close DBDir = App.Path DBName = 'data.mdb' Set DB = OpenDatabase(DBDir & DBName) MsgBox Text2.Text 'DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT,cnp CHAR(13), numeprod CHAR char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );'

DB.Execute 'insert into miscari (legit,cnp,numeprod,tipprod,pret,datai,dataimp,datares,tipop) & Text1.Text & '', '' _ & Text2.Text & '', '' _ & Combo2.Text & '', '' _ & Combo1.Text & '', '' _ & Text4.Text & '', '' _ & Text6.Text & '', '' _ & Text6.Text & '', '' _ & Text6.Text & '', '0');' End Sub Private Sub Command4_Click() 'DB.Close Unload Me End Sub

Private Sub Form_Load() Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Text1.Visible = False Text2.Visible = False Text3.Visible = False Command2.Visible = False Text6.Text = Mid(Now, 1, 10) End Sub Private Sub Text5_LostFocus() Text8.Text = Val(Text5.Text) * Val(Text4.Text) End Sub

Public

Private Sub Command1_

Data1.Recor

Data1.Datab Unload Me End Sub

Private Sub Command2_

Text1.Text =

Text2.Text =

Text3.Text =

Text4.Text = Command5.Visible = True Command6.Visible = True Command2.Visible = False Command3.Visible = False Command4.Visible = False Label6.Caption = 'ADAUGARE CLIENT' i=1 Text1.SetFocus End Sub Private Sub Command3_Click() Command5.Visible = True

Command6.Visible = True Label6.Caption = 'MODIFICARE CLIENT' i=2 Text1.SetFocus End Sub Private Sub Command4_Click() Command5.Visible = True Command6.Visible = True Label6.Caption = 'STERGE CLIENT' i=3 Command5.Caption = 'OK' Command5.SetFocus End Sub Private Sub Command5_Click() Select Case i Case 1 Data1.Recordset.AddNew Data1.Recordset.Fields(0) = Text1.Text Data1.Recordset.Fields(1) = Text2.Text Data1.Recordset.Fields(2) = Text3.Text Data1.Recordset.Fields(3) = Text4.Text Data1.Recordset.Update Data1.Refresh

Case 2 'MsgBox 'edit' Data1.Recordset.MoveFirst Data1.Recordset.Move ItemIndex - 1 Data1.Recordset.Edit Data1.Recordset.Fields(0) = Text1.Text Data1.Recordset.Fields(1) = Text2.Text Data1.Recordset.Fields(2) = Text3.Text Data1.Recordset.Fields(3) = Text4.Text Data1.Recordset.Update Data1.Refresh Case 3 Data1.Recordset.MoveFirst With Data1.Recordset .Move ItemIndex - 1 .Delete End With Data1.Refresh End Select Command5.Caption = 'Save' Command5.Visible = False Command6.Visible = False Command2.Visible = True

Command3.Visible = True Command4.Visible = True Label6.Caption = 'Inregistrare clienti' Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields(0)) LI.SubItems(1) = Data1.Recordset.Fields(1) LI.SubItems(2) = Data1.Recordset.Fields(2) LI.SubItems(3) = Data1.Recordset.Fields(3) Data1.Recordset.MoveNext Loop Text1.Text = '' Text2.Text = '' Text3.Text = '' Text4.Text = '' Command5.Visible = False Command6.Visible = False Command3.Visible = False Command4.Visible = False i=0 End Sub Private Sub Command6_Click()

Command5.Caption = 'Save' Command5.Visible = False Command6.Visible = False Command2.Visible = True Command3.Visible = False Command4.Visible = False Label6.Caption = 'Inregistrare clienti' End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb'

Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'select * from clienti' 'MsgBox Data1.Recordset.RecordCount Data1.Refresh If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If

Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF

Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields(0)) LI.SubItems(1) = Data1.Recordset.Fields(1) LI.SubItems(2) = Data1.Recordset.Fields(2) LI.SubItems(3) = Data1.Recordset.Fields(3) Data1.Recordset.MoveNext Loop Text1.Text = '' Text2.Text = '' Text3.Text = '' Text4.Text = '' Command5.Visible = False Command6.Visible = False Command3.Visible = False Command4.Visible = False i=0 End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) ItemIndex = ListView1.SelectedItem.Index Text1.Text = ListView1.ListItems.Item(ItemIndex) Text2.Text = ListView1.ListItems(ItemIndex).SubItems(1) Text3.Text = ListView1.ListItems(ItemIndex).SubItems(2) Text4.Text = ListView1.ListItems(ItemIndex).SubItems(3) Command3.Visible = True

Command4.Visible = True legitg = Text2.Text cnpg = Text3.Text numeg = Text1.Text End Sub Public Sub ColumnSort(ListViewControl As ListView, Column As ColumnHeader) With ListViewControl If .SortKey <> Column.Index - 1 Then .SortKey = Column.Index - 1 .SortOrder = lvwAscending Else

If .SortOrder = lvwAscending Then .SortOrder = lvwDescending Else .SortOrder = lvwAscending End If End If .Sorted = -1 End With End Sub Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) Call ColumnSort(ListView1, ColumnHeader)

End Sub

Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName

Data1.RecordSource = 'select numeprod as Denumire_produs,pret,cant from produse order by tipp Data1.Refresh If Data1.Recordset.RecordCount > 0 Then

MSFlexGrid1.Visible = True

End If

End Sub

Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName

Data1.RecordSource = 'select a.legit ,a.cnp ,b.nume_pren ,b.datan from miscari a, clienti b whe b.legit) and (a.tipop = '1') and (a.datares<date())' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then MSFlexGrid1.Visible = True End If End Sub

Private Sub Command1_Click() Dim struser As String Dim strparola As String Dim strdrept As String DBDir = App.Path

DBName = 'data.mdb'

Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'produse' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If

If Option1.Value = True Then

With Data1.Recordset .AddNew

!tipprod = Trim(Combo1.Text) !numeprod = Trim(Text2.Text) !prez = Trim(Text3.Text) !autedit = Text4.Text If Combo2.Text = 'Se inchiriaza' Then !evbib = 1 Else !evbib = 0

End If !inchiriat = 0 !pret = Text1.Text !cant = Text5.Text !imag = numeimg .Update End With Dir1.Visible = False Frame1.Visible = True Label9.Visible = False File1.Visible = False Image1.Visible = False Call Option4_Click End If '================================================== If Option2.Value = True Then

With Data1.Recordset .Move ItemIndex - 1 .Edit !tipprod = Trim(Combo1.Text) !numeprod = Trim(Text2.Text)

!prez = Trim(Text3.Text) !autedit = Text4.Text If Combo2.Text = 'Se inchiriaza' Then !evbib = 1 Else !evbib = 0 End If !inchiriat = 0 !pret = Text1.Text !cant = Text5.Text !imag = numeimg .Update End With Dir1.Visible = False Frame1.Visible = True Label9.Visible = False File1.Visible = False Image1.Visible = False Call Option4_Click End If '============================================= If Option3.Value = True Then struser = Trim(Text1.Text)

strparola = Trim(Text2.Text) strdrept = Trim(Combo1.Text) MsgBox 'Chiar doriti sa stergeti ?', vbYesNo If vbOK Then With Data1.Recordset .Move ItemIndex - 1 .Delete End With End If End If '=========================================== Data1.Refresh Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant')

LI.SubItems(8) = Data1.Recordset.Fields('imag') numeimg = Data1.Recordset.Fields('imag') Data1.Recordset.MoveNext Loop Command1.Visible = False Command3.Visible = False Option4.Value = True

End Sub Private Sub Command2_Click() DB.Close Unload Me End Sub Private Sub Command3_Click() Command1.Visible = False Command3.Visible = False Option4.Value = True Dir1.Visible = False File1.Visible = False Image1.Visible = False Label9.Visible = False Frame1.Visible = True End Sub

Private Sub Dir1_Change() File1.Path = Dir1.Path File1.Pattern = '*.jpg' End Sub Private Sub File1_Click() Command1.Visible = True Command3.Visible = True Dim X As Picture Set X = LoadPicture(File1.Path & '' & File1.FileName) Set Image1.Picture = X numeimg = File1.FileName End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Combo2.Clear Combo2.AddItem 'Se inchiriaza' Combo2.AddItem 'Se vinde'

Combo2.Text = 'Se vinde'

Command1.Visible = False Command3.Visible = False Label9.Visible = False Frame1.Visible = True Option4.Value = True File1.Pattern = '*.jpg' Dir1.Path = App.Path & 'imagini' Dir1.Visible = False File1.Visible = False Image1.Visible = True Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'produse' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) Dim X As Picture ItemIndex = ListView1.SelectedItem.Index

Combo1.Text = ListView1.ListItems.Item(ItemIndex) Text2.Text = ListView1.ListItems(ItemIndex).SubItems(1) Text3.Text = ListView1.ListItems(ItemIndex).SubItems(2) Text4.Text = ListView1.ListItems(ItemIndex).SubItems(3) numeimg = RTrim(ListView1.ListItems(ItemIndex).SubItems(8)) 'Path = 'D:ProiecteVBproiectVBimagini' Path = App.Path + 'imagini'

Set X = LoadPicture(Path & RTrim(ListView1.ListItems(ItemIndex).SubItems(8))) Set Image1.Picture = X Image1.Visible = True Combo2.Text = ListView1.ListItems(ItemIndex).SubItems(4) Text1.Text = ListView1.ListItems(ItemIndex).SubItems(5) Text5.Text = ListView1.ListItems(ItemIndex).SubItems(6)

End Sub Private Sub Option1_Click() If Option1.Value = True Then Dir1.Visible = True File1.Visible = True Image1.Visible = True Label9.Visible = True Frame1.Visible = False

Text2.Text = '' Text3.Text = '' Text1.Text = '' Text5.Text = '' 'Command1.Visible = True Command3.Visible = True DBDir = App.Path DBName = 'data.mdb' Data1.Refresh Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant') LI.SubItems(8) = Data1.Recordset.Fields('imag') Data1.Recordset.MoveNext Loop

Text1.Text = '' Text2.Text = '' End If End Sub Private Sub Option2_Click() 'Data1.Refresh Dir1.Visible = True File1.Visible = True Image1.Visible = True Label9.Visible = True Frame1.Visible = False Command1.Visible = True Command3.Visible = True Call ListView1_ItemClick(ListView1.SelectedItem) ListView1.SetFocus End Sub Private Sub Option3_Click() Data1.Refresh Command1.Visible = True Command3.Visible = True If Option3.Value = True Then Call ListView1_ItemClick(ListView1.SelectedItem) ListView1.SetFocus

End If End Sub Private Sub Option4_Click() Set DB = OpenDatabase(DBDir & DBName) Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'produse' Data1.Refresh If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If 'Data1.Recordset.MoveFirst

ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant') LI.SubItems(8) = Data1.Recordset.Fields('imag')

Data1.Recordset.MoveNext Loop Call ListView1_ItemClick(ListView1.SelectedItem) End Sub 8) Aplicatie pentru o casa de schimb valutar.

Private Function calc_stoc(smb As String) As Double Dim valoare(100) As Integer, stoc_disp(100) As Double nr_bancnote = 0 fiss2 = FreeFile Open 'stocuri/stoc_' + smb + '.dat' For Input As fiss2 While Not EOF(fiss2) nr_bancnote = nr_bancnote + 1 Input #fiss2, valoare(nr_bancnote), stoc_disp(nr_bancnote)

Wend Close fiss2 total = 0 For i = 1 To nr_bancnote total = total + valoare(i) * stoc_disp(i) Next i calc_stoc = total End Function Private Sub incarca_valute() Dim q_simbol(100) As String, q_vanzare(100) As Double, q_cumparare(100) As Double

Combo1.Clear Combo1.AddItem '-' k=0 fiss = FreeFile Open 'valute.dat' For Input As fiss While Not EOF(fiss) k=k+1 Input #fiss, q_simbol(k), q_vanzare(k), q_cumparare(k) Wend Close fiss

max_val = 0

For w = 1 To k stc = calc_stoc(q_simbol(w)) If stc > 0 Then max_val = max_val + 1 simbol(max_val) = q_simbol(w) vanzare(max_val) = q_vanzare(w) cumparare(max_val) = q_cumparare(w) stoc(max_val) = stc Combo1.AddItem UCase(simbol(max_val)) End If Next w Combo1.ListIndex = 0

End Sub Private Sub admin_stocuri_Click() main.Enabled = False pass_stocuri.Visible = True End Sub Private Sub admin_utilizatori_Click() main.Enabled = False pass_users.Visible = True End Sub Private Sub Combo1_Click()

If Combo1.ListIndex = 0 Then lbl_cantitate.Caption = '-' lbl_cumparare.Caption = '-' lbl_vanzare.Caption = '-' Else lbl_cantitate.Caption = Str(stoc(Combo1.ListIndex)) lbl_vanzare.Caption = Str(vanzare(Combo1.ListIndex)) lbl_cumparare.Caption = Str(cumparare(Combo1.ListIndex)) End If End Sub Private Sub Command1_Click() permis = True If Combo1.ListCount = 1 Then x = MsgBox('Nu exista nici un tip de valuta disponibila pt tranzactii!', vbInformation, 'Info') Exit Sub End If If Combo1.ListIndex = 0 Then x = MsgBox('Nu ati selectat nici un tip de valuta!', vbExclamation, 'Atentie') permis = False Else If Trim(Text3.Text) = '' Then x = MsgBox('Nu ati introdus nici o cantitate', vbExclamation, 'Atentie') permis = False

End If End If If permis Then If Option1.Value = True Then opp = 'cumparata' Else opp = 'vanduta' End If If (opp = 'vanduta') And (Val(Text3.Text) > Val(lbl_cantitate)) Then

x = MsgBox('Cantitatea selectata pt vanzare este mai mare decat stocul!', vbExclamation, 'A Else List1.AddItem Trim(Text3.Text) + ' ' + Trim(Combo1.Text) + ' / ' + opp End If End If End Sub Private Sub Command2_Click() If List1.ListCount > 0 Then idx = List1.ListIndex If idx < 0 Then x = MsgBox('Nu ati selectat nici o tranzactie!', vbInformation, 'Info') Else x = MsgBox('Confirmati stergerea tranzactiei selectate?', vbYesNo, 'Confirmare') If x = 6 Then

List1.RemoveItem idx End If End If Else x = MsgBox('Cosul de tranzactii este gol!', vbInformation, 'Info') End If End Sub Private Sub Command3_Click() If List1.ListCount > 0 Then x = MsgBox('Confirmati golirea cosului?', vbYesNo, 'Confirmare') If x = 6 Then List1.Clear Else x = MsgBox('Cosul de tranzactii este gol!', vbInformation, 'Info') End If End Sub Private Sub Command4_Click() Unload Me End Sub Private Sub Command5_Click() If List1.ListCount = 0 Then x = MsgBox('Nu exista nici o tranzactie in cos!', vbInformation, 'Info') Else If Trim(Text1.Text) = '' Then

x = MsgBox('Nu ati completat numele cumparatorului!', vbExclamation, 'Atentie') Else If Trim(Text2.Text) = '' Then x = MsgBox('Nu ati completat CNP-ul cumparatorului!', vbExclamation, 'Atentie') Else List1.Clear Text1.Text = '' Text2.Text = '' Text3.Text = '' x = MsgBox('Tranzactii incheiate cu succes!', vbInformation, 'Info') End If End If End If End Sub Private Sub Form_Load() Call incarca_valute End Sub

Dim t_simbol(100) As String, t_vanzare(100) As Double, t_cumparare(100) As Double

Dim valoare(100) As Integer, stoc_disp(100) As Double, vall(1000) As Integer, seria(1000) As Str Dim permis As Boolean, nr_bancnote As Integer, total As Double, tot_hartii As Integer Private Sub refresh_tip_banc() Combo2.Clear total = 0 For i = 1 To nr_bancnote total = total + valoare(i) * stoc_disp(i) Combo2.AddItem valoare(i) Next i Combo2.ListIndex = 0

End Sub Private Sub refresh_bancnote() List1.Clear For i = 1 To tot_hartii If (Trim(Combo2.Text) = vall(i)) Then List1.AddItem seria(i) End If Next i End Sub Private Function refresh_tot(smb As String) nr_bancnote = 0 fiss2 = FreeFile Open 'stocuri/stoc_' + smb + '.dat' For Input As fiss2 While Not EOF(fiss2) nr_bancnote = nr_bancnote + 1 Input #fiss2, valoare(nr_bancnote), stoc_disp(nr_bancnote) Wend Close fiss2

Call refresh_tip_banc

Label13.Caption = Combo1.Text Label9.Caption = Combo1.Text

Label10.Caption = Combo1.Text

Label14.Caption = Str(total)

tot_hartii = 0 fiss3 = FreeFile Open 'bancnote/banc_' + smb + '.dat' For Input As fiss3 While Not EOF(fiss3) tot_hartii = tot_hartii + 1 Input #fiss3, vall(tot_hartii), seria(tot_hartii) Wend Close fiss3

Call refresh_bancnote End Function Private Sub resetcolor(coll As String) Label1.ForeColor = coll Label2.ForeColor = coll Label3.ForeColor = coll Label5.ForeColor = coll Label6.ForeColor = coll End Sub Private Sub verifica(q As Integer, coll2 As String)

permis = True resetcolor (&H0&) Select Case q Case 1: exista = False For i = 0 To Combo2.ListCount - 1 If Combo2.List(i) = Trim(Text3.Text) Then exista = True Exit For End If Next i If (Trim(Text3.Text) = '') Or (exista = True) Then Label5.ForeColor = coll2 permis = False End If If Trim(Text4.Text) = '' Then Label6.ForeColor = coll2 permis = False End If Case 2: If Trim(Text2.Text) = '' Then Label4.ForeColor = coll2 permis = False

End If If Trim(Text3.Text) = '' Then Label5.ForeColor = coll2 permis = False End If End Select End Sub Private Sub incarca()

Combo1.Clear

tot_val = 0 fiss = FreeFile Open 'valute.dat' For Input As fiss While Not EOF(fiss) tot_val = tot_val + 1 Input #fiss, t_simbol(tot_val), t_vanzare(tot_val), t_cumparare(tot_val) Combo1.AddItem UCase(t_simbol(tot_val)) Wend Close fiss

Combo1.ListIndex = 0

End Sub Private Sub Combo1_Click() If modif = True Then

x = MsgBox('Au fost efectuate modificari ce nu au fost salvate! Continuati?', vbYesNo, 'Conf If x = 6 Then modif = False Text1.Text = t_vanzare(Combo1.ListIndex + 1) Text2.Text = t_cumparare(Combo1.ListIndex + 1) Call refresh_tot(Combo1.Text) End If Else Text1.Text = t_vanzare(Combo1.ListIndex + 1) Text2.Text = t_cumparare(Combo1.ListIndex + 1) Call refresh_tot(Combo1.Text) End If End Sub Private Sub Combo2_Click() Label11.Caption = stoc_disp(Combo2.ListIndex + 1) Call refresh_bancnote End Sub Private Sub Command1_Click() Call verifica(1, &HFF&) If permis = False Then

x = MsgBox('Exista erori in completarea unor campuri obligatorii!', vbExclamation, 'Atentie') Else x = MsgBox('Confirmati adaugarea tipului de moneda?', vbYesNo, 'Confirmare') If x = 6 Then If valoare(1) > Val(Trim(Text3.Text)) Then nr_bancnote = nr_bancnote + 1 For j = nr_bancnote To 2 valoare(j) = valoare(j - 1) stoc_disp(j) = stoc_disp(j - 1) Next j valoare(1) = Val(Trim(Text3.Text)) stoc_disp(1) = Val(Trim(Text4.Text)) Else If valoare(nr_bancnote) < Val(Trim(Text3.Text)) Then nr_bancnote = nr_bancnote + 1 valoare(nr_bancnote) = Val(Trim(Text3.Text)) stoc_disp(nr_bancnote) = Val(Trim(Text4.Text)) Else For i = 1 To nr_bancnote - 1

If valoare(i) < Val(Trim(Text3.Text)) And (valoare(i + 1) > Val(Trim(Text3.Text)) nr_bancnote = nr_bancnote + 1 For j = nr_bancnote To i + 1 valoare(j) = valoare(j - 1)

stoc_disp(j) = stoc_disp(j - 1) Next j valoare(i + 1) = Val(Trim(Text3.Text)) stoc_disp(i + 1) = Val(Trim(Text4.Text)) Exit For End If Next i End If End If Text3.Text = '' modif = True Call refresh_tip_banc x = MsgBox('Tipul de bancnota a fost adaugat cu succes!', vbInformation, 'Info') End If End If End Sub Private Sub Command2_Click() Text6.Text = '' For i = 1 To 10 Randomize Text6.Text = Trim(Text6.Text) + Trim(Str(Int(Rnd * 9))) Next i Randomize

x = Int(Rnd * Combo2.ListCount) Text5.Text = Combo2.List(x)

Command3.Enabled = True End Sub Private Sub Command3_Click() x = MsgBox('Confirmati adaugarea bancnotei in stoc?', vbYesNo, 'Confirmare') If x = 6 Then For i = 0 To Combo2.ListCount - 1 If Combo2.List(i) = Val(Trim(Text5.Text)) Then stoc_disp(i + 1) = stoc_disp(i + 1) + 1 End If Next i tot_hartii = tot_hartii + 1 vall(tot_hartii) = Val(Trim(Text5.Text)) seria(tot_hartii) = Trim(Text6.Text) Call refresh_bancnote modif = True x = MsgBox('Bancnota a fost adaugata cu succes!', vbInformation, 'Info') End If End Sub Private Sub Command4_Click() main.Enabled = True

Unload stocuri End Sub Private Sub Command5_Click() x = MsgBox('Confirmati salvarea modificarilor?', vbYesNo, 'Confirmare') If x = 6 Then t_vanzare(Combo1.ListIndex + 1) = Trim(Text1.Text) t_cumparare(Combo1.ListIndex + 1) = Trim(Text2.Text)

fiss = FreeFile Open 'valute.dat' For Output As fiss For i = 1 To Combo1.ListCount Write #fiss, t_simbol(i), t_vanzare(i), t_cumparare(i) Next i Close fiss

fiss = FreeFile Open 'stocuri/stoc_' + LCase(Trim(Combo1.Text)) + '.dat' For Output As fiss For i = 1 To Combo2.ListCount Write #fiss, valoare(i), stoc_disp(i) Next i Close fiss

fiss = FreeFile

Open 'bancnote/banc_' + LCase(Trim(Combo1.Text)) + '.dat' For Output As fiss For i = 1 To tot_hartii Write #fiss, vall(i), seria(i) Next i Close fiss modif = False x = MsgBox('Modificarile au fost salvate!', vbInformation, 'Info')

End If End Sub Private Sub Command6_Click() If List1.ListCount > 0 Then idx = List1.ListIndex If idx < 0 Then x = MsgBox('Nu ati selectat nici o bancnota!', vbInformation, 'Info') Else x = MsgBox('Confirmati stergerea bancnotei selectate?', vbYesNo, 'Confirmare') If x = 6 Then For i = 1 To tot_hartii If seria(i) = Trim(List1.List(idx)) Then For j = 0 To Combo2.ListCount - 1 If Combo2.List(j) = vall(i) Then stoc_disp(j + 1) = stoc_disp(j + 1) - 1

End If Next j For j = i To tot_hartii - 1 seria(j) = seria(j + 1) vall(j) = vall(j + 1) Next j tot_hartii = tot_hartii - 1 End If Next i List1.RemoveItem idx End If End If Else x = MsgBox('Stocul de bancnote cu aceasta valoare este nul!', vbInformation, 'Info') End If End Sub Private Sub Form_Load() modif = False Call incarca Call refresh_tot(Combo1.Text) End Sub

Dim user(100), parola(100) As String Dim nr_usr As Integer, permis As Integer Private Sub resetcolor(coll As String) Label3.ForeColor = coll Label4.ForeColor = coll Label5.ForeColor = coll End Sub Private Sub verifica(q As Integer) coll2 = &HFF& permis = True resetcolor (&H0&) Select Case q Case 1: If Trim(Text1.Text) = '' Then Label3.ForeColor = coll2 permis = False End If

Case 2: If Trim(Text2.Text) = '' Then Label4.ForeColor = coll2 permis = False End If If Trim(Text3.Text) = '' Then Label5.ForeColor = coll2 permis = False End If End Select End Sub Private Sub scriere() fiss = FreeFile Open 'users.dat' For Output As fiss For i = 1 To nr_usr Write #fiss, user(i), parola(i) Next i Close fiss End Sub Private Sub refres() nr_usr = 0 fiss = FreeFile Open 'users.dat' For Input As fiss

While Not EOF(fiss) nr_usr = nr_usr + 1 Input #fiss, user(nr_usr), parola(nr_usr) Wend Close fiss Combo1.Clear For i = 1 To nr_usr Combo1.AddItem user(i) Next i Combo1.ListIndex = 0 Label2.Caption = parola(1) End Sub Private Sub Combo1_Click() idx = Combo1.ListIndex Label2.Caption = parola(idx + 1) End Sub Private Sub Command1_Click() Call verifica(1) If permis = False Then x = MsgBox('Exista erori in completarea campurilor obligatorii!', vbExclamation, 'Atentie') Else a = MsgBox('Sigur schimbati parola?', vbYesNo, 'Confirmnare') If a = 6 Then

ix = Combo1.ListIndex + 1 parola(ix) = Trim(Text1.Text) Call scriere x = MsgBox('Parola afost schimbata cu succes!', vbInformation, 'Info') End If Text1.Text = '' Call refres End If End Sub Private Sub Command2_Click() ussr = Trim(Text2.Text) psss = Trim(Text3.Text) Call verifica(2) If permis = False Then x = MsgBox('Exista erori in completarea campurilor obligatorii!', vbExclamation, 'Atentie') Else x = MsgBox('Confirmati adaugarea utilizatorului?', vbYesNo, 'Confirmare') If x = 6 Then fiss = FreeFile Open 'users.dat' For Append As fiss Write #fiss, ussr, psss Close fiss x = MsgBox('Utilizatorul a fost adaugat!', vbInformation, 'Info')

Text2.Text = '' Text3.Text = '' Call refres End If End If End Sub Private Sub Command3_Click() main.Enabled = True Unload users End Sub Private Sub Command4_Click() Maxx = Combo1.ListCount If Maxx > 1 Then a = MsgBox('Sigur stergeti utilizatorul?', vbYesNo, 'Confirmnare') If a = 6 Then ix = Combo1.ListIndex + 1 For i = ix To nr_usr - 1 user(i) = user(i + 1) parola(i) = parola(i + 1) Next i nr_usr = nr_usr - 1 Call scriere x = MsgBox('Utilizatorul a fost sters!', vbInformation, 'Info')

Call refres End If Else x = MsgBox('Trebuie sa existe cel putin un utilizator!', vbInformation, 'Info') End If End Sub Private Sub Form_Load() Call refres End Sub
DISTRIBUIE DOCUMENTUL Distribuie URL

http://w w w .scrigroup.com/calculatoare/PROIECT-BAZELE-PROGRAM

Adauga cod HTML in site Vizualizari: 580 Importanta: Comenteaza documentul: Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta Creaza cont nou
<a

Termeni si conditii de utilizare | Contact SCRIGROUP 2013. All rights reserved price.ro Forum > Help > Aplicaii i Internet > Am nevoie de-o indrumare in Excel... : Am nevoie de-o indrumare in Excel... berti As vrea sa fac o mica baza de date in Excel... si nu stiu cum. Problema se da in felu urmator: intr-o celula am un numar, cand introduc in numarul celula vreau ca numaru sa fie salvat pe un alt sheet (sa zicem Sheet2). In momentul in care schimb din nou numarul din celula respectiva, vreau ca noul numar sa fie salvat in urmatoarea celula din Sheet2. Adica sa formeze un fel de History... Am tot cautat o comanda, care sa-mi permita sa scriu intr-o celula "remotely", imi imaginez ceva de genu WriteTo(B2,"Test")... exista asa ceva? Sau cum s-ar putea face altfel? Sper ca m-am facut inteles :) Multumesc anticipat de raspunsuri ! AdrianB1 Ca sa scrii o valoare intr-o celula comanda este: Worksheets(i).Cells(j, k).Value = val berti Adrian, asta-i comanda de VB? Din pacate nu ma prea descurc cu V Basicu', alta solutie nu exista? Ma refer la vreo comanda "clasica" de Excel! liviutza

ok, tu ai nevoeid e putin Visual Basic pentru cestia asta. ma cam ocup, asa ca as incerca sa-ti trimit un fisier care sa te ajute. PM me ca sa ti-l dau pe mail, te rog. Altminteri, ca idee, e simplu: cand schimbi celula, valoarea e pusa in prima casuta libera din zona urmatoare. doar ca excelul nu poate face asta implicit, ci trebuie sa folosesti o boaba de programare. berti Cu ajutorul lui Liviutza am rezolvat problema. Thanks again! :) Intr-adevar merge doar cu Visual Basic, dar nu-i asa de greu pe cat pare. Worm Am si eu o intrebare, daca tot suntem la capitolul Excel: exista posibilitatea ca atunci cand sterg o celula dintr-un rand, celulele imediat urmatoare sa "umple" golul lasat (sa se mute automat la stanga)? Muchos gracias! cata181 Asta vrei? Worm Nu, vreau ca atunci cand sterg continutul unei celule, toate celulele din dreapta sa se mute automat spre stanga (sa nu ramana celule goale la inceputul randului). liviutza in principiu cred ca se poate realiza si asta cu un pic de visual basic, dar e profund nerecomandat. daca ai formule cumva in document, stergerea unor celule si mutarea altora poate face ca formulele sa se duca in balarii. daca poti sa-mi detaliezi problema pe care o ai e rezolvat, poate am vreo idee. Worm Ideea era sa nu stea datele "imprastiate"; este vorba de un fisier care se modifica destul de des pe parcursul unei zile si se sterg in mod aleator diverse celule iar ceea ce vreau eu ar avea rolul de a usura cautarea (stiu ca exista si Ctrl+F dar ar fi mult mai simplu asa cum vreau eu). Thanx! liviutza depinde care e structura datelor, in cazul asta. Cel mai ok ar fi sa stergi o coloana intreaga sau un rand intreg. In principiu, intr-o lista oarecare datele de pe orica rand pot fi sterse independent de datele din celelalte randuri. Asta daca datele din lista sunt asezate cat de cat ordonat. In conditiile in care ai un tabel cu linii si coloane in care stergi din cand in cand ceva e sters aleatoriu e cam bulibaseala din start. poate ar trebui sa schimbati sistemul in ceva cu linii si coloane in care sa poata fi sterse, cum ziceam, linii sau coloane fara sa afecteze restul datelor. In felul asta ai putea executa "compactarea" datelor la intervale stabilite de timp. ar merge chiar si pe modelul vostru, dar nu poate sa-l faca decat cineva care stie toate "regulile". pUnKRoCK Salutari. Cer si eu ajutorul expertilor in Excel. Atasez o imagine din care reiese cam ce vreau. Nu stiu insa daca e realizabil, insa incercarea moarte nu are, nu?! :yeap: Multumiri. :jap: Thor1983 Se poate.Vezi ca la Formula ai si expresii conditionale,tot ce iti trebuie.La Insert Function/Logical ai IF. Daca nu te descurci revino cu amanunte. pUnKRoCK Aaa... nu ma descurc! :damn: PS: Precizez ca valorile din tabelele din dreapta sint constante!

liviutza cred ca e o chestie de sintaxa. daca ai de pus doua conditii, ar trebui scris cam asa daca a=1 si a=2 se scrie =if(and(a=1,a-2),da,nu) Thor1983 Uite ca merge. In casuta G1 scrii: =IF(AND((D1="Da"),(F1=L1)),(M1*E1)) PS:vezi ca te ajuta cand construiesti sheet-ul sa folosesti chiar indicele casutei respective,nu un indice ales de tine. De ex. pt. M1 foloseste M1 sau m1,in loc de k1. Spor la treaba1 pUnKRoCK Ma gindesc daca pot introduce in cimpul L un mic "meniu" cu sageata de unde sa pot selecta valorile corespunzatoare lui j1-j10 (la fel, intr-un cimp separat acelasi lucru pentru m1-m9 si p1-p4), iar in cimpul D1 o sageata de unde sa pot alege intre da si nu. Mai exact sa dau click pe sageata jos in D1, selectez da, apoi in cimpul L1 selectez j3 si in cimpul M sa apara automat valoarea k3 (sau l3 in cazul alegerii lui nu). Nu stiu daca m-am facut inteles, dar j1-j10 iau valoarea k1-k10 daca D=da, si l1-l10 daca D=nu. Similar pentru m1-m9 si p1-p4! Ajutati un om la nevoie, fac cinste daca iese! Promit. :jap: :thumbs: pUnKRoCK Thor1983, merge !!! Mersi!!! :thumbs: Intrebare: merge sa pun intr-un cimp 2 sau mai multe formule? Daca da, cum fac? pUnKRoCK Ok, am descoperit! Se pot pune mai multe functii intr-o celula cu + intre formule cu precizarea ca in formula lui Thor1983 trebuiesc inlocuite virgulele cu ";" Mersi Thor1983, sint dator de cinste. Cind vrei tu, unde vrei tu! Promisiunea e promisiune! :jap: psihologu E sigur realizabil, dar nu e prea clar :) Uite un screenshot si fisierul Excel. Am rezolvat treaba numai pentru celula g (restul sunt asemanatoare si te descurci, cred). "g=K1*e" - nu prea vad cum inmultesti stringul "da" cu o lta valoare (numerica), asa ca am pus eu peste tot numere. Daca "da" inseamna 1 sau alte chestii d-astea, aia e altceva. Oricum se face la fel. Esenta rezolvarii e un if in if. Deci celula notata de tine g va respecta o logica trivalenta (daca nu sunt indeplinite conditiile din cele 2 ramuri - ce contin AND, va aparea "st nedef"). "C:\book.gif" Functia din celula g1 arata cam asa: "=IF(AND(D1="da";F1=J1);K1*E1;IF(AND(D1="nu";F1=M1);N1*E1;"st. nedef."))" Foarte intuitiva interfata, daca m-am chinuit sa inserez o imagine de pe hard si se vede ce a iesit. Cum naiba se foloseste insert image???

Roger (...)cu precizarea ca in formula lui Thor1983 trebuiesc inlocuite virgulele cu ";" De fapt conteaz ce setare ai n Control Panel - Regional Settings - Numbers - LIST SEPARATOR pUnKRoCK Dupa indicatiile lui Thor1983 pina la urma functia din G arata cam asa: =IF(AND((H8="da");(J8=150));(I8*0,029))+IF(AND((H8="da");(J8=125));(I8*0,02))+IF(A ND((H8="da");(J8=100));(I8*0,012))+IF(AND((H8="da");(J8=80));(I8*0,008))+IF(AND((H 8="da");(J8=65));(I8*0,005))+IF(AND((H8="da");(J8=60));(I8*0,004))+IF(AND((H8="da"); (J8=50));(I8*0,003))+IF(AND((H8="da");(J8=35));(I8*0,001))+IF(AND((H8="da");(J8=25)) ;(I8*0,0005))+IF(AND((H8="nu");(J8=250));(I8*0,049))+IF(AND((H8="nu");(J8=200));(I8* 0,031))+IF(AND((H8="nu");(J8=150));(I8*0,018))+IF(AND((H8="nu");(J8=125));(I8*0,012 ))+IF(AND((H8="nu");(J8=100));(I8*0,008))+IF(AND((H8="nu");(J8=80));(I8*0,005))+IF( AND((H8="nu");(J8=65));(I8*0,003))+IF(AND((H8="nu");(J8=50));(I8*0,002))+IF(AND(( H8="nu");(J8=40));(I8*0,001))+IF(AND((H8="nu");(J8=25));(I8*0,0005)) Si functioneaza cum trebuie! Mersi guys! :thumbs: liviutza ca idee, ar fi de retinut faptul ca pe doua calculatoare diferite formulele nu arata la fel. adica o formula luata de aici cu copy / paste s-ar ptuea sa nu functioneze. asta din cauza ca Excel-ul foloseste ca separatori intre variabilele functiilor ceea ce e definit pe fiecare calculator in parte - de exmplu, virgula in cazul meu, punct si virgula in cazul lui pUnKRoCK. pera Salutare. Am si eu nevoie de o indrumare in Excel. Mai exact as vrea ca in coloana w din sheet2 sa imi apara textul "X" daca in sheet1 A2=da, "Y" daca B2=da sau "Q" daca si A2 si B2 sint da. Nu ma intereseaza situatia in care si A2 si B2 sint "nu". Multumesc. :jap: miahi =IF(AND(Sheet1!A2="da";Sheet1!B2="da");"Q";IF(Sheet1!A2="da";"X";IF(Sheet1!B2="da ";"Y";"don't care"))) pera Wow, ce prompt. Mersi man, merge !!! I-am dat un copy/paste si e ok, acum incerc sa inteleg logica, ca sa pot folosi metoda si cu alta ocazie. :jap: pera Salutare. As mai avea o intrebare legata de Excel si anume: Am un fisier (sa-i spunem o baza de date) cu diverse informatii (tabelul de sus din imagine) si vreau ca atunci cind in alt fisier introduc date doar in primele doua coloane, restul informatiilor sa fie extrase automat din tabelul baza de date. Este posibil acest lucru? Daca da, v-as fi recunoscator daca mi-ati explica cum se face. :jap: Roger Folosete funcia VLOOKUP. Scuze c nu pot da mai multe detalii, eram doar n trecere... WS

Vezi arhiva atasata. Sa le pui in acelasi director. Nu am reusit sa fac cautare dupa ambele campuri asa ca am facut cautare numai dupa bloc. Datele sunt in Book1, iar actualizarea se face automat in Book2. Cand deschizi Book2 s-ar putea sa te intrebe daca vrei sa faci update la link-uri. Sa dai click pe Update. Succes!!! pera Multumiri pentru raspunsuri. :thumbs: WS, ma intereseaza totusi sa caut dupa ambele cimpuri (cartier si bloc), pentru ca pot exista mai multe blocuri cu acelasi nume si pot aparea incurcaturi. Inca ceva: am un fisier care are aproximativ 60 de sheet-uri. Cum fac sa unesc continutul tuturora intr-un singur sheet? Mersi. :jap: Worm Exista o conditionare (sau o alta modalitate) ca data mai veche cu 3 luni decat data curenta sa se coloreze intr-o culoare iar data mai veche de 4 luni decat data curenta sa se coloreze in alta culoare? Daca era vorba de cifre, era simplu dar faza cu data m-a cam bagat in ceata... Multumesc! WS Eu aici am facut ca data mai veche de 3 luni sa se coloreze in rosu, iar ce nu indeplineste conditia sa se coloreze in albastru. In principiu am calculat in doua coloane diferite diferenta dintre luna curenta si cea din celula, respectiv diferenta dintre anul curent ci cel din celula si apoi am comparat valorile respective cu 3. Pe modelul asta poti adauga cate conditii doresti. Daca vrei poti sa ascunzi cele doua coloane. Consulta si fisierul atasat. Succes! miahi Merg i concatenate formulele ntr-o formul mare de conditional formatting, nu trebuie neaprat puse n alte coloane. WS Asa este, insa mi s-a parut mai explicit asa. liviutza nici macar nu e nevoie sa le concatenezi. cel mai simplu e sa utilizezi conditional formatiing, care acepta pana la 3 conditii exprimate separat. Se ajunge in meniul repsctiv cu fromattinf / conditional formatting, si e extrem de util pentru a modifica aspectul unor celule in functie de continutul lor sau de alte conditi. miahi Pi conditional formatting se subnelege, e mai mult de munc s faci colorarea prin scripting. Worm Va multumesc tuturor pentru raspunsuri dar... inca n-am reusit. Si nu pot sa-mi dau seama de ce nu merge! Am incercat cu solutia data de WS; din cate vad doar o conditionare merge. O intrebare: la inceputul formulei pentru cea de-a doua conditionare folosesc tot =AND? Am incercat asa si nu merge; si am incercat si cu =OR. Multumesc inca odata! WS Ia vezi acum, ar trebui sa mearga. Problema la tine e ca datele mai vechi de 4 luni sunt mai vechi si decat 3 luni, adica sa

indeplineste si prima conditie. Acum datele mai vechi de 4 luni se coloreaza in rosu, cele mai vechi decat 3 luni in verde, iar celelalte raman neschimbate. Sper ca am fost suficient de clar. Succes!!! Worm WS, te rog, ataseaza-mi din nou fisierul, ca n-am reusit sa-l deschid pe cel de mai sus. Si spune-mi ce bere bei :beer: WS Uite arhiva refacuta. Initial am arhivat cu WinZIP pe maximum (enhanced deflate). Acum am arhivat pe normal, asa ca ar trebui sa mearga. :thumbs: Worm Multumesc, WS! Bogdan Am si eu nevoie de o indrumare. Problema e in felul urmator: Am un fisier produse.xls in care am Numele produselor si pretul lor. Acum am un nou fisier (de ex. test.xls) inca care vreau sa afisez informatii (pretul) din produse.xls; acest lucru l-am facut cu functia VLOOKUP (dupa ce am citit pe forum :D ). Acum vine problema, toate is bune si frumoase in fisierul test.xls, daca introduci corect numele produsului. Cum se poate face ca numele produsului care il scrii intr-ul cell din test.xls, sa il poti selecta dintr-o lista de produse formata din produsele din fisierul produse.xls, fara sa deschizi fisierul produse.xls. (ceva asemanator ca atunci cand intr-o coloana din excel cand incepi sa scrii iti apare cuvantul selectat care incepe cu literele care le-ai scris) sper ca am fost inteles. Va multumesc liviutza o solutie, din mai multe posibile: ai nevoie undeva, in test.xls, de linkuri la lista de produse din produse.xls. lista din test.xls se poate afla undeva intr-o coloana ascunsa, sa zicem B, iar tabelul "real" poate incepe de pe coloana D. dupa asta se foloseste functia Data Validation. se afla in Data / Data validation, si permite ca in celulele la care se aplica sa poti introduce doar anumite valori, mai precis valori din lista ta de produse. de asemenea, permite ca in celulele selectate sa apara si optiunea de "scroll" si sa se vada lista valorilor care pot fi introduse in celula. PM me, daca ai intrebari suplimentare, si bafta! Worm Intr-un fisier Excel am Auto Filter; cum fac ca in drop-down list sa imi apara mai mult de 1000 de referinte? Thanx! WS In helpul Excel-ului scrie: Only the first 1000 unique entries in a list appear when you click the arrow. Worm

Mda, eram in viteza si n-am mai stat sa ma uit in help, nu mai zic de Google, ... O bila neagra (ca rosii nu mai avem) pentru Excel... Multumesc, WS! Worm Si inca o intrebare: nu reusesc sa trag cu VLOOKUP intr-un tabel centralizator date din 3 tabele; stiu ca se poate dar nu stiu exact ce semn trebuie sa pun in formula (imi trage datele dintr-un singur tabel). Scuze ca va plictisesc cu maruntisuri dar din help-ul Excel-ului n-am reusit sa aflu (si bineinteles ca iar n-am timp de sapat). Thanx again! liviutza s-ar putea sa gresesc, dar nu cred ca se poate.cu o singura utilizare de vlookup. daca ai 3 tabele de forma: a1:b20 c1:d20 f1:g20 nu poti utilzia un singur vlookup ca sa tragi date din cele trei tabele. merge o formula mai lunga care sa faca asta. daca vrei, da-mi un excel cu exemplu pe personala si incerc sa ti-l rezolv. AdrianB1 Deja din ntrebrile pe care le pui cred c se simte nevoia unui Access. Excel nu e fcut s spele i rufe, nu are "anti-calcar" :) Serios, am vzut montri n Excel (40 MB, zeci de foi i zeci de mii de linii i formule), dar ia mpuca pe cei care le-au creat. E un monument de contraproductivitate, deja o mic aplicaie (de-aia sugeram Access) se impune. Worm Va multumesc! Pana la urma n-a mai fost nevoie dar o sa incerc sa gasesc o solutie, pana la urma, ca mi-a ramas pe creieras :) Eram in viteza si nu m-am mai gandit si la tabele pivot sau la alte solutii. Multumesc inca odata! pera Salutare. Revin si eu cu problema expusa aici (http://www.price.ro/forum/showpost.php?p=175965&postcount=27). am reusit cu functia VLOOKUP, insa aceasta creeaza confuzii atunci cind gaseste mai multe blocuri cu acelasi nume. Cum fac totusi ca VLOOKUP sa caute dupa doua cimpuri (cartier si bloc, in modelul atasat) ? Sau, exista o alta modalitate de a extrage informatii dintr-un tabel gen baza de date, conditionind interogarea de cautarea pe doua coloane din baza de date? (ca sa fiu mai clar, ceva de genul : Daca A= "Dr.Taberei" si B = "bloc A32" => adresa, etaje, scari...) Multumiri. liviutza cel mai usor e sa faci o concatenare. incearca fisierul atasat, ar trebui sa te ajute. pera

Liviutza, multumesc mult, este exact ceea ce aveam nevoie. :thumbs: Esti tare, ramin dator.:jap: pera Revin cu o intrebare. Cum pot uni continutul a doua celule, in alta celula (a treia) ? Exemplu: presupunind ca celula A1 contine textul "mar", iar celula B1 contine textul "par", doresc ca celula C1 sa contina textul "mar par". Multumesc. :jap: Roger = A1 & B1 & - ca sa le trateze ca stringuri. o s-i ias mrpr, poi insera un spaiu: =A1 & " " & B1 ca s-i ias "mr pr". pera Multumesc mult. :jap: Ma gindisem ca pot folosi exemplul dat de liviutza cu concatenarea, dar nu stiam cum sa pun pauza intre cele doua cuvinte. :D psystem Salutare. Ca sa nu mai deschid un alt thread, am sa vin si eu cu o intrebare(problema): Se da un banal tabel pe 2 coloane. Pe ambele coloane se regasesc numere. Se realizeaza un grafic te tip smoth-line avand ca sursa acest tabel(pe axa x o coloana, iar pe y cealalta). Este ceva de genul f(x)=y. Intrebarea vine in felul urmator: cum reusesc sa identific, pentru o valoare a lui x(sau y) corespondentul sau pe cealalta axa(in mod clasic se traseaza o perpendiculara pe grafic iar acolo unde intalneste graficul se trage o alta perpendiculara pe axa rezultand un punct). Asta as dori sa fac insa nu stiu cum, am incercat si cu trand insa acesta nu trece exact peste graficul meu. Cum sa fac? liviutza din pacate, nu e atat de simplu pe cat pare. In primul rand, acel tip de grafic foloseste doar o serie de valori, sa zicem din coloana B. Valorile din coloana A nu sunt "puse"pe grafic, ci constituie "categorii", asa ca valoarea lor nu are importanta. Verticala se poate face automat. In "format data series/options" se bifeaza "drop lines". ai putea obtine ceva de genul pozei pe care am incercat sa o atasez. Cu orizontalele nu am reusit sa dau de o solutie. Cred ca nu se poate rezolva decat prin programare (si inca destul de multa) sau manual. Oricum, pe un grafic cu mai multe valori diferite ar ajunge sa arate cam rau, pentru ca orizontalele s-ar intersecta. psystem Verticala se poate face automat. In "format data series/options" se bifeaza "drop lines". ai putea obtine ceva de genul pozei pe care am incercat sa o atasez. Cu orizontalele nu am reusit sa dau de o solutie. Cred ca nu se poate rezolva decat prin programare (si inca destul de multa) sau manual. Oricum, pe un grafic cu mai multe valori diferite ar ajunge sa arate cam rau, pentru ca orizontalele s-ar intersecta. Asta am incercat si eu insa nu este relevant. Dupa cum ai spus si tu, imi trebuie si orizontalele. Eu ma gandeam ca poate ar fi o functie sau ceva de genu' insa nu am gasit nimic. In concluzie, nu prea ar exista vre-o solutie buit-in, nu?

liviutza ar exista o solutie extrem de complicata, dar realizabila - 3 grafice puse unul peste altul graficul tau si 2 cu bars - unul orizontal si unul vertical. calcculand ca lumea unde trebuie sa fie suprapuse cele 3, se poate face. si se poate utiliza oricand dupa aceea, deci nu e nevoie sa refaci operatiunea complexa de fiecare data. psystem Aha, dupa cum ai spus si tu, destul de complicat insa cine stie, poate chair o sa mearga. Insa cum faci sa suprapui cele 3 grafice si sa se mai si vada ceva sub ele? liviutza Pot sa le dai area = none, adica transparente. In felul asta, daca le pui unul peste altul se vad doar barele, liniile, etc. Am incercat, si nu prea iese.. tot barele orizontale sunt problema. psystem Am inteles! Se pare ca o sa raman la solutia clasica cu rigla si creionul. :D Asta e! Multumesc oricum pentru promptitudine si pentru raspunsuri. lache1 ALTA PROBLEMA EXCEL SAU ACCESS: documentul excel contine sheeturi structurate ca denumire dupa literele alfabetului: sheet "a","b","c", etc in ele sunt date referitoare la firme a caror denumire incepe cu literele a, b, c, etc capul de tabel de pe fiecare sheet e acelasi: FIRMA, SOLD INITIAL, FACTURA , DATA ,SUMA, SCADENTA, ETC se vrea un query in access dupa data scadentei(<=) ai inteles pana acum? am reusit sa fac link la fiecare sheet in access dar trebuie sa fac query dupa multiple tabele. partea proasta este ca nu stiu cum sa fac asta avand tabele cu aceeasi aceeasi structura a datelor union query rezolva asta? daca da cum? dupa query trebuie ca tabelul de raspuns sa aiba un singur cap de tabel (cel de mai sus) si toate firmele cu datele lor una sub alta. ar mai ajuta daca as putea sa fac "merge" la toate sheeturile in unul singur(eventual daca se poate updata singur ar fi super )

HELP lache1 hai ca m-am prins oarecum am facut un test cu 2 sheeturi la care am facut link in access si apoi query la ele astfel: SELECT * FROM a, b WHERE (((a.SCADENTA)<=[data scadentei]) And ((b.SCADENTA)<=[data scadentei]));

problema este ca mi-a multiplicat datele de cel putin 4 ori unele, altele dee mai multe ori. ce am gresit? liviutza ma tem ca nu pot sa te ajut cu partea de access, dar in excel lucrurile ar fi fost simplissime in felul urmator: varianta 1: a - concatenarea sheet-urilor intr-unul singur b - pe rezultat, aplicat un advanced filter / unique items varianta 2 a - aplicat advanced filter / unique items in fiecare sheet b - concatenat rezultatele cred ca 2-ul e mai rapid, sau macar mai antrenant :jap: lache1 si cum concatenezi concret? vreau exemplu de comanda liviutza nu exista o "comanda". e nevoie de putin VBA. sau le lipesti de mana (copy / paste de 25 de ori intr-un sheet nou), daca trebuie facut o singura data. dupa care concatenarea e ca in discutia de mai sus... rissaria Sal all, am o problema: am o coloana cu o gramada de linii, propozitiile din linii sunt in engleza si trebuie sa le traduc. Vreau sa fac o functie ce sa-mi gaseasca propozitiile unice si sa mi le puna intr-o multime, sa traduc cuvintele si sa fac un if si sa pun traducerea ptr fiecarea in linia corespunzatoare. Ma poate ajuta cineva? Preturi Memorii vBulletin v3.0.0 Gamma, Copyright 2000-2013, Jelsoft Enterprises Ltd.

Stefan Arhip
despre computere

Home Despre Curriculum Evolutie Intrebari Linux Index

Home > IT, Scripting > Crearea unui script in VBScript

Crearea unui script in VBScript


2010/03/18 stedanarh Leave a comment Go to comments n articolul de ieri, am prezentat cum se poate realiza un script n Batch. Automatizarea poate fi realizat i prin scrierea de scripturi n VBScript. Pentru aceasta, vom folosi Notepad++ selectnd din meniul Language opiunea V VB:

Cel mai simplu program const n afiarea unui mesaj prin comanda msgBox, urmat de textul ce se dorete a se afia:

Vom salva fiierul cu un nume sugestiv i cu extensia VBS:

n momentul lansrii acestui script (prin dublu click pe fiierul salvat) vom vedea mesajul pe care am dorit a fi afiat:

Pentru a se introduce de ctre utilizator a unei valori, se folosete comanda inputBox, urmat (n cea mai simpl form de utilizare) de un text ncadrat de ghilimele i paranteze. Pentru

reafiarea valorii introduse, vom folosi variabila n pe care o vom utiliza n comanda msgBox.

Scriptul n desfurare, n momentul introducerii datelor:

Scriptul n desfurare, n momentul afirii datelor:

Prezint un alt treilea script simplu, care cuprinde o bucl decizional. Se cere a se introduce o opiune (1 sau 2). Dac se alege 1 sau 2, se va afia mesajul Ai ales 1, sau Ai ales 2. Se poate vedea cum se folosete procedura if condiie then opiune1 else opiune2 end if

Funcia vbcrlf se folosete pentru a se scrie pe mai multe rnduri un text. Se folosete naintea unui rnd nou.

Scriptul lansat, la momentul introducerii datelor:

Scriptul lansat, la momentul afirii datelor:

Prezint un alt script uor de neles, care realizeaz suma numerelor naturale cuprinse ntr-un interval (101 .. 102). Se declar variabilele utilizate (i, x, m1, m2). Se iniializeaz acestea (m1 = 101, m2 = 200, x = 0). Se efectueaz calculele printr-o bucl repetitiv indexat dup i (for i = m1 to m2). Se afieaz rezultatul prin procedura msgBox, folosindu-se pentru transformarea din numr n

text a procedurii formatNumber.

La lansarea scriptului, acesta realizeaz calculele i afieaz rezultatul, 15050:

Prezint un script pentru lansarea n execuie a unor programe. Se folosete wScript.createObject i wshShell.run. Am folosit i procedura decizional multipl Select

Case:

n momentul rulrii scriptului, apare o prim fereastra de dialog care ntreab dac se dorete lansarea programului Paint. Dac rspundem pozitiv, aceasta se va deschide.

Dac vom rspunde negativ la fereastra de dialog precedent, se va afia cea de-a doua fereastr de dialog care ntreab dac se dorete a se lansa programul Calculator.

Dac rspundem pozitiv, se va lansa n execuie aplicaia Calculator instalat:

About these ads

Categories: IT, Scripting Comments (2) Trackbacks (0) Leave a comment Trackback

1. cosmin 2011/05/14 at 8:52 pm | #1 Reply | Quote Salut, as avea nevoie de un exemplu simplu de joc in vbs, stiu ca cer cam mult insa nu gasesc niciunde si am timp limitat:((( trebuie sa predau o tema insa nu stiu cum sa incep, am facut doar exemple simple si cand ma gandesc la un joc, oricat de simplu habar nam cum sa incep.:((((:(((

stedanarh 2011/05/16 at 4:06 am | #2

Reply | Quote Am incercat ceva aici: http://stedanarh.wordpress.com/2011/05/16

Leave a Reply

Cum se dezinstaleaza corect un program (UnLocker) Crearea unui script in Batch RSS feed

Email Subscription
Enter your email address to subscribe to this blog and receive notifications of new posts by email. Join 28 other followers

Blog Stats

441,110 hits

Search for: March 2010 M T W T F S S Feb Apr 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Categories

IT (353) o Dezinstalare (3) o Instalare (59) o Linux (135) o Prezentare (14) o Programe (41) o Scripting (35) o Trucuri (36) o Utilizare (24)

Archives

January 2013 (2) July 2012 (2) June 2012 (1) May 2012 (3) April 2012 (1) March 2012 (1) November 2011 (2) October 2011 (6) September 2011 (1) August 2011 (2) July 2011 (1) June 2011 (1) May 2011 (1) January 2011 (1) December 2010 (23) November 2010 (19) October 2010 (31) September 2010 (30) August 2010 (30) July 2010 (30) June 2010 (29) May 2010 (30) April 2010 (29) March 2010 (30) February 2010 (28) January 2010 (19)

Recent Posts

Generarea listei cu aplicatiile instalate printr-un VBScript ce foloseste WMI Aflarea sistemului de operare al unui computer din retea prin VBScript si WMI Instalarea Telnet in Windows 7 Double Commander manager de fisiere open-source, cross-platform, 64bit jEdit editor texte open-source, cross-platform, 64bit Zapping TV fara sunet Activarea hibernarii in Windows 7 din linia de comanda Crearea unui stick USB bootabil cu mai multe sisteme de operare Star Wars in Command Prompt

Martisor electronic Mesaj cu timer in VBScript Verificarea valabilitatii ITP-ului Identificarea tipului unei variabile in VBScript Detectarea denumirilor proprietatilor extinse ale fisierelor Detectarea proprietatilor extinse ale fisierelor

Recent Comments
corina chirita on Program de mecanizare (managem Daniel on Program de mecanizare (managem skerhetsdrrar stoc on Instalarea FreeCommander proiectewebdesign on Instalarea FreeCommander florin on Program de mecanizare (managem

Top Clicks

stedanarh.files.wordpress stedanarh.files.wordpress stedanarh.files.wordpress izarc.org db.tt/81CaEln3

Meta

Register Log in Entries RSS Comments RSS Blog at WordPress.com.

Top WordPress Blog at WordPress.com. The INove Theme. Follow

Follow Stefan Arhip


Get every new post delivered to your Inbox. Join 28 other followers Powered by WordPress.com

Inserarea macrocomenzilor (Create) cu Visual Basic Editor n Office Word 2003


by gmp Meniu: Tools -> Macro -> Macros Tools -> Macro -> Visual Basic Editor Combinaie de taste: Alt+F8 Alt+F11 Crearea, editarea, executarea i depanarea codului VBA (Visual Basic for Applications) n aplicaiile Microsoft Office se fac cu programul Microsoft Visual Basic Editor. Dei nu se restrng ca domeniu de utilizare la aplicaiile Office (Word, Excel, Powerpoint, Access, Outlook), proiectele VBA pot fi executate doar din cadrul unor astfel de aplicaii, ceea ce poate constitui un dezavantaj. Numeroasele componente disponibile permit ns crearea unor aplicaii complexe, mediul de dezvoltare fiind asemntor pachetului Microsoft Visual Studio (Visual Basic, Visual C). Interfaa editorului este complex, pe lng componentele grafice uzuale (meniuri, bare de butoane) existnd cteva ferestre asociate unor activiti specifice:

View Code (vizualizare i editare cod; tasta F7) View Object (vizualizare obiect; combinaia de taste Shift+F7) Object Browser (tasta F2) Immediate Window (executarea imediat a unei linii de cod; combinaia de taste Ctrl+G) Locals Window (vizualizarea variabilelor locale i a valorilor acestora) Watch Window (afieaz valorile unor expresii specificate, fiind util n depanarea programelor) Project Explorer (combinaia de taste Ctrl+R) Properties Window (vizualizarea proprietilor unui obiect; tasta F4)

Un proiect (Project) poate conine:


proceduri: acestea pot fi generale (neasociate vreunui obiect sau eveniment) sau de eveniment (se execut automat cnd are loc un anumit eveniment); formulare: permit crearea unor formulare complexe cu casete, butoane i alte elemente crora li se pot asocia diverse aciuni la diverse evenimente; module; clase. No Comments - Leave a comment

Bine ai venit pe pagina Colegiului Tehnic Craiova!

Lecia 7
Folosirea controalelor i a codului respectiv
Pn acum totul ar trebui s fie limpede. Nu este greu, deoarece am vorbit mai mult despre ce se poate face, cum se poate, de ce se poate face... . Ei... acum e timpul sa lucrm mai mult. Pn i titlul leciei ne d impresia unei probleme mai dificile. Dar dac pn acum totul este clar, atunci aa va fi i n continuare. Deci s ncepem... Am aflat ce sunt controalele, am aflat unde sunt ele, tim de unde le putem modifica proprietile, acum iat cum le folosim ntr-un program. Pentru a vedea cel mai bine cum se folosesc i cum arat ele ntr-o aplicaie, deschidei proiectul controls.vbp (extensia VBP vine de la Visual Basic Project). Dup ce ai ncrcat programul, pornii-l (F5), vedei ce face, dup care oprii-l din butoanele proprii.

Aplicaia "Folosirea controalelor si a codului respectiv"

Aceast aplicaie are rolul de a v nva cum se folosesc controalele principale i cum se introduce codul surs (adic programul de fapt care se foloseste de obiecte).

n Visual Basic, n fereastra Project alegei "frmMain (main.frm)". O s vedei c imediat se modific i coninutul ferestrei Properties, care acum va lua numele de "Properties frmMain". Dar de fapt, cine este "frmMain" ? Pi, dac ai citit cu atenie n lecia anterioar i ai aflat c fiecare control are i un prefix, pe lng nume, nseamn ca tii c este vorba despre Forma principal. Deci, n fereastra Properties, putei modifica proprietile Formei, cum ar fi: textul care apare n Bara Titlu a aplicaiei (aceast variabil poart numele de caption); ce butoane de control s apar n dreapta (minimize, maximize, etc); ce iconi s apar n stnga n Bara Titlu, etc... Dup cum v-ai i imaginat, exact acelai lucru putei face i la celelalte obiecte plasate pe forma principal. Apsai cu click-stnga pe butonul "Buton de comanda" i vei vedea cum se schimb coninutul ferestrei Properties. Folosii-v imaginaia pentru a v gndi la cte "aspecte" i putei da Formelor din programul dumneavoastr. Acest lucru se poate realiza prin modificarea proprietilor obiectelor Formei i a celor din Form. Puteti realiza o form dup placul dumneavoastr: cu mouse-ul putei mri Forma (tragei de colturi), i putei schimba culoarea de fundal, etc... Dar gata cu "design"-ul, e timpul pentru codul din program! Comanda SHOW; HIDE

Foarte bine. Acum tii c Proiectul pe care l avei "deschis" n Visual Basic este compus din 7 Forme. V-ai ntrebat cum se deschide o form doar de la apsarea unui buton ? De fapt, trebuie s v ntrebai care sunt comenzile care fac aceast "deschidere". Pi, s vedem! S lum, spre exemplu butonul "Buton de comanda" care face deschiderea spre fereastra cu acelai nume. n program, fereastra care se deschide poart numele de frmButton. Pentru a edita codul din interiorul butonului acesta dai un dublu-click pe butonul acesta. Vi s-a deschis fereastra "Controls frmMain (Code)". n primele rnduri din aceast fereastr vedei scris urmtorul cod:

Private Sub cmdButtons_Click() frmButton.Show End Sub

Prima i ultima linie de mai sus, sunt "comenzi" de subrutin, care nu trebuie sa v preocupe prea mult. Practic ele v ajut s tii de unde pn unde putei "manevra" prin intermediul comenzilor un obiect. Linia din mijloc este comanda care deschide fereastra frmButton. De ce are aceast linie un "nume" aa ciudat ? De ce mai are i un punct n el ? Pi, nu este de loc ciudat, ci doar trebuie s ntelegei cum funcioneaz. "frmButton" nseamn c ceea ce va urma dup punct sunt comenzi adresate obiectului cu acest nume. "." Dup punct urmeaz comanda adresat obiectului respectiv. "Show" nseamn n englez "apari". Deci, simplu... mai pe romnete "Forma cu numele frmButton apari!". Si cu asta basta. Dac, de exemplu am vrea s facem un buton pe care dac apsm, s facem s dispar o fereastr care este deja pe ecran, am scrie urmtorul cod: [numele formei].Hide (hide de la ascunde)

Comanda END

Dac vedei codul butonului "Exit" vei vedea scris: End Aceasta este comanda care face, ca n orice moment programul s se nchid.

Comanda (Ciclul) IF-THEN ; ELSE-END IF

Daca suntei familiarizat cu mediul de lucru BASIC, vei ntelege foarte repede modul de "funcionare" al acestei comenzi. n programul demonstrativ, observai cum funcioneaz "Caseta de control". Acum, vedei cum funcioneaz codul programului. Pentru aceasta vedei codul nscris n frmCheck (pentru a vedea codul pentru o form ntreag, dublu-click-stnga pe Form). Pentru cei care nu stiu, comanda IF-THEN este de fapt un analizator de posibile valori ale unei variabile, de exemplu. n limbaj normal, s-ar traduce i exemplifica astfel:

Dac Butonul1 este apsat Atunci iei din program Dac Butonul1 este altfel dect apsat Atunci f beep Sau mai simplu de scris: Dac Butonul1 = apsat Atunci Iei Sau (altceva) 'in caz de altceva Fa Beep ncheie Dac

(important de reinut n acest proces este ordinea n care sunt introduse posibilitile) Cum s-ar traduce cuvintele ngrosate de mai sus Pi, Dac si Atunci sunt If si respectiv Then iar Sau si ncheie Dac le-ati ghicit! Sunt Else si End If. De neles, cu siguran ai neles la ce ajut. Daca nu, nu v facei probleme, vei nelege i mai bine din codul concret din programul demonstrativ: If chkBold.Value = 1 Then txtDisplay.FontBold = True Else txtDisplay.FontBold = False End If

V lsm pe dumneavoastr s nelegeti mai bine cum funcioneaz acest ciclu n programul demonstrativ.

Comanda (Instructiunea) REM sau '

n fapt, aceasta nu este chiar o comand, sau o insructiune, ci este o simpl remarc. De la cuvntul remarc, pornete i abreviaia REM dup care urmeaz un comentariu n program.

Form1.Hide' Deschide Forma1 sau Rem Deschide Forma1

Variabile, setri de valori si proprietti n cod

Cu toii tim ce sunt variabilele i tim c toate obiectele din programele realizate cu Visual Basic au anumite proprieti, sau anumite valori pentru variabilele lor. tim c acestea se pot schimba foarte uor din fereastra Properties n momentul crerii programului. Dar cum se modific aceste proprieti n timpul rulrii unui program ? Simplu: se scrie numele integral al obiectului + [.] + variabila + [=] + valoare

exemplu: shpCard.Left = -500 Deci, obiectul cu numele shpCard va trebui s i modifice proprietatea Left din cea actual n -500. Un alt exemplu este modificarea unei etichete: lblDisplay.Caption = "Aceasta este ce va apare aici" Ct despre variabilele proprii pe care vrei s vi le definii aici modul de lucru este i mai usor. Scriei numele variabilei pe care vreti s o creai + [=] + valoarea sa. Ca s nu v ncurcai, putei folosi i comanda LET nainte de ir. Exemplu:

LET elevi = 40 Sau elevi = 40

Variabile predefinite:

Dup cum ai vzut mai sus variabilele sunt n mare parte definite de dumneavoastr. Adic simplu, unui cuvnt cheie i atribuiti un numr, un sir de caractere, etc... Ei bine, mai exist i Variabile predefinite. Acestea au tot un nume cheie i tot o valoare. Dar care nu este atribuit de dumneavoastr. Astfel de variabile sunt: variabila timp (TIME, care "tie" ora, DATE, cu data, locaia mouse-ului, etc...). Despre aceste valori putei afla mai multe folosindu-v de help-ul din Visual Basic.

DAO (Data Access Objects) (I)


Lucrul cu obiectele DAO Proiectarea bazelor de date n Microsoft Access Stabilire unei referine la biblioteca de obiecte DAO Referirea obiectelor DAO n Visual Basic Adugarea de noi obiecte DAO la o colecie Lucrul cu date externe
Utilizare DAO cu surse de date ODBC

Utilizare Dao cu Microsoft Jet Obiectul DBEngine


Colecia Workspaces Metoda CreateWorkspace Colecia Errors Colecia Databases Colecia TableDefs Colecia Fields Colecia Indexes Colecia QueryDefs Colecia Parameters (obiectul QueryDef) Colecia Relations (obiectul Database)

Biblioteca de tipuri Microsoft DAO ofer o cale de control a unei baze de date din orice aplicaie care suport Visual Basic for Applications. Anumite obiecte DAO reprezint structura bazei de date iar altele reprezint datele nsi. Prin intermediul obiectelor DAO se pot crea i gestiona baze de date locale sau la distan ntr-o multitudine de formate, se poate lucra cu datele lor. n acest capitol se explic cum se pot programa obiectele DAO din aplicaiile Microsoft Office.

Lucrul cu obiectele DAO

Obiectele DAO se utilizeaz pentru a lucra n mod programatic cu o baz de date. Principalele aciuni privesc:

crearea unei baze de date, modificarea structurii tabelelor, interogrilor, indexrilor i relaiilor, regsirea, adugarea, tergerea sau modificarea datelor din baz, implementarea securitii datelor, lucrul cu date n diferite formate de fiiere i legarea tabelelor din alte baze de date la baza curent, conectarea la baze de date pe servere la distan i construirea de aplicaii client/server.

Observaie. Pentru a utiliza obiectele DAO, trebuie ca la instalarea pachetului Microsoft Office s se selecteze i boxa de control Data Access. Obiectele DAO sunt organizate ntr-o structur ierarhic. Obiectul DBEngine este de nivelul cel mai nalt i conine toate celelalte obiecte i colecii ale ierarhiei DAO. Urmtorul tabel conine o descriere sumar a obiectelor.
Obiect Descriere

Connection Conectarea prin reea la o baz de date Open Database Connectivity (ODBC). Container Database DBEngine Document Error Field Group Index Parameter Property QueryDef Recordset Informaii de securitate pentru diferite tipuri de obiecte ale bazei de date. Baza de date deschis. Obiectul cel mai de sus al ierarhiei. Informaia de securitate pentru obiecte individuale din baza de date. Informaii de eroare privind accesul la date. Cmp n obiecte TableDef, QueryDef, Recordset, Index, Relation. Contul grupului n baza curent. Indexul tabelei. Parametru de interogare. Proprietate a unui obiect. Definiia unei interogri salvate n baza de date. Mulime de nregistrri definite de o tabel sau de o interogare.

Relation TableDef User Workspace

Legtura (relaia) dintre dou cmpuri de tabel sau interogri. Definiia unei tabele salvate n baza de date Contul utilizatorului n grupul de lucru curent. Sesiunea DAO activ.

Proiectarea bazelor de date n Microsoft Access


Dei se pot crea baze de date prin VB cu DAO, uneori, pentru baze de date cu oarecare grad de permanen, se poate alege varianta de

a proiecta baza de date n mediul Access destinat pentru asemenea operaiuni i deschiderea bazei cu DAO din alt aplicaie care suport Visual Basic.

La crearea unei baze de date n Access, urmtoarele lucruri sunt de reinut.


o

Cnd se deschide un fiier .mdb creat n Access din alt aplicaie, nu se poate lucra cu forme, rapoarte, macro-uri sau module Access. Formele i rapoartele trebuiesc proiectate, deasemenea i codul VB, n aplicaia unde se lucreaz. Dac se scrie cod pentru procesarea unei baze de date n Access, codul respectiv nu se va executa n mod necesar i la copierea n modulele altei aplicaii. Pentru execuie trebuie, n acest caz, s se elimine/nlocuiasc toate entitile specifice Access-ului (obiecte, metode, proprieti sau funcii). n Access se utilizeaz funcia CurrentDb pentru a returna o referin la baza de date curent deschis n fereastra Access. Se poate utiliza DAO pentru a lucra cu aceast baz. Dac se copie acest cod n alt aplicaie care are Visual Basic, se va modifica textul surs nct s se utilizeze metoda OpenDatabase a obiectului Workspace. Microsoft Access creeaz proprieti suplimentare ale obiectelor DAO. Atunci cnd se formeaz o baz cu DAO n Visual Basic i aceast baz este deschis ulterior n microsoft Access, se pot observa i alte proprieti adugate obiectelor. Aceste proprieti sunt i ele enumerate n colecia Properties a obiectului DAO.

Stabilirea unei referine la biblioteca de obiecte DAO


Referina se poate realiza n mod automat, de exemplu de ctre Microsoft Access, sau manual prin succesiunea uzual: Visual Basic Editor meniul Tools References selectare Microsoft DAO 3.5 Object Library. Dup stabilirea referinei se pot vedea obiectele DAO n Object Browser selectnd DAO n lista Project/Library. Pentru anumite probleme de compatibilitate, pentru proiectele mai vechi, se poate referi Microsoft DAO 2.5/3.5 compatibility library. Proba complet pentru a vedea dac este nevoie

de referirea bilbiotecii de compatibilitate este compilarea codului sub DAO 3.5. Dac nu exist erori rezult c nu este necesar biblioteca de compatibilitate.

Referirea obiectelor DAO n Visual Basic


Obiectele DAO pot fi referite n cod n acelai mod ca orice alt obiect. Deoarece obiectul DBEngine nu are o colecie, poate fi referit direct. Celelalte obiecte se vor referi n cadrul coleciilor unde aparin i potrivit locului din ierarhia deobiecte. Fiecare obiect poate fi referit ntr-o colecie

prin valoarea proprietii Name a obiectului respectiv sau prin numrul de ordine din colecie. Obiectele DAO sunt indexate plecnd cu 0.

Exemple:
Databases("Salariati") Databases(0)

Referirea unui obiect Database n cod se realizeaz i prin poziionarea n ierarhie:


Dim dbs As Database Set dbs = DBEngine.Workspaces(0).Databases(0)

prin care se obine o referin la prima baz de date (indicele 0 din colecia Databases) din prima zona de lucru (indicele 0 din colecia Workspaces), zona implicit. De notat c dac se lucreaz ntr-o aplicaie diferit de Access, atunci trebuie s se deschid o baz de date cu metoda OpenDatabase mai nainte de a rula codul precedent. Pentru aplicaiile diferite de Access, calificarea obiectelor poate produce mai mult claritate, plus certitudinea referii corecte:
Dim dbs As DAO.Database

Adugarea de noi obiecte DAO la o colecie


Dup cum s-a precizat deja, anumite obiecte DAO reprezint structura bazei de date, celelalte oferind mijloace de lucru cu datele din baz. Obiectele care reprezint structura bazei sunt salvate o dat cu baza. n general, obiectele utilizate n lucrul cu datele din baz nu sunt salvate ci sunt create de fiecare dat cnd este nevoie de ele. Crearea unui nou obiect DAO care trebuie salvat cu baza de date se va completa cu utilizarea metodei Append a coleciei asociate de obiecte salvate. Exemplul urmtor d o imagine despre acest proces. Exmplul creeaz un nou obiect TableDef (care reprezint o nou tabel) cu un nou obiect Field (care reprezint un cmp din noua tabel). Obiectul Field creat se adaug la colecia Fields a noii tabele iar noul obiect TableDef este adugat la colecia TableDefs a obiectului Database care reprezint baza de date deschis.

Function AddTable () As Boolean ' declaraii Dim dbs As Database, tdf As TableDef, fld As Field Const conPath As String = "C:\ \Northwind.mdb" On Error GoTo Err_AddTable ' asignarea bazei curente la variabila database Set dbs = DAO.DBEngine.Workspaces(0).OpenDatabase(conPath) ' crearea noii tabele Set tdf = dbs.CreateTableDef("ArchivedInvoices") Set fld = tdf.CreateField("OrderId", dbLong) ' adugarea la coleciile adecvate, care se salveaz tdf.Fields.Append fld dbs.TableDefs.Append tdf dbs.Close AddTable = True Exit_AddTable: Exit Function Err_AddTable: MsgBox "Error " & Err & ": " & Err.Description AddTable = False Resume Exit_AddTable End Function

Observaie. n Access se va utiliza CurrentDb pentru a returna o referin la baza de date curent deschis.

Lucrul cu date externe


Se poate utiliza DAO pentru lucrul cu diferite formate de baze de date. Exist trei mari categorii de formate de baze de date accesibile prin DAO. Prima categorie este caracterizat de formatul Microsoft Jet. Se poate utiliza DAO cu toate bazele de date create cu Microsoft Jet, incluznd cele create n Microsoft Access, Microsoft Visual Basic, Microsoft Visual C++ i Microsoft Excel. A doua categorie este caracterizat de formatul ISAM instalabil. Un driver ISAM care se poate instala este un driver care ofer acces la formate de baze de date externe prin DAO i Microsoft Jet. La instalarea aplicaiei se poate cere instalarea oricrui driver pentru formatele:

Microsoft FoxPro dBase Paradox Microsoft Excel Microsoft Exchange/Outlook Lotus 1-2-3 Date tabelare n fiiere HTML etc.

A treia categorie de formate de baze de date accesibile prin DAO este sursa de date Open Database Connectivity (ODBC). Sursele de date ODBC, cum ar fi Microsoft SQL Server 4.2

i mai mari, necesit un driver ODBC. Adesea o surs de baze ODBC este pe un server de reea, adic ODBC este util pentru dezvoltarea aplicaiilor client/server. Urmtoarea seciune trateaz subiectul mai pe larg.

Utilizare DAO cu surse de date ODBC


Exist dou moduri diferite de utilizare DAO cu ODBC: prin Microsoft Jet, sau prin noua tehnologie numit ODBCDirect. Dac se lucreaz cu o baza de date creat cu Microsoft Jet database engine sau ntr-un format extern suportat de un driver instalabil ISAM, toate operaiunile DAO sunt procesate prin Microsoft Jet. Dac se lucreaz cu o surs de date ODBC, operaiunile DAO se pot procesa fie prin Microsoft Jet, fie prin ODBCDirect care ocolete motorul Microsoft Jet i lucreaz direct cu datele n sursa ODBC. Alegerea este n funcie de tipul de operaiuni efectuate. Se poate utiliza DAO cu Microsoft Jet, pentru surse ODC, atunci cnd sunt necesare avantajele Jet: abilitatea de a crea sau modifica obiecte, unirea datelor din mai multe formate de baze de date. Se poate utiliza ODBCDirect atunci cnd se execut interogri sau proceduri memorate pe un server back_end cum ar fi Microsoft SQL Server, sau cnd aplicaia client unde se lucreaz necesit capacitile specifice ODBC cum ar fi actualizri n loturi sau interogri asincrone. ODBC poate efectua anumite operaiuni client/server mult mai repede. Deoarece nu toate posibilitile DAO sunt accesibile cu ODBCDirect, Microsoft DAO mai suport nc ODBC prin Microsoft Jet. Se poate astfel utiliza ODBC prin Microsoft Jet, prin ODBCDirect, sau prin ambele cu o singur surs de date ODBC. Metoda care este utilizat n accesarea unei surse ODBC este determinat de tipul spaiului de lucru n care se lucreaz. Un spaiu de lucru, reprezentat printr-un obiect Workspace, este o sesiune deschis pentru un cont utilizator particular. O sesiune marcheaz o succesiune de operaii efectuate de motorul de baze de date, ncepe cu intrarea (log on) utilizatorului i se termin la ieirea utilizatorului (log off). Operaiunile pe care un utilizator le poate executa n timpul unei sesiuni sunt determinate de drepturile conferite acelui utilizator. Dac nu se specific tipul spaiului de lucru, DAO creeaz un spaiu n mod implicit. Cu DAO 3.5 se poate crea oricare dintre cele dou spaii de lucru pentru operaii ODBC. n spaiul Microsoft Jet se utilizeaz accesul prin Jet, n spaiul ODBCDirect se va utiliza cealalt posibilitate. Fiecare spaiu de lucru are propriul model de obiecte i vor fi prezentate n continuarea capitolului.

Utilizare DAO cu Microsoft Jet


Spaiile de lucru Microsoft Jet includ obiecte pentru definirea structurii bazei de date, cum ar fi TableDef, QueryDef, Field, Index, Parameter i Relation. Alte obiecte, cum ar fi Recordset, sunt utile pentru procesarea datelor din baz. O a treia categorie de obiecte, cum ar fi User, Group, Container i Document, servesc pentru asigurarea securitii datelor.

Pentru a vedea ntreaga ierarhie de obiecte pentru spaiul de lucru Microsoft Jet se va selecta Help (Microsoft Access Programming and Language References) Microsoft Data Access Objects (DAO) "Data Access Object Model for Microsoft Jet Workspaces". In schema urmtoare este prezentat doar partea superioar a ierarhiei. La prezentarea fiecrui obiect se vor aduce unele explicaii suplimentare. Se observ c obiectul de nivel cel mai nalt, DBEngine, nu aparine unei colecii, deci poate fi referit direct. Toate celelalte obiecte sunt referite prin colecia la care aparin. Sgeile fr obiect terminal puncteaz ctre structuri nereprezentate n figur.

Obiectul DBEngine
Obiectul DBEngine, de nivel maxim n ierarhia de obiecte DAO, este obiectul implicit al modelului, astfel nct menionarea lui explicit poate fi omis n multe situaii. Pe nivelul imediat inferior al ierarhiei se gsesc dou colecii: Workspaces spaiile de lucru, Errors erorile aprute n timpul unei operaiuni DAO. Colecia Workspaces este implicit i referina la ea poate fi omis. O referin la primul obiect Workspace din colecia Workspaces poate fi obinut prin una din instruciunile
Set wrk = DBEngine.Workspaces (0) Set wrk = DBEngine (0) Set wrk = Workspaces (0)

n care se observ prezena opional a obiectelor implicite. Proprietile obiectului DBEngine sunt prezentate n tabelul urmtor.
Proprietatea Descriere

DefaultType

Long, determin tipul spaiului de lucru: dbUseJet Microsoft Jet database engine dbUseODBC ODBC data source

DefaultUser, DefaultPassword IniPath

iruri, numele utilizatorului i parola

ir, informaia despre cheia din Windows Registry care conine valorile pentru Microsoft Jet database engine (numai spaiile de lucru Microsoft Jet). ntreg, timpul ct se ateapt intrarea unu utilizator.

LoginTimeout

SystemDB

ir, calea pentru localizarea curent a fiierului cu informaia despre grupurile de lucru, workgroup (doar spaii Microsoft Jet). ir, informaii despre versiunea DAO.

Version

Dac nu se creeaz un obiect Workspace specific, un asemenea obiect este creat n mod automat de DAO atunci cnd este necesar. Atributele implicite ale acestui spaiul sunt DefaultUser egal cu Admin iar DefaultPassword egal cu irul vid "". n mod implicit, proprietatea DefaultType are valoarea dbUseJet i spaiul de lucru este Microsoft Jet. Proprietatea poate fi acoperit pentru un spaiu particular prin tipul precizat la crearea acestuia. Metodele obiectului DBEngine sunt
Metoda Descriere

BeginTrans, CommitTrans, Rollback CompactDatabase, RepairDatabase CreateDatabase, CreateWorkspace Idle OpenConnection, OpenDatabase RegisterDatabase SetOption

Metodele care controleaz efectuarea tranzaciilor.

Compactarea bazei de date, refacerea unei baze deteriorate. Crearea unei baze de date sau a unui spaiu de lucru. Suspend procesarea datelor din baz Deschide i returneaz o referin la un obiect Connection, respectiv Database. Completeaz n Windows Registry informaia ODBC. nlocuiete temporar valorile din Windows Registry pentru spaiile Microsoft Jet

Unele metode sunt prezentate n continuare. Pentru mai multe informaii despre funciuni i parametri se vor vedea intrrile respective din DAO Help.

Colecia Workspaces
Obiectul DAO Workspace definete o sesiune pentru un utilizator, bazat pe permisiunile (drepturile) utilizatorului. Se utilizeaz obiectul Workspace pentru a gestiona sesiunea curent. Workspace conine bazele de date deschise i ofer mecanismul necesar tranzaciilor i securitii aplicaiei. Colecia Workspaces conine toate obiectele active Workspace din DBEngine, care au fost adugate coleciei.

La nceputul lucrului cu obiecte DAO din Visual Basic, DAO creeaz n mod automat un spaiu implicit. Referirea la acesta se realizeaz prin
Dim wrk As Workspace Set wrk = Workspaces (0)

adic se refer primul obiect din colecie. Spaiile de lucru DAO pot fi partajate sau ascunse. Un spaiu este ascuns pn cnd utilizatorul l marcheaz drept partajat prin adugarea obiectului Workspace la colecia Workspaces. Dup adugare, spaiul este accesat prin intermediul coleciei. Un obiect Workspace necesar doar pentru o procedur particular se poate crea dar fr adugarea la colecia Workspaces. Dup cum s-a mai spus, exist dou tipuri de obiecte Workspace: Microsoft Jet i ODBCDirect. n Microsoft Jet se poate utiliza DAO cu motorul de baze de date Microsoft Jet pentru a accesa date din baze de date Microsoft Jet, surse de date ISAM instalabile i surse de date ODBC. ntr-un spaiu ODBCDirect, se poate utiliza DAO pentru a accesa date din surse ODBC fr a trece prin motorul Jet. ntr-o aceeai aplicaie se poate lucra cu ambele tipuri de spaii de lucru. Crearea unui spaiu Microsoft Jet Se utilizeaz metoda CreateWorkspace a obiectului DBEngine. Exemplul urmtor utilizeaz constanta de tip dbUseJet. Dac proprietatea DefaultType este fixat pe dbUseJet, atunci argumentul de tip nu este necesar i se creeaz n mod automat un spaiu Microsoft Jet.
Dim wrk As Workspace Set wrk = CreateWorkspace("JetWorkSpace", "Admin", "", dbUseJet)

noul spaiu fiind pentru utilizatorul Admin i fr parol. Noul spaiu de lucru nu este adugat n mod automat la colecia Workspaces, pentru aceasta se va utiliza metoda Append a coleciei. Acest lucru este necesar atunci cnd spaiul nou definit este utilizat i n afara procedurii unde a fost creat.

Metoda CreateWorkspace (obiectul DBEngine)


Sintaxa Set workspace = CreateWorkspace(name, user, password, type) unde workspace este o variabil obiect care reprezint obiectul Workspace care se creeaz. name este irul care conine numele unic al obiectului. ncepe cu o liter, are lungimea maxim 20. user identific proprietarul noului obiect Workspace.

password conine parola pentru noul obiect Workspace, un ir pn la 14 caractere cu excepia lui null. type este opional i stabilete tipul spaiului (dbUseJet, dbUseODBC) Dup utilizarea metodei este creat obiectul Workspace, ncepe o nou sesiune i obiectul poate fi referit n cod. Obiectele Workspace nu sunt permanente, nu se pot salva iar proprietatea Name nu mai poate fi modificat dup trecerea obiectului n colecia Workspaces. Dac tipul este stabilit la dbUseODBC i nu exist deja create spaii Jet, atunci motorul Jet nu este ncrcat n memorie i toat activitatea se efectueaz cu sursa de date ODBC identificat n obiectul Connection. Pentru a elimina un obiect Workspace din colecia Workspaces, se nchid toate bazele de date i conexiunile i apoi se utilizeaz metoda Close a obiectului Workspace.

Colecia Errors (obiectul DBEngine)


Un obiect Error conine informaia despre o eroare aprut n timpul unei operaiuni DAO. Apariia mai multor erori n aceeai operaiune se reflect n obiecte Error distincte, mulimea acestora formnd colecie Errors. Atunci cnd o nou operaiune genereaz o eroare, colecie Errors este golit i completat cu noile erori. Operaiunile DAO care nu genereaz erori nu au efect asupra coleciei Errors. Erorile sunt indexate n colecie n ordinea cresctoare a nivelelor de eroare. Nivelul cel mai nalt (deci ultimul obiect din colecie) este eroare raportat de VBA, identic cu eroarea raportat de obiectul VBA Err. Colecia Errors are:

proprietatea Count, care d numrul elementelor din colecie metoda Refresh, care actualizeaz colecia potrivit situaiei curente.

Obiectul Error nu are dect proprietile (nu conine metode sau colecii)

Description, irul care conine descrierea erorii HelpContext, este un Long cu identificatorul de context din fiierul Help asociat HelpFile, conine calea complet ctre fiierul Help Number, numrul (Long) al erorii. Pentru o list complet se va vedea intrarea Trappable Microsoft Jet and DAO Errors din Help. Source, un ir coninnd numele obiectului sau aplicaiei care a generat eroarea.

Colecia Databases
Obiectul Database reprezint o baz de date deschis. Aceast poate fi o baz Jet sau o surs extern de date. Colecia Databases conine toate bazele de date deschise curent. Situarea n ierarhie este

Obiectul sau colecia

Este coninut n

Conine

Database (obiect)

Colecia Databases

Colecia Containers Colecia QueryDefs Colecia Properties Colecia Recordsets Colecia Relations Colecia TableDefs

Databases (colecie)

Obiectul Workspace

Obiecte Database

Deschiderea unei baze de date Metoda OpenDatabase, a obiectului DBEngine sau a obiectului Workspace, deschide o baz de date i returneaz o referin la obiectul care o reprezint. Utilizarea metodei cu obiectul DBEngine deschide baza de date n spaiul de lucru implicit, ca n exemplul urmtor
Function RetrieveRecordset (strDbName As String, strSource As String ) As Boolean Dim dbs As Database Dim rst As Recordset On Error GoTo Err_RetrieveRecordset Set dbs = OpenDatabase (strDbName) Set rst = dbs.OpenRecordset(strSource, dbOpenDynaset) ' se prelucreaz nregistrrile din recordset RetrieveRecordset = True Exit_RetrieveRecordset: rst.Close dbs.Close Exit Function Err_RetriveRecordset: MsgBox "Eroare " & Err & ": " & Err.Description RetrieveRecordset = False Resume Exit_RetriveRecordset End Function

n Microsoft Access, se utilizeaz funcia CurrentDb pentru a returna o referin la baza de date curent. Metoda OpenDatabase se utilizeaz pentru deschiderea altei baze de date dect cea curent deschis sau pentru a deschide baze n spaiul de lucru ODBCDirect.
Dim dbs As Database Set dbs = CurrentDb Debug.Print dbs.Name

Crearea cu DAO a duplicatelor unei baze de date (database replicas) Diferite necesiti de arhivare sau de lucru n reea impun crearea i gestionarea unor copii ale unei baze de date. Una dintre copii este desemnat drept Design Master, celelalte copii find denumite duplicate sau replici. Replicile pot fi meninute pe aceeai main sau pe maini diferite. Adugarea, modificarea sau tergerea obiectelor se poate efectua doar n Design Master. Datele pot fi modificate n Design Master i n orice replic a bazei de date. Atunci cnd un utilizator modific date dintr-o baz duplicat, utilizatorii celorlalte replici pot s-i sincronizeze replicile, astfel nct aceleai date s fie n toate copiile. Se poate utiliza DAO pentru a face o baz replicabil, pentru a crea replici, le sincroniza i gestiona mulimea replicilor. Se pot crea, de asemenea, replici pariale care conin doar o submulime de nregistrri dintr-o replic total. Utilizarea replicilor pariale permite sincronizarea unei replici doar cu datele necesare i nu cu ntreaga baz de date. Pentru ca o baz de date s admit replici trebuie s se fixeze proprietatea Replicable sau proprietatea ReplicableBool a obiectului Database corespunztor. Aceste proprieti nu exist pentru obiectul Database pn cnd nu sunt create prin metoda CreateProperty i adugate la colecia Properties. Dup permiterea replicrilor, crearea unei baze duplicat se realizeaz prin metoda MakeReplica. Diferena dintre proprietile Replicable i ReplicableBool este de valori: prima are o valoare ir, a doua o valoare logic. Urmtorul exemplu creeaz manual o copie a bazei de date, o face replicabil i creeaz o replic a bazei.
Function ReplicateDatabase (strDBName As String) As Boolean Dim dbs As Database, prp As Property Dim strBackup As String, strReplica As String Const conPropNotFound As Integer = 3270 On Error GoTo Err_ReplicateDatabase If InStr(strDBName, ".mdb") > 0 Then strBackup = Left(strDBName, Len(strDBName) - 4) Else strBackup = strDBName End If strReplica =strBackup & "Replica" & ".mdb" If MsgBox("Make backup copy of file?", vbOKCancel) = vbOK Then strBackup = strBackup & ".bak" FileCopy strDBName, strBackup MsgBox "Copied file to " & "strBackup" End If Set dbs = OpenDatabase (strDBName, True) dbs.Properties("ReplicaBool") = True dbs.MakeReplica strReplica, "Replica of " & strDBName MsgBox "Created replica '" & strReplica & "'." dbs.Close ReplicateDatabase = True Exit_ReplicateDatabase:

Exit Function Err_ ReplicateDatabase: If Err = conPropNotFound Then Set prp = dbs.CreateProperty("ReplicableBool", dbBoolean, True) dbs.Properties.Append prp Resume Next Else MsgBox "Error " & ": " & Err.Description End If ReplicateDatabase = False Resume Exit_ReplicateDatabase End Function

Colecia TableDefs
Un obiect TableDef reprezint definiia memorat a unei tabele din baz sau a unei tabele legate din spaiul de lucru Microsoft Jet. Toate obiectele TableDef memorate ntr-o baz de date formeaz colecia TableDefs. Relaiile din ierarhie sunt
Obiectul sau colecia Este coninut n Conine

TableDef (obiect)

Colecia TableDefs

Colecia Fields Colecia Indexes Colecia Properties

TableDefs (colecie) Crearea prin cod a unei tabele

Obiectul Database

Obiecte TableDef

Metoda de creare este CreateTableDef a obiectului Database. Dup crearea unui nou obiect TableDef, dar nainte de adugarea la baz, trebuie s se defineasc unul sau mai multe cmpuri pentru tabela definit. Sintaxa metodei CreateTableDef este Set tabledef = database.CreateTableDef (name, attributes, source, connect) unde tabledef este o variabil obiect reprezentnd obiectul TableDef care se creeaz.

database este o variabil obiect reprezentnd obiectul Database unde se dorete crearea noului obiect. name este un ir opional, care conine denumirea tabelei. attributes este o constant sau o combinaie de constante indicnd caracteristici ale tabelei. Lista este n Help - TableDef object - Attributes Property.

source este un Variant (subtip String), opional. Conine numele tabelei n baza de date extern care este sursa datelor. irul devine proprietatea SourceTableName a noului obiect. connect, un Variant (subtip String), opional. Conine informaia despre sursa unei baze deschise, o baz de date utilizat ntr-o interogare pass-through, sau o tabel legat. La proprietatea Connect se pot gsi mai multe informaii. Argumentele care se omit la crearea tabelei se vor asigna prin proprieti nainte de adugarea obiectului la colecie. Dup aceea nu mai sunt disponibile toate proprietile. Pentru eliminarea unui obiect TableDef se utilizeaz metoda Delete a coleciei TableDefs. Urmtorul exemplu realizeaz crearea unei tabele pentru baza de test Northwind.
Function CreateErrorsTable () As Boolean Dim dbs As Database, tdf As TableDef, fld As Field, idx As Index Dim rst As Recordset, intCode As Integer, strErr As String Const conAppObjErr = "Application-defined or object-defined error" ' creeaz tabela Errors cu cmpurile ErrorCode i ErrorString Set dbs = CurrentDb On Error Resume Next ' tergerea unei tabele Errors existente dbs.TableDefs.Delete "Errors" On Error GoTo Error_CreateErrorsTable ' crearea tabelei Set tdf = dbs.CreateTableDef("Errors") ' creare cmpuri Set fld = tdf.CreateField("ErrorCode", dbInteger) tdf.Fields.Append fld Set fld = tdf.CreateField("ErrorString", dbMemo) tdf.Fields.Append fld ' creare index Set idx = tdf.CreateIndex("ErrorCodeIndex") Set fld = idx.CreateField("ErrorCode") With idx .Primary = True .Unique = True .Required = True End With idx.Fields.Append fld tdf.Indexes.Append idx ' deschidere recordset n tabela Errors Set rst = dbs.OpenRecordset("Errors") ' stabilirea indexului pentru recordset rst.Index = "ErrorCodeIndex") ' artarea pointerului clepsidr DoCmd.Hourglass True ' ciclarea n codurile de eroare For intCode = 1 To 32767 On Error Resume Next strErr = ""

' tentativa de apariie a une erori Err.Raise intCode ' verificarea dac eroarea este VBA, DAO sau Access ' dac eroarea nu este VBA, atunci proprietatea Description a obiectului 'Err conine textul "Application-defined or object-defined error" If Err.Description <> conAppObjErr Then strErr = Err.Description ' se utilizeaz metoda AccessError pentru returnarea irului descriptiv ' pentru erorile DAO i Access. ElseIf AccessError(intCode)<>conAppObjErr Then strErr = AccessError(intCode) End If ' dac numrul de eroare are un ir descriptiv, se adaug la tabela definit If Len(strErr) > 0 Then 'Adugarea noii nregistrri la recordset rst.AddNew ' adugarea numrului erorii la tabel rst!ErrorCode = intCode ' adugarea irului descriptiv rst!ErrorString.AppendChunk strErr ' actualizare nregistrare rst.Update End If Next intCode DoCmd.Hourglass False ' nchidere recordset rst.Close MsgBox "Errors table created" ' artarea noii tabele n fereastra Database (din Access) RefreshDatabaseWindow CreateErrorsTable = True Exit_CreateErrorsTable: Exit Function Error_CreateErrorsTable: MsgBox Err & ": " & Err.Description CreateErrorsTable = False Resume Exit_CreateErrorsTable End Function

Legarea unei tabele la o baz de date Pentru a utiliza ntr-o baz de date tabele dintr-o surs de date extern, aceasta trebuie legat la baza de date. Se pot lega tabele care sunt n alt baz de date Microsoft Jet, sau tabele din alte programe i formate de fiiere, cum ar fi Microsoft Excel, dBase, Microsoft FoxPro etc. Acest mod este mai eficient dect s se deschid baza de date extern direct, mai ales dac tabela vine dintr-o surs de date ODBC. Pentru a lega o tabel la o baz de date, se utilizeaz metoda CreateTableDef pentru a crea o nou tabel. Dup aceea se specific valorile pentru proprietile Connect i

SourceTableName ale noului obiect creat. Se poate stabili de asemenea proprietatea Attributes. n final se adaug tabela la colecia TableDefs. Urmtorul exemplu leag o foaie de calcul Excel 8.0 ca o tabel la o baz de date. nainte de executarea unui astfel de exemplu trebuie s ne convingem c pe sistem este instalat driverul Microsoft Excel ISAM (Msexcl35.dll). Acest driver permite fiierelor Excel 97 s lucreze cu Microsoft Jet database engine.
Function LinkExcelTable() As Boolean Dim dbs As DAO.Database, tdf As DAO.TableDef Const errNoISAM As Integer = 3170 Const conPath As String = _ "C:\Program Files \Northwind.mdb" On Error GoTo Err_LinkExcelTable ' returneaz o referin la baza de date Northwind Set dbs = OpenDatabase(conPath) ' creeaz un nou obiect TableDef Set tdf = dbs.CreateTableDef("LinkedTable") ' specific domeniul care este tabela surs tdf.SourceTableName = "DataRange" ' specific irul de conectare tdf.Connect = "EXCEL 8.0; DATABASE=C:\My Documents\XLTable.xls" ' adugarea noului obiect la colecie dbs.TableDefs.Append tdf LinkExcelTable = True Exit_LinkExcelTable: Exit Function Err_LinkExcelTable: If Err = errNoISAM Then Dim strErr As String strErr = Err & ": " & Err.Description strErr = strErr _ & " You may not have the ISAM driver installed properly " MsgBox strErr, vbOKOnly, "Error!" Else MsgBox "Error " & Err & ": " & Err.Description End If End Function

Colecia Fields
n spaiul de lucru Microsoft Jet, obiectul Field reprezint un cmp dintr-o tabel, interogare, index, relaie sau recordset. Colecie Fields conine toate obiectele Field asociate, respectiv, obiectele TableDef, QueryDef, Index, Relation sau Recordset. Localizarea n ierarhia de obiecte este
Obiectul sau colecia Este coninut n Conine

Field (obiect)

Colecia Fields

Colecia Properties

Fields (colecie)

Obiectul TableDef Obiectul Index Obiectul QueryDef Obiectul Recordset Obiectul Relation

Obiecte Field

Colecia Fields este colecia implicit a unui obiect TableDef, QueryDef, Index, Relation sau Recordset, ceea ce nseamn c nu trebuie fcut o referin la colecie n mod explicit. De exemplu, urmtoarele instruciuni returneaz o referin la cmpul LastName din tabela Employees din baza de date de test Northwind.
Dim dbs As Database, tdf As TableDef, fld As Field Const conPath As String = _ "C:\Program Files\ \Northwind.mdb" Set dbs = OpenDatabase(conPath) Set tdf = dbs.TableDefs("Employees") Set fld = tdf!LastName

n colecia Fields a unui obiect TableDef, QueryDef, Index sau Relation, obiectul Field este o unitate structural. El reprezint o coloan dintr-o tabel, avnd un tip particular de date. Dac se creeaz o baz de date n Microsoft Access, se pot crea cmpuri pentru toate aceste obiecte i s se fixeze proprietile lor n mediul Access i nu este necesar utilizarea programrii n acest scop. ntr-un obiect Recordset, un obiect Field conine date i poate fi utilizat pentru a citi date dintr-o nregistrare sau scrie date ntr-o nregistrare. n interfaa utilizator Access nu se poate lucra, totui, cu cmpurile obiectului Recordset; trebuie sse fac apel la DAO. Colecia Fields a obiectului TableDef conine toate cmpurile definite. Pentru un obiect QueryDef, colecia conine toate cmpurile incluse n interogare din una sau mai multe tabele. Colecia Fields a obiectului Index include cmpurile pentru care este definit indexul. Pentru un obiect Relation, colecia conine cmpurile implicate n relaie. Tipic, exist dou cmpuri n colecia Fields: unul care este cheia primar, specificat de proprietatea Table a obiectului Relation; al doilea este cmpul extern corespunztor, din tabela specificat de proprietatea ForeignTable a obiectului Relation. Colecia Fields a obiectului Recordset conine cmpurile specificate n argumentul source a metodei OpenRecordset. Argumentul source specific sursa nregistrrilor pentru noul obiect Recordset i poate fi un nume de tabel, nume de interogare sau o instruciune SQL care returneaz nregistrri. Proprietatea Value a obiectului Field se aplic doar unui obiect din colecia Fields a unui obiect Recordset. Proprietatea returneaz valoare datei memorate n acel cmp n nregistrarea curent. Deoarece Value este proprietatea implicit a obiectului Field iar Fields

este colecia implicit a obiectului Recordset, se poate returna valoarea unui cmp fr a specifica explicit fie Fields, fie Value. Exemplul urmtor este sugestiv n acest sens:
Dim dbs As Database, rst As Recordset Const conPath As String = _ "C:\Program Files\ \Northwind.mdb" Set dbs = OpenDatabase(conPath) Set rst = dbs.OpenRecordset("Employees") ' referina explicit la colecie i valoare Debug.Print rst.Fields("LastName").Value ' referin explicit la valoare Debug.Print rst!FirstName.Value ' referine implicite Debug.Print rst!Title

Colecia Indexes
Un obiect Index reprezint un index dintr-o tabel a bazei de date, n spaiul de lucru Microsoft Jet. Colecia Indexes conine toate obiectele Index definite pentru o tabel particular. Poziia n ierarhia de obiecte este urmtoarea:
Obiectul sau colecia Este coninut n Conine

Index (obiect)

Colecia Indexes

Colecia Fields Colecia Properties

Indexes (colecie)

Obiectul TableDef

Obiecte Index

Un index mrete viteza de cutare i sortare a tabelei. Se poate mbunti performana interogrii bazei de date prin indexarea cmpurilor pe ambele pri ale jonciunilor, cmpuri care sunt sortate, sau cmpuri care sunt utilizate drept criterii de interogare. Totui, indexurile pot s mreasc dimensiunea bazei i s ncetineasc performana cnd se actualizeaz cmpuri indexate, cnd se adaug sau se elimin date. Performana poate fi redus i n cazul aplicaiilor multiuser. Din aceste motive utilizarea indexurilor va fi fcut cu atenie. Un index specific ordinea n care nregistrrile sunt accesate din tabelele bazei de date ntrun obiect Recordset de tip tabel. Pentru a crea un index cu DAO, operaiune posibil pentru unul sau mai multe cmpuri, trebuie
o o o o o

metoda CreateIndex pentru obiectul TableDef. metoda CreateField pentru obiectul Index cu scopul creerii unui obiect Field pentru fiecare cmp (coloan) care se include n obiectul Index. Stabilirea proprietilor obiectului Index. Metoda Append pentru fiecare obiect Field care se adaug la colecia Fields. Metoda Append pentru adugarea noului obiect Index la colecia Indexes.

Urmtorul exemplu este ilustrativ.


Sub SeekRecord () Const conPath As String = _ "C:\Program Files\ \Northwind.mdb" Dim dbs As Database, tdf As TableDef, idx As Index Dim fld As Field, fldLast As Field, fldFirst As Field Dim rst As Recordset ' returnarea unei referine la baza de date Northwind Set dbs = DBEngine().OpenDatabase(conPath) ' returnarea unei referine la tabela Employees Set tdf = dbs.TableDefs("Employees") ' crearea unui index nou pe cmpurile LastName i FirstName Set idx = tdf.CreateIndex("FirstLastName") ' crearea cmpurilor din index Set fldLast = idx.CreateField("LastName", dbText) Set fldFirst = idx.CreateField("FirstName", dbText) ' adugarea obiectelor Field idx.Fields.Append fldLast idx.Fields.Append fldFirst ' fixarea proprietii Required idx.Required = True ' adugarea noului obiect index tdf.Indexes.Append idx ' deschiderea recordset-ului de tip tabel Set rst = dbs.OpenRecordset("Employees") ' fixarea proprietii Index a obiectului Recordset rst.Index = idx.Name ' efectuarea operaiunii de cutare rst.Seek "=", "King", "Robert" ' tiprirea valorilor tuturor cmpurilor cu excepia cmpului Photo For Each fld In rst.Fields If fld.Type <> dbLongBinary Then Debug.Print fld End If Next fld End Sub

Observaie. n mediul Microsoft Access se poate lucra cu mulimea indexurilor n meniul View, comanda Indexes.

Colecia QueryDefs
Printr-o interogare nelegem o operaiune, formalizat, prin care este returnat o mulime de nregistrri care satisfac cerine impuse sau se execut o aciune specific asupra unei mulimi de nregistrri selectate dup cerinele din interogare. Un obiect QueryDef reprezint o interogare n DAO. Obiectele QueryDef pot fi salvate cu baza de date n Microsoft Jet sau pot fi temporare n ODBCDirect i Jet. Relaiile n ierarhia de obiecte DAO sunt
Obiectul sau colecia Este coninut n Conine

QueryDef (obiect)

Colecia QueryDefs

Colecia Fields Colecia Parameters Colecia Properties

QueryDefs (colecie) Obiectele QueryDef ofer:


Obiectul Database

Obiecte QueryDef

folosirea proprietii SQL pentru a fixa sau returna definiia interogrii; folosirea coleciei Parameters pentru a fixa sau returna parametrii interogrii; utilizarea proprietii Type pentru a determina dac interogarea selecteaz nregistrrile dintr-o tabel existent, creeaz o nou tabel etc.; utilizarea proprietii MaxRecords pentru a limita numrul de nregistrri returnate de o nregistrare; folosirea proprietii ODBCTimeout pentru a indica timpul de ateptare a rezultatului unei interogri.

n spaiul de lucru Microsoft Jet mai sunt posibile:


utilizarea proprietii ReturnRecords pentru a indica, la interogri prin SQL, returnarea de nregistrri; utilizarea proprietii Connect pentru a realiza o interogare a unei baze ODBC prin SQL.

n spaiul ODBCDirect sunt specifice


utilizarea proprietii Prepare pentru a determina dac se invoc ODBC SQLPrepare API la executarea interogrii; utilizarea proprietii CacheSize pentru depozitarea (cache) nregistrrilor returnate de interogare.

Obiectele QueryDef temporare nu sunt salvate pe disc i nu sunt adugate la colecia QueryDefs. n general, interogrile temporare sunt utile atunci cnd frazele SQL sunt create, repetat, n timpul execuiei. Un obiect QueryDef permanent din spaiul Jet poate fi gndit ca o instruciune SQL compilat. Astfel, interogarea este mai rapid dect o instruciune SQL executat prin metoda OpenRecordset. Pentru a crea un obiect QueryDef se utilizeaz metoda CreateQueryDef. n spaiul Jet, dac se precizeaz numele noului obiect se creeaz un obiect QueryDef permanent i care este adugat automat la colecia QueryDefs i salvat n disc. Dac se d implicit sau explicit un nume vid, "", atunci rezultatul este un obiect QueryDef temporar. n spaiul ODBCDirect o interogare este ntotdeauna temporar.

Colecia QueryDef conine toate obiectele QueryDef deschise. Cnd o interogare este nchis, ea este nlturat automat din colecia QueryDef. Referina la un obiect permanent QueryDef este uzual, prin intermediul coleciei:
QueryDefs(0) QueryDefs("name") QueryDefs![name]

Referina la obiectele temporare QueryDef se poate obine doar prin variabilele obiect la care s-au asignat interogrile. Crearea interogrilor permanente Interogrile permanente, salvate mpreun cu baza de date, pot fi create n Visual Basic cu DAO sau n interfaa utilizator din Microsoft Access. Exemplul urmtor constituie un model pentru crearea unei interogri.
Const conPath As String = _ "C:\Program Files\ \Northwind.mdb" Dim dbs As Database, qdf As QueryDef, rst As Recordset Dim strSQL As String strSQL = "SELECT FirstName, LastName, LastName, HireDate FROM Employees " _ & "WHERE Title = 'Sales Representative' ORDER BY HireDate;" Set dbs = OpenDatabase(conPath) Set qdf = dbs.CreateQueryDef("Sales Representatives", strSQL) Set rst = qdf.OpenRecordset

Obiectul QueryDef nou creat nu trebuie adugat la colecia QueryDefs, deoarece prin specificarea unei valori nenule a argumentului name se creeaz o interogare permanent i aceasta este adugat automat la colecie. Un nume nul ar duce la crearea unei interogri temporare (n spaiul ODBCDirect toate obiectele QueryDef sunt ntotdeauna temporare).

Colecia Parameters (QueryDef Object)


Un obiect Parameter reprezint o valoare transmis unei interogri. Colecia Parameters conine toate obiectele Parameter definite de un obiect QueryDef. Localizarea n ierarhia de obiecte DAO este precizat n tabelul alturat.
Obiectul sau colecia Este coninut n Conine

Parameter (obiect) Parameters (colecie)

Colecia Parameters Obiectul QueryDef

Colecia Properties Obiecte Parameter

Dac se dorete ca utilizatorul sau aplicaia s ofere o valoare n timpul execuiei, prin care s se limiteze mulimea nregistrrilor returnate de o interogare, aceasta se realizeaz prin definirea parametrilor interogrii.

Pentru a crea un parametru se utilizeaz declaraia SQL PARAMETERS. Sintaxa declaraiei este:
PARAMETERS name datatype [, name datatype [, ]]

Declaraia PARAMETERS precede restul instruciunii SQL i este separat prin caracterul ";", dup exemplul urmtoarei instruciuni SQL:
PARAMETERS [ Beginning OrderDate] DATETIME,[ Ending OrderDate] DATETIME; SELECT * FROM Orders WHERE (OrderDate Between [ Beginning OrderDate] And [ Ending OrderDate] );

Fiecare parametru definit n instruciunea SQL este reprezentat de un obiect Parameter n colecia Parameters a obiectului QueryDef bazat pe instruciunea SQL. Valoarea unui parametru se poate specifica prin fixarea proprietii Value a obiectului Parameter. Exemplul urmtor realizeaz o asemenea operaiune.
Function NewParameterQuery (dteStart As Date, dteEnd As Date) As Boolean Dim dbs As Database, qdf As QueryDef, rst As Recordset Dim strSQL As String On Error Resume Next ' returnarea referinei la baza curent Set dbs = CurrentDb ' construcia irului SQL strSQL = "PARAMETERS [Beginning OrderDate] DATETIME, " _ & "[Ending OrderDate] DATETIME; SELECT * FROM Orders " & _ "WHERE (OrderDate Between [Beginning OrderDate] " _ & "AND [ Ending OrderDate] )';" ' eliminarea interogrii dac ea exist dbs.QueryDefs.Delete "ParameterQuery" On Error GoTo Err_NewParameterQuery ' crearea unui nou obiect QueryDef Set qdf = dbs.CreateQueryDef("ParameterQuery", strSQL) ' fixarea valorilor parametrilor If dteStart > dteEnd Then MsgBox "Start date is later than end date." Exit Function End If qdf.Parameters("Beginning OrderDate") = dteStart qdf.Parameters("Ending OrderDate") = dteEnd ' deschiderea recordset-ului din interogare Set rst = qdf.OpenRecordset rst.MoveLast MsgBox "Query returned " & rst.RecordCount & " records." NewParameterQuery = True Exit_NewParameterQuery: rst.Close Set dbs = Nothing Exit Function Err_NewParameterQuery:

MsgBox "Error " & Err & ": " & Err.Description NewParameterQuery = False Resume Exit_NewparameterQuery End Function

Funcia poate fi apelat din fereastra Debug prin


? NewParameterQuery(#6-30-95#, #6-30-96#)

Observaie. n Microsoft Access se pot defini parametrii unei interogri n Query Design View.

Colecia Relations (obiectul Database)


Un obiect Relation reprezint o relaie ntre cmpuri din tabele sau nterogri. Colecia Relations conine toate obiectele Relation ale unei baze de date. Localizarea n ierarhia de obiecte DAO a spaiului de lucru Microsoft Jet este
Obiectul sau colecia Este coninut n Conine

Relation (obiect)

Colecia Relations

Colecia Fields Colecia Properties

Relations (colecie) Relaii ntre tabele

Obiectul Database

Obiecte Relation

Separarea informaiilor ntre mai multe tabele ale unei baze de date, dup criterii care in de subiect, categorie, administrare etc., ridic problema reunirii informaiilor pentru necesiti de raportare a lor. Pentru rezolvarea acestei probleme o prim operaiune este aceea de a stabili relaii ntre tabele. Prin relaie se nelege, n problematica bazelor de date, o asociere stabilit ntre dou cmpuri (denumite cmpuri cheie, de regul cu acelai nume) din dou tabele. n acest mod nregistrrile celor dou tabele pot fi coordonate nct nregistrrile curente s conin informaii corelate dup cmpurile asociate. Relaia lucreaz prin potrivirea valorilor cmpurilor cheie. n cele mai multe cazuri, cmpurile cheie sunt cheia primar dintr-o tabel (s-o numim tabela A), care constituie un identificator unic pentru fiecare nregistrare, i o cheie extern din alt tabel (s-o numim tabela B). Exist trei tipuri de relaii: one-to-one, one-to-many, many-to-many dup numrul nregistrrilor din cele dou tabele, care ndeplinesc condiia de matching. O relaie one-to-many, cea mai frecvent, o nregistrare din tabela A poate s se potriveasc cu mai multe nregistrri din tabela B; invers, o nregistrare din tabela B are doar o nregistrare din A cu care se potrivete.

ntr-o relaie many-to-many, o nregistrare din tabela A poate s se potriveasc cu mai multe nregistrri din tabela B, iar o nregistrare din tabela B poate s se corespund cu mai multe nregistrri din tabela A. Acest tip de relaie este posibil prin definirea unei a treia tabele (tabela de jonciune junction table) ale crei cmpuri chei primare sunt n relaie cu cheile externe din tabelele A i B. Astfel, o relaie many-to-many este format din dou relaii oneto-many care implic o a treia tabel. Relaia one-to-one presupune c nregistrrile din tabelele A i B sunt n coresponden una la una, fiecare nregistrare din A se poate potrivi doar cu o nregistrare din B i reciproc. Dei nu este o situaie uzual, prin aceea c legtura foarte puternic ar presupune c informaia trebuia grupat ntr-o singur tabel, relaia one-to-one poate fi utilizat pentru divizarea unei tabele cu prea multe cmpuri sau izolarea unei pri a tabelei. Modul de relaie creat de Microsoft Access depinde de definirea cmpurilor care sunt puse n relaie (chei primare, indexuri unice etc.).

Obiectul Relation
Obiectul Relation poate fi utilizat pentru a crea noi relaii sau pentru a examina relaiile existente n baza curent. Proprietile obiectului servesc la specificarea tipului de relaie, a tabelelor care particip n relaie, cnd s se foreze integritatea referenial (integritatea referenial Referential integrity este un sistem de reguli utilizate n Access pentru a asigura c relaiile dintre nregistrrile tabelelor legate sunt valide i c nu se terg sau modific date legate; integritatea referenial interzice adugarea de nregistrri la o tabel legat pentru care nu exist cheie primar, modificarea valorilor n tabela primar care conduce la nregistrri orfane n tabela legat etc.) i cnd s se execute actualizrile i tergerile n cascad (actualizri n cascad cascading update pentru relaiile care impun integritatea referenial, o opiune care, n cazul modificrii unei chei primare din nregistrrile tabelei primare, conduce la actualizarea automat a cheilor externe n toate nregistrrile legate din tabelele externe; tergeri n cascad cascading delete similar, dar pentru tergeri de nregistrri: tergerea unei inregistrri din tabela primar produce tergerea nregistrrilor legate din tabelele externe). Toate aceste noiuni sunt prezentate, pe scurt, n continuare. Adugarea unui obiect Relation la colecia Relations, se va crea obiectul prin metoda CreateRelation i se adaug la colecie prin metoda Append. Astfel, obiectul Relation este salvat o dat cu obiectul Database. Eliminarea unui obiect Relation se realizeaz metoda Delete. Referirea la un obiect Relation se realizeaz n mod uzual:
Relations(0) Relations("name") Relations![name]

Aciunile principale realizate prin utilizarea obiectului Relation sunt enumerate n continuare.

Stabilirea unei relaii impuse ntre cmpuri din tabele de baz (o tabel de baz este o tabel a unei baze de date Microsoft Jet) dar nu relaii care implic tabele i interogri legate (o tabel legat este o baz extern, legat de o baz de date Jet).

Stabilirea unei relaii neimpuse ntre orice tip de tabel sau interogare nativ sau legat. Utilizarea proprietii Name pentru a referi relaia dintre cmpurile din tabela primar (prin tabela primar se nelege partea "one" dintr-o relaie one-to-many) referit i tabela extern (tabela de pe partea "many" a relaiei one-to-many) care face referirea. Utilizarea proprietii Attributes pentru a determina dac relaia dintre cmpuri este one-to-one i cum s se impun integritatea referenial. De asemenea, tot prin Attributes, se poate determina dac motorul Microsoft Jet poate efectua actualizarea n cascad i tergerea n cascad n tabelele legate prin relaii. Utilizarea proprietii Attributes pentru a determina dac relaia este asociere stnga (left join, include toate nregistrrile din prima tabel din stnga chiar dac nu exist nici o potrivire cu nregistrri din a doua tabel din dreapta) sau asociere dreapta (right join, include toate nregistrrile din a doua tabel din dreapta chiar dac nu exist potriviri cu nregistrri din prima tabel din stnga relaiei). Utilizarea proprietii Name a obiectelor Field din colecia Fields a obiectului Relation pentru a stabili sau returna numele cmpurilor din cheia primar a tabelei referite, sau setrile proprietii ForeignName a obiectelor Field pentru a stabili sau returna denumirile cmpurilor din cheia extern a tabelei care face referina.

Un obiect Relation are o colecie Fields care conine dou cmpuri, cte unul n fiecare tabel a relaiei.Cmpurile relaiei trebuie s aib acelai tip de dat i trebuie s aib valori comune. Se vor utiliza proprietile Table i ForeignTable ale obiectului Relation pentru a specifica tabele care iau parte la relaie i cum sunt legate. La crearea unei relaii one-to-many, tabela de pe partea "one" a relaiei este tabela n care cmpul din legtur este cheia primar. Prin urmare proprietatea Table trebuie s fie numele acestei tabele. Tabela de pe partea "side" a relaiei este tabela n care cmpul legat este cheie extern iar numele tabelei se va da proprietii ForeignTable. Urmtorul exemplu creeaz o relaie ntre tabelele Employees i Orders din baza de date de test Northwind. Cele dou tabele sunt unite prin cmpul EmployeeID care este cheie primar n baza Employees toate valorile acestui cmp sunt unice i cheie extern pentru Orders aceeai valoare poate s apar n mai multe nregistrri.
Function NewRelation() As Boolean Dim dbs As Database Dim fld As Field, rel As Relation ' calea ctre baza de date Northwind Const conPath As String = _ "C:\Program Files\ \Northwind.mdb" On Error GoTo Err_NewRelation ' returneaz o referin la baza curent Set dbs = OpenDatabase(conPath) ' gsirea unei relaii EmployeesOrders deja existente For Each rel In dbs.Relations If rel.Table = "Employees" And rel.ForeignTable = "Orders" Then ' mesaj de tergere a relaiei existente If MsgBox(rel.Name & " already exists. " & vbCrLf _ & "This relation will be deleted and re-created.", vbOK) = vbOK Then dbs.Relations.Delete rel.Name Else ' dac utilizatorul rspunde cu Cancel Exit Function End If

End If Next rel ' crearea noii relaii i stabilirea proprietilor ei Set rel = dbs.CreateRelation("EmployeesOrders", "Employees", "Orders") ' stabilirea proprietilor pentru forarea integritii refereniale rel.Attrbutes = dbRelationDeleteCascade + dbRelationUpdateCascade ' creare cmp n colecia Fields a obiectului Relation, la creare se fixeaz Name Set fld = rel.CreateField("EmployeeID") ' numele pentru cmpul extern fld.ForeignName = "EmployeeID" ' adugarea obiectelor create rel.Fields.Append fld dbs.Relations.Append rel MsgBox "Relation '" &rel.Name & " ' created." Set dbs = Nothing NewRelation = True Exit_NewRelation: Exit Function Err_NewRelation MsgBox "Error " & Err & ": " & Err.Description NewRelation = False Resume Exit_NewRelation End Function

Observaie. n Microsoft Access se lucreaz cu relaiile prin meniul Tools Relationships.

VISUAL BASIC - TEST GRILA


VISUAL BASIC - TEST GRILA 1. Mediul de programare Visual Basic este un mediu care permite: a) Programarea excusiva a aplicatiilor manageriale; b) Programarea excusiva a aplicatiilor contabile; c) Programarea excusiva a aplicatiilor ingineresti; d) Programarea excusiva a aplicatiilor cu baze de date; e) Este un mediu de programare complex care permite realizarea aplicatiilor Windows. 2. Mediul de programare Visual Basic este un mediu se foloseste doar la: a) Elaborarea oricaror programe windows orientate pe obiecte;

b) Elaborarea programelor windows pentru lucrul exclusiv cu memoria externa; c) Crearea bazelor de date; d) Programe care se ocupa doar cu gestiunea fisierelor; e) Realizarea programelor de grafica. 3. Mediul de programare Visual Basic este un limbaj de programare: a) compilat; b) interpretat; c) organizat; d) de nivel masina; e) nu este limbaj d eprogramare ci o simpla aplicatie. 4. Obiectele in mediul de programare Visual Basic: a) se folosesc la elaborarea programelor; b) se folosesc la executarea programelor; c) se folosesc la interactiunea cu sistemul de operare; d) sunt utilizate in vederea portabilitatii programelor; e) sunt utilizate la imporatarea datelor prin Clipboard. 5. Ce este programarea orientata pe obiecte: a) Programarea aplicatiilor utilizand mediul Windows; b) Programarea secventiala; c) Crearea subrutinelor; d) Programarea aplicatiilor pe baza obiectelor, a proprietaatii acestora si a evenimentelor asociate; e) Realizarea programelor de grafica. 6. Un proiect Visual Basic poate contine urmatoarele tipuri de fisiere: a) Fisiere grafice si audio; b) Fisiere text si documente;

c) Fisiere cu formulare grafice, cu structuri de date, fisiere de cod; d) Fisiere cu documente Microsoft Office; e) Fisiere de cod si baze de date relationale. 7. Mediul de programare Visual Basic este un mediu: a) De programare orientata pe obiecte; b) De programare secventiala; c) Pentru programarea unor subrutine ce se realizeaza intr-o anumita ordine; d) Pentru programarea exclusiva a obiectelor grafice; e) Pentru programarea exclusiva a bazelor de date. 8. Un program realizat in Visual Basic poate rula pe: a) orice calculator pentium IV; b) orice calculator pentiumIV dotat cu 1Gb memorie RAM; c) orice calculator care are visual basic instalat; d) orice calculator care are mediul Windows XP; e) orice calculator care are mediul Windows 2000. 9. Un program realizat in Visual Basic poate rula pe: a) orice calculator cu sistem de operare MS DOS; b) orice calculator pentiumIV dotat cu 1Gb memorie RAM si sistem de operare Windows; c) orice calculator care are visual basic instalat si sistem de operare Windows; d) orice calculator care are sistemul de operare Linux; e) orice calculator care are mediul Windows 2000, 1Gb memorie RAM si DVD. 10. Un program realizat in Visual Basic poate realiza: a) orice program care utilizeaza evenimente Windows; b) orice program care utilizeaza evenimente ale oricarui sistem de operare; c) orice program care utilizeaza evenimente generate de procesor;

d) orice program care utilizeaza evenimente generate de mecanismul de gestionare a memoriei; e) orice program care utilizeaza evenimente in timp real. 11. Datele folosite in Visual Basic pot fi declarate: a) La inceputul fisierului; b) La sfarsitul fisierului; c) In interiorul subrutinelor; d) La inceputul fisierului si in interiorul subrutinelor; e) La inceputul fiecarei subrutine. 12. Datele folosite in Visual Basic pot fi de tip: a) Numeric; b) Nenumeric; c) Numeric si nenumeric; d) Text; e) Boolean. 13. Care dintre expresiile de mai jos realizeaza declararea unei variabile de tip sir de caractere de lungime variabila: a) Dim str As single; b) Dim str As string; c) Dim str As string[8]; d) Dim str=8 As string; e) Dim str As variant. 14. Care dintre expresiile de mai jos poate realiza asignarea unei variabile de tip numeric: a) value='5'; b) value="5"; c) value="5"+5;

d) value=5+5; e) value="5"&"5". 15. Care dintre expresiile de mai jos poate realiza asignarea unei variabile de tip sir de caractere: a) str="Intrebare corecta"+5; b) str="Intrebare gresita"+'5'; c) str="Intrebare gresita"&"5"; d) str=(Intrebare)+5; e) str="Intrebare" + (corecta) & 5. 16. Care sunt operatorii valabili in Visual Basic: a) +,-,*,/; b) +,-,*,/,^,Mod,&; c) ^,Mod,&; d) +,-,*,/,^,Mod,&, sqrt,radius; e) +,-,*,/,^,Mod,&, MsgBox. 17. Ce este asignarea unei variabile: a) declararea ei; b) initializarea ei; c) atribuirea unei valori exclusiv numerice; d) atribuirea unei valori exclusiv nenumerice; e) atribuirea unei valori din domeniul de reprezentare al acesteia. 18. Cum se face declararea unei variabile: a) prin folosirea cuvantului cheie DIM; b) initializarea ei; c) atribuirea unei valori exclusiv numerice; d) atribuirea unei valori exclusiv nenumerice;

e) prin folosirea cuvantului cheie DECLARATION. 19. Declararea unei variabile: a) este obligatorie la inceputul programului; b) este obligatorie la sfarsitul programului; c) este obligatorie in fereastra de cod inainte de utilizarea acesteia; d) este obligatorie in fereastra de cod dupa utilizarea acesteia; e) nu este obligatorie. 20. Declararea operatorilor: a) trebuie realizata la inceputul programului; b) trebuie realizata la intrarea in functiile matematice; c) se face in zona ferestrei de cod prin cuvantul OPER; d) se face prin folosirea exclusiva a operatorilor definiti in Visual Basic; e) nu este posibila. 21. Instructiunile de control realizeaza: a) Controlul mersului programului prin subrutine; b) Luarea deciziilor logice si ciclarea instructiunilor; c) Controlul bazelor de date relationale; d) Navigarea in bazele de date; e) Salvarea fisierelor proiectului Visual Basic. 22. Instructiunea IF.THEN.ELSE serveste la: a) Alegerea unei alternative din doua in functie de o conditie; b) Alegerea unei alternative din mai multe in functie de o conditie; c) Alegerea a doua alternative in functie de o conditie; d) Alegerea unei alternative sau iesirea din program daca conditia este adevarata; e) Alegerea unei alternative sau iesirea din program daca conditia este falsa.

23. Instructiunea IF.THEN. serveste la: a) Alegerea unei alternative din doua in functie de o conditie; b) Alegerea unei alternative daca conditia este falsa; c) Alegerea unei alternative daca conditia este adevarata; d) Alegerea unei alternative sau iesirea din program daca conditia este adevarata; e) Alegerea unei alternative sau iesirea din program daca conditia este falsa. 24. O instructiune de decizie serveste la: a) Alegerea unei alternative din exact patru in functie de o conditie; b) Alegerea unei alternative daca conditia este falsa; c) Alegerea unei alternative daca conditia este adevarata; d) Alegerea unei alternative sau iesirea din program daca conditia este adevarata; e) Alegerea unei alternative sau iesirea din program daca conditia este falsa. 25. Cu ajutorul instructiunilor de decizie se poate face: a) Alegerea unei alternative daca conditia este adevarata; b) Alegerea unei alternative daca conditia este falsa; c) Alegerea unei alternative din exact 4 in functie de o conditie; d) Alegerea unei alternative sau iesirea din program daca conditia este adevarata; e) Alegerea unei alternative sau iesirea din program daca conditia este falsa. 26. Cum se iese fortat dintr-o instructiune de decizie: a) Nu se iese fortat ci doar printr-o alternativa; b) Folosind cuvantul cheie EXIT IF; c) Folosind cuvantul cheie EXIT FOR; d) Folosind cuvantul cheie EXIT; e) Folosind cuvantul cheie EXIT ALL. 27. Se pot intercala mai multe blocuri decizionale?

a) Da; b) Da, numai daca primul este tot timpul adevarat; c) Da, numai daca primul este tot timpul fals; d) Da, numai daca al doilea este tot timpul adevarat; e) Nu. 28. Care este maximul de blocuri de decizie inlantuite? a) 1; b) 2; c) 15; d) Oricate; e) 256. 29. Cum se numeste variabila de decizie? a) conditie; b) test terminal; c) operator; d) cuvant cheie; e) cuvant de decizie. 30. Care este cuvantul cheie care termina un bloc decizional? a) nu este necesar un astfel de cuvant; b) END TEST; c) END CONDITIE; d) END IF; e) END LF. 31. Instructiunea FOR.NEXT. serveste la: a) La realizarea unei ciclari cu numar cunoscut de repetitii;

b) La realizarea unei ciclari cu numar necunoscut de repetitii; c) La realizarea unei ciclari in functie de valoarea de adevar a unei conditii cu numar cunoscut de repetitii; d) La realizarea unei ciclari in functie de valoarea de adevar a unei conditii cu numar necunoscut de repetitii; e) La iesirea din program in functie de valoarea de adevar unei conditii. 32. Cuvantul cheie NEXT din cadrul instructiunii FOR.NEXT. serveste la: a) Testarea conditiei; b) Incrementarea contorului; c) Iesirea din ciclu; d) Iesirea din program; e) Anularea conditiei. 33. Cuvantul cheie END FOR din cadrul instructiunii FOR.NEXT. serveste la: a) Testarea conditiei; b) Incrementarea contorului; c) Iesirea fortata din ciclu; d) Iesirea din program; e) Stabilirea pasului de incrementare. 34. Ciclul Do.Loop serveste la: a) La realizarea unei ciclari cu numar cunoscut de repetitii indiferent de conditie; b) La realizarea unei ciclari cu numar necunoscut de repetitii indiferent de conditie; c) La realizarea unei ciclari in functie de valoarea de adevar a unei conditii cu numar cunoscut de repetitii; d) La realizarea unei ciclari in functie de valoarea de adevar a unei conditii cu numar

necunoscut de repetitii; e) La iesirea din program in functie de valoarea de adevar unei conditii. 35. In cadrul unei instructiuni de ciclare Do.Loop, cuvantul cheie While: a) La inceputul ciclului; b) La sfarsitul ciclului; c) Poate fi plasat si la inceput si la sfarsit; d) Nu se plaseaza intr-un astfel de ciclu; e) Serveste la iesirea fortata din ciclu. 36 In cadrul unei instructiuni de ciclare Do.Loop, cuvantul cheie Until a) La inceputul ciclului; b) La sfarsitul ciclului; c) Poate fi plasat si la inceput si la sfarsit; d) Nu se plaseaza intr-un astfel de ciclu; e) Serveste la iesirea fortata din ciclu. 37 In cadrul unei instructiuni de ciclare Do.Loop, cuvantul cheie Exit Do a) Serveste la stabilirea numarului de ciclari; b) Serveste la iesirea normala din ciclu; c) Serveste la iesirea din program; d) Nu se plaseaza intr-un astfel de ciclu; e) Serveste la iesirea fortata din ciclu. 38 Select Case este o structura de control care serveste la: a) Alegerea unei variante din mai multe posibile; b) Realizarea unui ciclu infinit; c) Luarea unei decizii de terminare anormala a programului; d) Repetarea unei secvente de instructiuni de un numar de ori cunoscut;

e) Alegerea unor variante din mai multe posibile in functie de o conditie de decizie. 39 Cuvantul cheie Case Else intr-o instructiune Select Case: a) Serveste la alegerea unei alternative care nu este prezentata prin cuvantul cheie Case; b) Serveste la terminarea fortata a structurii; c) Serveste la terminarea normala a structurii; d) Face trecerea la prima structura de decizie IF.THEN.ELSE; e) Nu este permisa intr-o astfel de structura. 40 Pentru a executa o singura instructiune in functie de valoarea de adevar a unei conditii care este structura cea mai potrivita: a) IF.THEN; b) IF.THEN.ELSE; c) IF.THEN.ELSEIF.ELSE; d) SELECT CASE.; e) IF.THEN.ENDIF. 41 Care este structura cea mai potrivita pentru executarea unei ciclari a unui grup de instructiuni de exact 5 ori: a) FOR.NEXT; b) DO WHILE.LOOP; c) IF.THEN.ELSEIF.ELSE; d) DO.LOOP UNTIL; e) SELECT CASE.. 42 Care este structura cea mai potrivita pentru alegerea unei variante din mai multe posibile, tratand si cazul cand nu exisita nici o valoare corecta: a) SELECT CASE.CASE ELSE.; b) DO WHILE.LOOP; c) IF.THEN.ELSEIF.ELSE;

d) DO.LOOP UNTIL; e) SELECT CASE.. 43 Care este structura cea mai potrivita pentru executarea unei ciclari a unui grup de instructiuni de un numar necunoscut de repetari, obligatoriu executandu-se macar odata structura: a) FOR.NEXT; b) DO WHILE.LOOP; c) IF.THEN.ELSEIF.ELSE; d) DO.LOOP UNTIL; e) SELECT CASE.. 44 Care este structura cea mai potrivita pentru executarea unei ciclari a unui grup de instructiuni de un numar necunoscut de repetari, avandu-se grija de a nu executa niciodata strcutura daca acest lucru nu este necesar: a) FOR.NEXT; b) DO WHILE.LOOP; c) IF.THEN.ELSEIF.ELSE; d) DO.LOOP UNTIL; e) SELECT CASE.. 45 Ce este instantierea multipla? a) o grupare de mai multe obiecte; b) un eveniment windows; c) un mecanism de programare; d) o proprietate comuna a mai multor obiecte; e) o grupare de evenimente. 46 Care este modalitatea prin care Visual Basic realizeaza instantierea multipla.

a) declarand repetat acelasi obiect; b) prin setarea proprietatii index; c) prin setarea proprietatii multiple object; d) prin redimensionarea cu acelasi nume a mai multor obiecte; e) nu se poate realiza in Visual Basic. 47 Cum recunoastem ca un obiect este instantiat multiplu? a) este declarat repetat; b) proprietatea index este setata; c) proprietatea multiple object este setata; d) are obligatoriu proprietatea index setata pe 0; e) are obligatoriu proprietatea index setata pe infinit. 48 Care este avantajul instantierii multiple? a) nu este niciun avantaj; b) eleganta programarii; c) programul ocupa mai putina memorie; d) se foloseste un acelasi nume; e) nu se mai declara variabile. 49 Cum se face referirea la obiectele instantiate multiplu? a) nu se poate face de catre programator; b) nu se poate face de catre program; c) prin nume si index; d) prin nume si object; e) prin nume. 50 Cate instante ale unui obiect pot fi definite? a) 1;

b) 10; c) 100; d) 256; e) o infinitate. 51 Cate obiecte pot fi instantiate multiplu intr-un proiect? a) 1; b) 10; c) 100; d) 256; e) oricate. 52 In ce proiecte putem folosi instantierea multipla? a) In proiecte grafice; b) In proiecte de decizie manageriala; c) In programe contabile; d) In proiecte simple; e) In orice proiecte visual basic. 53 Functia interna MsgBox() serveste la: a) Producerea unui eveniment in formularul principal; b) Afisarea unei ferestre cu un anumit mesaj, intr-o forma stabilita de utilizator; c) Afisarea unei ferestre cu ora curenta; d) Afisarea unei ferestre cu timpul curent; e) Introducerea unei variabile. 54 Functia interna InputBox() serveste la: a) Producerea unui eveniment in formularul principal; b) Introducerea unei variabile, intr-un format stabilit de utilizator;

c) Afisarea unei ferestre cu ora curenta; d) Afisarea unei ferestre cu timpul curent; e) Afisarea unui mesaj. 55 O functie definita de utilizator: a) Serveste la rezolvarea unei sarcini specifice; b) Trebuie apelata obligatoriu la inceputul unui program; c) Nu poate contine nici un parametru intre paranteze; d) Obligatoriu trebuie sa termine si programul curent; e) Nu poate contine o variabila proprie. 56 Functia interna Val() serveste la: a) Conversia unui string in valoare numerica; b) Conversia unei valori numerice in string; c) Afisarea unei ferestre cu ora curenta; d) Afisarea unei ferestre cu timpul curent; e) Afisarea unui mesaj. 57 Functia interna Str() serveste la: a) Conversia unui string in valoare numerica; b) Conversia unei valori numerice in string; c) Afisarea unei ferestre cu ora curenta; d) Afisarea unei ferestre cu timpul curent; e) Afisarea unui mesaj. 58 Ce functie putem utiliza pentru afisarea unor informatii intr-o fereastra? a) InputBox(); b) MsgBox(); c) Afis();

d) Windows(); e) nu exista o astfel de functie. 59 Ce functie putem utiliza pentru preluarea unor informatii intr-o fereastra? a) InputBox(); b) MsgBox(); c) Afis(); d) Windows(); e) nu exista o astfel de functie. 60 Ce functie putem utiliza pentru conversia unui sir de caractere in numar? a) InputBox(); b) MsgBox(); c) Str(); d) Val(); e) nu exista o astfel de functie. 61 Ce functie putem utiliza pentru conversia unui numar in sir de caractere? a) InputBox(); b) MsgBox(); c) Str(); d) Val(); e) nu exista o astfel de functie. 62 Ce tipuri de fisiere contine un proiect visual basic? a) *.vbp, *.frm, *.bas; b) *.vis, *.prj; c) *.prj; d) *.exe;

e) *.com. 63 Ce contine un proiect visual basic? a) toate fisierele aplicatiei; b) toate datele din baza de date; c) fisierele aplicatiei si datele din baza de date; d) instructiunile programului; e) formularele grafice. 64 Ce contine un formular visual basic? a) toate fisierele aplicatiei; b) toate datele din baza de date; c) fisierele aplicatiei si datele din baza de date; d) instructiunile programului; e) formularul grafic cu toate obiectele visuale. 65 Unde sunt salvate liniile de cod? a) in afara formularului; b) intr-un fisier separat; c) in baza de date; d) in zona instructiunilor programului; e) in zona de cod a formularului. 66 Ce contine un fisier *.vbp? a) toate fisierele aplicatiei; b) toate datele din baza de date; c) fisierele aplicatiei si datele din baza de date; d) instructiunile programului; e) formularul grafic cu toate obiectele visuale.

67 Ce contine un fisier *.frm? a) toate fisierele aplicatiei; b) toate datele din baza de date; c) fisierele aplicatiei si datele din baza de date; d) instructiunile programului; e) formularul grafic cu toate obiectele visuale. 68 Ce contine un fisier *.bas? a) toate fisierele aplicatiei; b) toate datele din baza de date; c) fisierele aplicatiei si datele din baza de date; d) diverse functii sub forma unor module; e) formularul grafic cu toate obiectele visuale. 69 Unde este salvat formularul grafic? a) intr-un fisier separat cu extensia *.bas; b) intr-un fisier separat cu extensia *.frm; c) in baza de date; d) in zona instructiunilor programului; e) intr-un fisier separat cu extensia *.vbp. 70 Unde sunt salvate modulele cu diverse functii? a) intr-un fisier separat cu extensia *.bas; b) intr-un fisier separat cu extensia *.frm; c) in baza de date; d) in zona instructiunilor programului; e) intr-un fisier separat cu extensia *.vbp. 71 Ce este proprietatea unui obiect?

a) numele obiectului; b) fisierul de care apartine; c) proiectul din care face parte; d) un atribut care poate lua diverse valori; e) nu exista o astfel de denumire. 72 Cand pot fi setate proprietatile obiectului? a) in timpul rularii programului; b) in timpul realizarii programului; c) atat in timpul rularii cat si in timpul proiectarii programului; d) nu se pot seta; e) dupa executia programului. 73 Unde pot fi setate proprietatile obiectului? a) in program sau in Properties Windows; b) numai in program; c) numai in Properties Windows; d) nu se pot seta; e) in fisierul de configurare al proiectului. 74 Ce proprietati pot fi setate in timpul rularii? a) toate proprietatile obiectului; b) numai proprietatile care nu se pot seta in Properties Windows; c) toate proprietatile obiectului care sunt permise de catre visual basic; d) nu se pot seta; e) numai proprietatile care nu se pot seta in fisierul de configurare al proiectului. 75 Ce proprietati pot fi setate in timpul proiectarii? a) toate proprietatile obiectului;

b) numai proprietatile care nu se pot seta in Properties Windows; c) toate proprietatile obiectului care sunt permise de catre visual basic; d) nu se pot seta; e) numai proprietatile care nu se pot seta in fisierul de configurare al proiectului. 76 Cum se asociaza unui eveniment o actiune? a) nu se poate asocia asa ceva; b) se realizeaza automat de catre visual basic; c) se realizeaza automat de catre sistemul de operare; d) prin scrierea unui cod in dreptul evenimentului respectiv in program; e) prin scrierea evenimentelor in fisierul de configurare al proiectului. 77 Asocierea evenimentelor se poate face in timpul proiectarii sau al rularii? a) nu se poate asocia asa ceva; b) numai in timpul proiectarii; c) numai in timpul rularii; d) atat in timpul proiectarii cat si al rularii; e) depinde de fisierul de configurare al proiectului. 78 Ce este un eveniment? a) un raspuns la o actiune, generat de catre sistemul de operare; b) o proprietate a unui obiect; c) o linie de cod; d) nu exista asa ceva; e) o linie din fisierul de configurare al proiectului. 79 Cine gestioneaza evenimentele? a) Sistemul de ferestre; b) Sistemul de operare;

c) Procesorul; d) Visual Basic; e) Programul. 80 Evenimentele au proprietati? a) Nu; b) Da; c) Depinde de sistemul de operare; d) Depinde de program; e) Depinde de fisierul de configurare al proiectului. 81 Ce sunt controalele in Visual Basic? a) Obiecte care pot interactiona cu utilizatorul; b) Obiecte care permit gestiunea evenimentelor; c) Obiecte care permit setarea proprietatilor altor obiecte; d) Obiecte de control al fluxului programului; e) Nu exista asa ceva. 82 Ce este un control de tip buton? a) Un obiect care simuleaza un buton real si prin apasarea cu mouse-ul se realizeaza o actiune; b) Un obiect care simuleaza un buton real si prin apasarea unei taste de la tastatura se realizeaza o actiune; c) Un obiect care simuleaza un buton real si prin apasare permite setarea proprietatilor altor obiecte; d) Un obiect care simuleaza un buton real si prin apasare permite controlul fluxului programului; e) Nu exista asa ceva.

83 Ce este un control de tip eticheta? a) Un obiect care permite afisarea unei etichete cu un anumit text intr-un formular si prin apasarea cu mouse-ul se realizeaza o actiune; b) Un obiect care permite afisarea unei etichete cu un anumit text intr-un formular; c) Un obiect care permite etichetarea unui obiect in vederea recunoasterii sale de catre sistemul de operare; d) Un obiect care permite etichetarea unui obiect in vederea recunoasterii sale de catre visual basic; e) Nu exista asa ceva. 84 Ce este un control de tip option buton (radio)? a) Un obiect care permite alegerea mai multor optiuni din mai multe existente; b) Un obiect care permite alegerea unei singure optiuni din mai multe existente; c) Un obiect care permite alegerea unei optiuni din 2 sau 3 existente; d) Un obiect care permite alegerea unui post de radio din mai multe existente; e) Nu exista asa ceva. 85 Ce este un control de tip check box? a) Un obiect care permite alegerea mai multor optiuni din mai multe existente; b) Un obiect care permite alegerea unei singure optiuni din mai multe existente; c) Un obiect care permite alegerea unei optiuni din 2 sau 3 existente; d) Un obiect care permite alegerea a 2 optiuni din mai multe existente; e) Nu exista asa ceva. 86 Ce proprietati putem seta pentru controalele utilizate? a) toate proprietatile obiectului; b) numai proprietatile care nu se pot seta in Properties Windows; c) toate proprietatile obiectului care sunt permise de catre visual basic; d) nu se pot seta; e) numai proprietatile care nu se pot seta in fisierul de configurare al proiectului.

87 Cum asociem evenimente controalelor? a) nu se poate asocia asa ceva; b) se realizeaza automat de catre visual basic; c) se realizeaza automat de catre sistemul de operare; d) prin scrierea unui cod in dreptul evenimentului respectiv in program; e) prin scrierea evenimentelor in fisierul de configurare al proiectului. 88 Cate instantieri multiple putem avea cand utilizam un control? a) 1; b) 10; c) 100; d) 256; e) oricate. 89 Putem folosi controale Visual Basic in alte sisteme de operare decat Windows? a) Da; b) Nu; c) Da,doar in Linux; d) Da, doar in MSDOS; e) Da, doar daca avem procesor pentium IV. 90 Controalele Visual Basic sunt obiecte sau evenimente? a) obiecte; b) evenimente; c) proprietati ale obiectelor; d) actiuni asociate evenimentelor; e) nici obiecte nici evenimente. 91 Ce este un meniu in Visual Basic?

a) o lista de optiuni; b) un meniu windows prin care rulam un program Visual Basic; c) un meniu prin care setam proprietati ale obiectelor; d) un meniu windows atasat unui program Visual Basic; e) nu exista asa ceva. 92 Care este diferenta intre un meniu Windows si unul Visual Basic? a) meniul windows este mai complex; b) meniul Visual Basic este mai complex; c) diferentele sunt de actiune din partea utilizatorului; d) diferentele sunt de forma grafica; e) nu exsita diferente, sunt la fel. 93 Cum se folosesc meniurile? a) nu se pot folosi; b) se scrie codul pentru ele in limbaj Visual Basic; c) din Menu editor; d) se deseneaza in Paint; e) se deseneaza in Paint si apoi se scrie codul in Visual Basic. 94 Putem construi meniuri contextuale in Visual Basic? a) Da; b) Nu; c) Da,doar in Linux; d) Da, doar in MSDOS; e) Da, doar daca avem procesor pentium IV. 95 Putem folosi simultan intr-un formular un meniu si un meniu contextual? a) Da;

b) Nu; c) Da,doar in Linux; d) Da, doar in MSDOS; e) Da, doar daca avem procesor pentium IV. 96 Cate meniuri putem avea pe un formular? a) 1; b) 10; c) 100; d) 256; e) oricate. 97 Cate meniuri contextuale putem avea pe un formular? a) 1; b) 10; c) 100; d) 256; e) oricate. 98 Putem folosi submeniuri in Visual Basic? a) Da; b) Nu; c) Da,doar in Linux; d) Da, doar in MSDOS; e) Da, doar daca avem procesor pentium IV. 99 Cate submeniuri putem avea intr-un meniu? a) 1; b) 10;

c) 100; d) 256; e) oricate. 100 Ce sunt submeniurile? a) nu exista asa ceva; b) meniuri incluse in meniu; c) un meniu care apare la click dreapta pe formular; d) un meniu care apare la click stanga pe formular; e) un meniu care apare la dublu click dreapta pe formular.

Crearea unei baze de date in VB.NET


1 comment Baza de date este un termen ce desemneaza un fisier structurat, creat in vederea stocarii si administrarii datelor. Administrarea datelor in baze de date vizeaza operatii precum: regasirea, sortarea, gruparea si relationarea datelor. Stocarea si administrarea datelor se realizeaza prin intermediul sistemelor de gestiune a bazelor de date SGBD. Un exemplu de astfel de SGBD este SQL Server. Mai mult, acesta este un SGBD Relational.

Teoria bazelor de date relationale specifica organizarea datelor in tabele care pot fi relationate: se stabilesc legaturi intre tabele pentru datele care fac parte din aceeasi categorie. Astfel, se reduce redundanta si creste integritatea datelor. Reducerea redundantei si cresterea integritatii datelor se realizeaza printr-un proces de normalizare a datelor. In categoria obiectelor incluse intr-o baza de date relationala face parte si tabelul. Obiectul de tip tabel contine coloane, linii, campuri (valoarea aflata la intersectia unei linii cu o coloana), tipuri de date asociate coloanelor, dimensiunea maxima a campurilor si posibilitatea de stocare a valorilor nule. De asemenea, un camp/o combinatie de campuri din structura tabelului trebuie sa aiba rol de cheie primara. Cheia primara reprezinta campul/campurilor care asigura unicitatea unei inregistrari intr-o tabela. Inregistrarea este multimea valorilor asociate campurilor definite in structura tabelului. Relationarea datelor stocate in tabele se realizeaza prin cheile primare si cheile externe. Cheia externa este campul dintr-un tabel care se leaga de cheia primara definita in alt tabel, identic din punct de vedere al tipului asociat definirii campului. Cheia externa trebuie asigure constrangerea de Referential Integrity pentru a asigura consistenta bazei de date din punctul de vedere al relatiile construire intre tabele. Astfel, intr-o tabela cheia externa trebuie sa

contina doar valori ale cheii primare din tabelul cu care se stabileste o relatie. Crearea unei baze de date in Visual Studio 2008 se realizeaza astfel:

crearea unei aplicatii pe baza sablonului Windows Forms Application; din meniul Project, se selecteaza comanda Add New Item;

Caseta de dialog Add New Item


din caseta de dialog Add New Item, se selecteaza Local Database; se denumeste baza de date creata ca fiind Angajati; afisarea in Visual Studio a ferestrei Server Explorer prin aplicarea unui dublu-click pe denumirea bazei de date Angajati.sdf ce a fost introdusa in structura aplicatiei si vizualizata in fereastra Solution Explorer; din fereastra Server Explorer, se acceseaza lista de tabele incluse in baza de date prin Data Connections/Angajati.sdf/Tables; din meniul contextual al listei de tabele, se selecteaza Create Table, afisandu-se pe ecran caseta de dialog New Table;

Caseta de dialog New Table

se introduce denumirea tabelei in campul Name si se specifica structura tabelei prin definirea campurilor si a tipurilor de date asociate acestora.

Caseta de dialog Edit Table Popularea cu date a unui tabel se realizeaza astfel:

din fereastra Server Explorer, se selecteaza tabelul din lista de tabele Tables; din meniu contextual asociat tabelului, se selecteaza comanda Show Table Data; se afiseaza zona de editare a datelor in care se introduc valorile campurilor; inserarea datelor in tabel are loc automat la parasirea cursorului de mouse a inregistrarii curente.

Editarea datelor unei table in vizualizarea Show Table Data

Tehnologie

Afaceri

Referate

Didactica

Legislatie

Proiecte vezi toate proiectele

PROIECT DE LECTIE M CLASA I Compararea num elemente a doua multimi

PROIECT DE ACTIVITA mijlocie Cand/cum si de ce Flori de mai multe culori Strategia in proiectare

nformatica ORMATICA - Baza de date relationala aplicata intr-o biblioteca scolara

PROIECTAREA SISTEM INFORMATICE

Lucrari de dip

T LA INFORMATICA - Baza de date nala aplicata intr-o biblioteca scolara

vezi toate lucrarile de diplo

RETICPETRU CERCEL TARGOVISTE

PROIECT DE DIPLOMA BALNEOFIZIOTERAPIE RECUPERARE MEDICAL BALNEOFIZIPTERAPICE

RMATICA

LUCRARE DE DIPLOMA MANAGEMENT - MANA CALITATII APLICAT IN FABRICARII BERII. STU FABRICA DE BERE SEBE

onala aplicata intr-o biblioteca scolara.

EA TEMEI

LUCRARE DE DIPLOMA AGRICULTURA - IAURT

000 este un instrument puternic pentru dezvoltarea aplicatiilor si bazelor de date. Cu ajutorul nu numai baze de date ci si aplicatii complexe.

PROIECT DE DIPLOMA INDUSTRIALA SI INGIN MEDIULUI - TEHNOLOG GLUTAMIC

cum sugereaza si numele, o aplicatie proiectata pentru gestionarea cartilor imprumutate dintr-o

Lucrari lice vezi toate lucrarile de licen

ua a performantelor infrastructurii informatice ofera utilizatorilor posibilitati de utilizare rapida lor documentare.

CONTABILITATEA FINA TESTE GRILA LICENTA

telei INTERNET, BiblioSoft se va integra in dinamica circuitului mondial al informatiei. de date nationale si internationale de nivel academic va asigura astfel sincronizarea mporane ale cunoasterii, oferind utilizatorilor un potential remarcabil pentru studiu si cercetare. ucturii in tot mai multe biblioteci din cadrul sistemului de invatamant configureaza treptat un utilizare a resurselor documentare in intregul ansamblu.

PROIECT LICENTA TUR MONOGRAFIA COMUNE DIN JUDETUL CALARAS

LUCRARE DE LICENTA MANAGEMENT, INGINE ECONOMICA IN AGRICU DEZVOLTARE RURALA SI OBTINEREA VINURIL VIZIANU S.R.L

i unei structuri eficiente pentru datele necesare uneiprobleme este cheia intregii aplicatii.in e de gestiune problema cea mai mare un o reprezinta implementarea aplicatiei de exploatare a

LUCRARE DE LICENTA

oiecatarea unei structuri care sa permita acceseul cat mai rapad la date si care sa sufere cat mai

ITALIANA - La forma pas Diateza pasiva in limba ital

Lucrari doct or de date necesare intr. o aplicatie este o activitate complexa care conditioneaza in mare vezi toate lucrarile de docto e memorie, precum si viteza de prelucrare si uneori chiar efortul de proiectare si u realizare ei trebuie sa se tine seama de o serie de factori cum ar fi: volumul datelor; operatiile Proiecte de at les cele de actualizare; durata de viata, utilizarea eficiente a spatiului de memorare etc. vezi toate proiectele de ates

fi definita ca un ansamblu de date interconectate, impregna cu descrierea lor, care raspunde izare, coordonare, integrare si difuzie a informatiilor si care asigura satisfacerla tuturor ucrare ale tuturor utilizatorilor dintr-un sistem.

ATESTAT INFORMATIC UL

e al bazei de date(SGBD) este un pachet de programe ce permite utilizatorilor sa interactioneze PROIECT ATESTAT FRI igurand acesteia urmatoarele caracteristici: MANICHIURIST-PEDICH VOPSITUL PARULUI denta datelor fata de programul care le gestionzaza .

GENERATOR DE TESTE atestat Visual FOX PRO

us de redundatnta. Din considerente de optimizare a timpului de raspuns se acepta un anumit redundante.

PROIECT ABSOLVIRE A ECONOMIE - STUDIUL A ECONOMICE LA FIRMA S.C.SPORTVIC.S.R.L.

ea datelor (protectia la accesul neautorizat in vederea exagerarii sau distrugerii unor date cu con fidential).

tea date lor (protectia la defectiuni hard sau soft)

enta; facilitati de utilizare a datelor fara ca uilizatorii sa cunoasca ba de date in intreaga itate.

de descriere si manipulare a datelor de nivel foarte inalt.

or limbaje performante de regasire a datelor care permit exprimarea sub forma unor conversatii io cat mai complexe de selctare a informatiei si indicarii unor reguli cat mai generale de editare or solicitate.

multiutilizator; datele pot fi accesate si chiar gestionate din diferite noduri ale retelei de oare de diferiti uilizatori.

itate; gestiunea datelor organizate in baze de date a fost preocuparea multor sepcialisti de sof, du-se la oferirea unor

Sistemul de operare W CONCEPTUL DE INFORMAT Sumatoare se Date si inform SISTEMUL INFOR INSTRUMEN MANAGEMEN ORGANIZATIILOR E SOCIALE Cautarea de sirur Sistem informatic privin credite persoanel Trasaturile marketingulu secol XX

estiune care permit gestiunea unor date foarte cimplexe in

Termeni si co Contact Creeaza si

e maxima.

ne a bazelor de date (SGBD) este un mecanism al carui principiu fundamental consta, la modul asazisa abstractizare a datelor stocate pe suport. Exista trei nivele de abstractizare, corespunzand e datelor: fizic, conceptual si logic.

Modelul fizic (sau intern) priveste datele asa cum sunt ele stocate pe suport si reprezinta nivelul ero al abstractizarii;

Modelul conceptual priveste datele prin semnificatia lor reala;

Modelul logic (sau extern) priveste datele prin prisma utilizatorului final.

lor de baze de date implica din aceasta perspectiva doua etape initiale extrem de importante: i respectiv implementarea fizica a modelului de date, iar aceste etape se vor urmari si in acest

te un SGBDR ce pune la dipozitie utilizatorilor aplicatii complexe care sa ajute la crearea si r de date si la obtinerea rapoartelor pe baza acestor date

te o aplicatie Windows si de aceea interfata sa verifica toate aspectele unei interfete clasice cu ferstre, in mod grafic, multitasking, intr-o maniera condusa de evenimente.

s contine mai multe categorii de obiecte : tabele, interogari, rapoarte, formulare, macro-uri si gram).

es)

ess are ca model conceptual modelul reltional.

toate caracteristicile de baza : o tabela este o colectie de date legate intre ele, memorate sub i cmpuse din unul sau mai multe campuri. Ca regula generala, un utilizator oarecare are acces n intermediul unor formulare ,interogari, si/sau rapoarte. Desigur, pentru proiectantul bazei de osibilitati de acces direct la structura si continut

(queries)

nterogari sunt definite acele cereri de informatii al

ecesita anumite prelucrari ale datelor memorate in tabelele bazei de date : sortari, totalizari, rmediul lor putem combina mai multe tabele in vederea obtinerii rapoartelor sau chiar putem acestea, in mod simultan, prin formulare atasate interogarilor.

orms)

mit si video-format sau macheta de vizualizare, introducere, etc. apare ca o fereastra Windows textbox, label, combo etc) legate sau nu de datele continute in tabelele bazei de date. Un losit chiar ca panou de prezentare a aplicatiei sau ca panou de comanda care ii conduce pe arul sau raportul dorit.

ports)

dalitati de prezentare a infomatiilor sintetice sau detaliate despre o anumita activitate. Apar sub chete saudiagrame

(pages)

b sunt fisiere HTML stocate independent de containerul bazei- fisierul.mdb- dar care permit ntroducerea de date prin internet. De precizat ca obiectele pages sunt introduse in Access 2000

i trebuie sa foloseas Internet Explorer 5(Data Access Pages nu functioneaza in cu versiuni mai

macros)

uctiunile sunt extensii ale limbajului Visual Basic si permit automatizarea actiunilor asupra ale bazei de date. De ex un macro poate deschide/inchide un formular poate trimite date pe doar afisa mesaje adecvate.

gram(modules)

m contin codul sursa al unor functii si proceduri scrise in limbajul VBA

OGRAMARE

este o colectie de obiecte care coopereaza pentru indeplinirea unei sarcini comune.

pentru realizarea unei aplicatii o reprezinte intelegerea clara a ceea ce asteapta utilizatorii de la

e conceptie este aceea de analiza a cerintelor. Programul trebuie sa stocheze date despre: in inventarul bibliotecii, imprumutate catre elevi,

torilor pe sali de lectura,

onatilor care nu restituit la timp cartile.

a sistemului o reprezinta stabilirea entitatilor de date: Denumirea cartii / Nr inventar, Numele si ui etc., precum si a caracteristicilor (atrbutelor) acestora: Autorul, Editura, Numele si ui etc.

erminate entitatile de date si atributele acestora, se organizeaza entitatile de date in tabele si se orespunzatoare atributelo. Fiecare tabel va contine un camp de identificare (ID) folosit drept

TI - cuprinde cartile aflate in inventarul bibliotecii, Astfel, acesta contine urmatoarele campuri:

RTII / NR INVENTAR, camp de tip text, indexat, fara valori duplicat;

de tip text;

e tip text;

p text;

I, camp de tip date/time, pentru acest camp se foloseste masca 99/99/99.

DATE PRIMARE - cuprinde fisele abonatilor. Astfel, acesta contine urmatoarele campuri:

camp de tip autonumber, neindexat;

mp de tip date/time, pentru acest camp se foloseste masca 99/99/99;

, camp de tip text;

ELE, camp de tip text;

NUMERIC PERSONAL, camp de tip number, numar de zecimale = 0, atributul Validation <=9999999999999, acesta insemnand ca acest camp nu poate avea mai mult de 13 caractere; camp de tip text;

REA CARTII / NR INVENTAR, camp de tip text, indexat, fara valori duplicat, pentru acest sindu-se optiunea Lookup de tipi Combo Box,

TURNARII, camp de tip date/time, pentru acest camp se foloseste masca 99/99/99;

ERE, camp de tip :Yes/No, in care se marcheaza daca abonatul inregistreaza o intarziere peste

ERMISE asociaza fiecarui abonat cate un

olosit ulterior la printarea a doua tipuri de rapoarte: permis pentru unul sau mai multi cititori.

ALI DE LECTURA isi gaseste utilitatea in emiterea de rapoarte avand drept criterii de ctura cu valori posibile 1 si 2 , selectate dintr-un combo box cu valori predefinite si e.

n realizarea aplicatiei BiblioSoft este aceea de creare a relatiilor intre tabele. Astfel, intre legatura pentru ca utilizatorii sa poata vedea atributele cartiloe aflate in inventarul bibliotecii. e este una de tipul unul la mai multi. Aceaste se realizeaza folosind optiunea Relationship , prin tragerea campului din tabelul primar in campul corespondent din tabelul asociat, in l DENUMIREA CARTII / NR INVENTAR.

ele se stabilesc intre: PERMISE SI DATE PRIMARE , relatia stabilita fiind una de tip ;

URA SI DATE PRIMARE , relatia stabilita fiind una de tip unul la mai multi ;

se creaza si foloseste o baza de date consta in extragerea rapida a datelor . Interogarea (query) telor pe care vreti sa le regasiti: ce campuri, din care tabele, corespunzator caror criterii, in ce

a simultan date din mai multe tabele.In cazul in care doua tabele sunt implicate intr-o relatie de nterogare are in mod normal cate un rand pentru fiecare inregistrare din patrea mai multi , iar unul a relatiei sunt repetate pentru fiecare rand.

trei moduri de afisare: modul Design, in care se creeaza definitia interogarii, modul Datasheet, edea rezultatele interogarii si modul SQL pentru un nivel mai profund.

i interogari noi se selecteaza eticheta Queries in fereastra Database si se execua click pe New.

chide o fereastra Query Design precum si fereastra Sshow Tables. Se executa dublu-clic pe DATE PRIMARE.

urile implicate in interogare sunt adaugate grilei de iesire printr-un dublu-clic pe campurile ntre cele doua tabele. Tinand cont de faptul ca in tabelul DATE PRIMARE EXISTA doua UMELE si PRENUMELE si avand in vedere ca dorim emiterea unui raport sortata dupa acest interogarii, am introdus un camp nou format din campurile de mai sus, folosind functia & , toarea:

]![NUMELE] & ' ' & [DATE PRIMARE]![PRENUMELE]

losita este Query2, care are criteriul [Forms]![PERMISE]![NR PERMIS] , aplicat campului n tabelul PERMISE , din formularul PERMISE .

Y3 este creata in scopul emiterii raportului de premise eliberate pentru toti abonatii.

Y4 foloseste urmatoarele criterii de selectie:

DE LECTURA]![Combo19] And <=[Forms]![SALI DE LECTURA]![Combo21], valori formularului SALI DE LECTURA ;

SALI DE LECTURA]![Text45] And [Forms]![SALI DE LECTURA]![Text47], valori introduse lui SALI DE LECTURA .

Y5 realizeaza selectia inregistrarilor din cadrul

PRUMUT care au valoarea > 30, respective afiseaza abonatii care au depasit te rmenul de 30 umutului.

poartelor metode pentru tipuri de sectiuni si controale: Toolbox, Field List si Properties.

izat in aceasta lucrare, obtinut prin metoda Wizard, prezinta istoricul cartilor imprumutate catre eriu de sortare fiind campul NR CRT, iar cel de al doilea data eliberarii cartilor, pe baza iu facandu-se si gruparea..

este proiectat intr-o configuratie tabelar in modul Continuous Form. Pe langa sectiunea Details sectiunile antet si subsol de raport.

te la emiterea acestui raport sunt exact campurile continute de interogarea QUERY1.

lui este realizata de o macrocomanda Macro3. O comanda macro este o secventa de actiuni soare o comanda.Actiunile se selecteaza dintr-o lista derulanta de unde se seteaza si detaliile mplicate de operatia respectiva.

ermit realizarea sarcinilor repetitive mai usor si mai repede. Prin asocierea unei comenzi macro

pasari de tasta sau unui element de meniu se poata imbunatati interfata aplicatiei. O comanda semenea asociata unui eveniment, de exemplu emiterea unui raport.

menzii Macro3 s-a selectat sectiunea Macro din fereastra Database si apoi executand clic pe

u fost:

area formularului curent INTROCUCERE DATE

umentele de deschidere in modul Print Preview a raportului Raoprt.

manda macro, in cadrul aplicatiei BiblioSoft au mai fost create si urmatoarele comenzi:

ta comanda se executa odata cu deschiderea aplicatiei, cu actiunea de a deschide Formularul E DATE;

uta la evenimentul OnClick executat din formularul LISTA CARTI , butonul tiunile executate fiind salvarea datelor din tabelul CARTI , inchiderea formularului LISTA derea formularului INTRODUCERE DATE ;

uta la evenimentul OnClick executat din formularul INTRODUCERE DATE , butonul ERE CARTE NOUA , actiunile executate fiind minimizarea formularului INTRODUCERE hiderea formularului LISTA CARTI ;

restrele primare folosite pentru introducerea si afisarea datelor in ACCESS 2000. Un formular i moduri diferite:

este utilizat pentru a schimba prezentarea si proprietatile unui formular, sau pentru a modifica formular.

te similar, cel putin in aparenta, cu afisarea directa a tabelului sau a interogarii;

inta modul de afisare normal al unui formular in curs de utilizare.

datelor referitoare la fisele de abonati (data imprumutarii cartii, numele celui care a adreea, denumirea cartii etc. s-a creat formularul INTRODUCERE DATE.Pentru crearea ocedat in felul urmator s-a ales eticheta Form din fereastra Database, s-a executat clic pa New, ea Form Wizard, formularul folosit avand asezarea in pagina Columnar (asezare in coloana);

ntroale se executa clic pe pictograma ToolBox de pe bara de instrumente. In acest formular am e butoane:

TRODUC CARTE NOUA - la evenimentul OnClick actioneaza comanda de tip macro

APORT OnClick - la evenimentul OnClick actioneaza comanda de tip macro Macro3;

STA CARTI este un formular cu ajutorul caruia se introduc cartile intrate in gestiunea Campurile afisate in acest formular sunt cele din tabelul CARTI .

executa mai multe comenzi prin intermediul urmatoarelor butoane:

ADAUG CARTE - la evenimentul OnClick pregateste acest formular in vederea i unei noi inregistrari in tabelul CARTI ;

SALVEZ - la evenimentul OnClick salveaza noua inregistrare anterior introdusa;

CAUT - la evenimentul OnClick incepe procedura de cautare in oricare din campurile ul CARTI ;

INCHID - la evenimentul OnClick actioneaza comanda de tip macro Macro1;

PERMISE afiseaza pe ecran formularul PERMISE care permite afisarea la ecran a doua : permise pentru inregistrarea curenta si permise pentru toti abonatii, dupa caz;

SALI DE LECTURA afiseaza pe ecran formularul SALI DE LECTURA care permite la ecran a raportului de afisare a utilizarii salilor de lectura in functie de criteriile de selectie n formular;

ABONATI INTARZIATI permite afisarea raportului in modul DesignView a raportului NATI INTARZIATI . extensia mbd. Acest fisier se poate transforma

ensia mde.

OGRAMULUI

ECRAN, MODELE DE RAPOARTE

TE PRIMARE

A QUERY1, LEGATURA INTRE TABELE DE TIPUL UNUL LA MAI MULTI

RAPORT1

MACRO MACRO1

MACRO MACRO2

MACRO MACRO3

L INTRODUCERE DATE, PREZENTAT IN DESIGN VIEW, FEREASTRA DE BUTONULEI CU ETICHETA RAPORT;

INTRODUCERE DATE, PREZENTAT IN PREVIEW MODUL DE CULEGERE A

INTRODUCERE CARTI, PREZENTAT IN PREVIEW MODUL DE CULEGERE A

L SALI DE LECTURA , PREZENTAT IN PREVIEW MODUL DE CULEGERE A

PERMISE , PREZENTAT IN PREVIEW MODUL DE CULEGERE A DATELOR;

S PAGE PREZENTAT IN MODUL PREVIEW MODUL DE VIZUALIZARE A DATELOR

ABONATI INTARZIATI

oarte util in orice biblioteca scolara.Baza de date creata permite accesarea cu usurinta a tuturor a cartile din biblioteca.

mentarea bazelor de date, Kovacs Sandor

ementele de baza ale implementarii bazelor de date cu Microsoft Access 2000, cel mai popular ram de gestiune a bazelor de date relationale care ruleaza sub sistemul de operare Windows (95, XP): interfata aplicatiei, crearea si gestiunea bazelor de date, tabele, tipuri de relatii, interogari, pagini de acces la date, limbajul SQL.

osoft Access 2000, Pavel Nastase Florin Mihai

za atat utilizatorilor si programatorilor incepatori, cat si celor care au deja o baza de cunostinte, mbogateasca sau actualizeze. Abordarea pas cu pas a caracteristicilor Access 2000 insotita de va a conceptelor asociate bazelor de date, prezentarea notiunilor de programare proprii SQL confera lucrarii dubla calitate de curs practic si manual complet.

hnologii asistate de calculator-varianta Access(manual clasa a XII-a) : Autori :-MARIANA PANTIRU, IRINA-IOANA PANTIRU.

.com Share to Printeaza AddThis

Copyright 2013 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational.

Structuri si elemente de programare


calculatoare
+ Font mai mare | - Font mai mic

DOCUMENTE SIMILARE Share on print Share on facebook Share on twitter Share on email More Sharing Services 0 TEHNICI MODERNE DE REALIZARE A PORTRETULUI ROBOT ATESTAT LA INFORMATIC TITLUL LUCRARII HTML - TIRGU NEAMT - LUCRARE PENTRU ATESTAREA COMPETENTELOR PROFESIONALE Codificarea informatiei in calculatoarele numerice Ghid pentru calculatoare - Prelucrarea si stocarea informatiilor, sursa, placa de baza etc Copierea entitatilor si realizarea de retele - 3D studiomax Intretinerea fisierelor de control Oracle9I AUDITUL APLICATIILOR Microsoft Project Prezentare generala Meniul principal - B-Plan Definirea virusilor informatici TERMENI importanti pentru acest document structuri repetitive decizionale : : se calculeaza si returneaza o lista cu elemente de forma Nume mediegen in java : : structuri in

Structuri si elemente de programare

programare :

Programarea computerelor reprezinta un proces din cadrul ingineriei software1[1] prin care, in baza unei documentatii riguros elaborate, se scrie, intr-un limbaj specific numit limbaj de programare, functionalitatea unui program. Programarea presupune pe de o parte stapanirea unui anumit limbaj de programare iar pe de alta parte intelegerea unui ansamblu de tehnici de programare deoarece majoritatea sarcinilor implementate intr-un program se reduc la algoritmi si tehnici de programare foarte bine cunoscute si studiate. In cadrul acestui capitol vom aborda detalii ale programarii facand referinta directa la structura limbajului de programare Visual Basic. Ne-am decis sa abordam acest limbaj de programare deoarece spre deosebire de alte medii de dezvoltare a aplicatiilor, Visual Basic este foarte usor de invatat chiar si de catre nespecilisti, carora le ofera posibilitatea realizarii unor aplicatii profesionale. In plus, intentia noastra este aceea de a dezvolta aceasta latura a programarii in stiintele sociale prin lucrari viitoare mult mai detaliate in care sa abordam aplicatii specifice dezvoltate prin intermediul acestui limbaj. Totusi, structurile si elementele informationale de baza vor fi tratate folosind standardul ANSII C, standard de referinta in programare.

1.1

Structura generala a unei aplicatii

Un mediu vizual de programare cum este Visual Basic va permite sa scrieti aplicatii la fel de usor cum desenati sau cum scrieti un text. Asemena medii, numite si IDE-uri (Integrated Development Environment) poseda un set de instrumente foarte puternice cum ar fi butoane, casete de text, liste derulante, casete de bifare, casete de optiuni si asa mai departe care pot fi pozitionate pe formular printr-o simpla tragere cu mouse-ul. Un asemenea obiect dispus pe un formular nu face insa nimic. Acestui obiect trebuie sa i se asocieze un bloc de cod care sa descrie comportamentul obiectului respectiv. Ulterior, blocul de cod urmeaza a fi testat in vederea sesizarii si tratarii erorilor care ar putea sa apara. In concluzie, putem identifica trei etape in procesul de elaborare al programelor: 1. Crearea elementelor vizuale; 2. Scrierea codului care sa descrie comportamenul elementelor vizuale: 3. Testarea si depanarea codului In Visual Basic, codul este stocat in module de cod. Acest limbaj de programare permite existenta a 3 categorii de module de cod: formular, standard si clasa.

1[1] Inginerie software disciplina a ingineriei care abordeaza complexitatea si autonomia software-ului, abstractiile introduse in noile tehnologii, managementul oamenilor, al calitatii si al evolutiei programelor, crearea arhitecturii, analiza si proiectarea orientata pe obiecte, procesul de dezvoltare etc.

Modulele formular reprezinta baza aplicatiilor si contin proceduri care trateaza evenimentele, proceduri generale, declaratii de variabile si constante, tipuri si proceduri externe. Practic orice fereastra vizibila impreuna cu toate elementele vizuale pe care le contine este cuprinsa intr-un modul de tip formular. Modulele standard se prezinta ca niste containere pentru proceduri si declaratii apelate in comun de alte module. Pot contine declaratii globale, apelabile din orice parte a aplicatiei sau la nivel de modul, pentru variabile, constante, tipuri, proceduri externe etc. Caracteristica acestor module este aceea ca blocurile de cod scrise aici pot fi reutilizate de orice parte a aplicatiei dumneavoastra. Spre exemplu, putem scrie rutina care calculeaza varsta unui subiect intr-un modul standard daca aceasta va fi folosita in comun de mai multe formulare. Modulele clasa reprezinta fundamentul programarii orientate pe obiecte. Aici puteti scrie cod pentru crearea obiectelor noi in care veti include propriile proprietati si metode.

1.2

Variabile, constante si tipuri de date

Pentru a memora temporar anumite valori atunci cand programul executa calcule, sunt folosite variabilele. O variabila este o locatie cunoscuta de memorie utilizata pentru a stoca o valoare care poate fi modificata de catre program. Variabilele trebuie sa aiba un nume si trebuie declarate inainte de a fi utilizate2[2]. Declararea variabilelor se face prin stabilirea unui nume si a unui tip de date ce poate fi stocat in acea variabila. Numele unei variabile poate fi orice combinatie de litere si/sau cifre care respecta urmatoarele reguli: incepe cu o litera, nu contine caractere speciale, nu depaseste 255 de caractere, este unic in cadrul aceluiasi domeniu. Spre exemplu, putem defini o variabila care stocheaza varsta unui subiect folosind sintaxa Dim intVarsta as Integer. Prin aceasta declaratie am definit o variabila care va stoca numere intregi reprezentand varsta subiectilor. Majoritatea programatorilor definesc variabilele folosind notatia ungara. Aceasta stipuleaza ca o variabila incepe cu caractere mici si cuprinde la inceput identificatorul tipului de date dupa care numele variabilei respective. Desi numarul maxim de caractere este de 255, sunt extrem de rare situatiile in care avem nevoie de atatea caractere. Nu ar avea nici un sens sa definim o variabila de incrementare cu numele intAceastaEsteOVariabilaDeIncrementare cand am putea spune intIncrement sau mai simplu intI. Totusi, utilzarea unei singure litere pentru definirea variabilei poate crea confuzii. Spre exemplu daca intalniti in cod o variabila numita strS, ce va spune? Mai nimic. Este mult mai util sa o denumiti strSex. Acum veti sti ca este vorba despre un sir de caractere ce stocheaza sexul subiectilor. Domeniul unei variabile sau durata de viata a unei variabile defineste portiunea de cod care stie de existenta sa. O variabila poate avea domeniul fixat la nivelul procedurii sau la nivelul modului. In primul caz aceasta va fi recunoscuta doar in cadrul procedurii care o apeleaza (variabila locala) iar in cel de-al doilea caz, poate fi apelata in intregul modul.

2[2] Desi unele limbaje de programare printre care si Visual Basic accepta declararea automata a variabilelor in momentul crearii si utilizarii lor, se recomanda totusi declararea explicita a acestora pentru a se evita problemele ce pot sa apara.

Spre exemplu, in procedura urmatoare variabila intI este declarata local: Private sub cmdButon_Click() Dim intI as Integer End Sub In aceasta situatie, variabila poate fi recunoscuta doar in blocul de cod cuprins intre Private Sub si End Sub. Cu totul altfel se comporta structura urmatoare: Public intX as Integer Private sub cmdButon_Click() Dim intI as Integer End Sub In acest caz observam ca variabila intX nu mai este declarata in interiorul procedurii si mai mult, are atributul Public ce o face disponibila intregului modul. In unele cazuri avem nevoie de variabile globale, accesibile intregii aplicatii (tuturor modulelor din cadrul programului nostru). Definirea unor asemenea variabile se poate face in cadrul modulelor generale, folosind atributul Global. Uneori constatam ca avem nevoie de prezenta unor valori constante care se repeta frecvent. Si ca lucrurile sa fie mai dificile, in majoritatea cazurilor aceste valori constante sunt numere greu de retinut. Este preferabil sa asociem aceste valori unor nume mai usor de retinut si care pot spori lizibilitarea codului. O astfel de asociere se poate face prin intermediul constantelor. Definirea constantelor se supune acelorasi reguli ca si definirea variabilelor. Se prefera insa denumirea constantelor cu majuscule pentru a le diferentia de variabile. Spre exemplu, daca dorim sa folosim un program distribuit in mai multe limbi, constanta pentru limba romana poate fi 8438. In loc sa folosim acest numar, putem sa-l asociem unei constante astfel: Const LANG_ROM=8438 Din acest moment nu mai este nevoie sa specificam in cod numarul ci constanta asociata. Astfel blocurile de cod devin mult mai clare. Am discutat ceva mai devreme despre tipuri de date. In mod general, tipurile de date deriva din cele 5 tipuri principale de date definite de standardul ANSII C si anume: char care stocheaza caractere, int care stocheaza numere intregi, float si double care stocheaza numere in virgula mobila sau numere zecimale si void care declara o functie ce nu returneaza nici o valoare sau creeaza referinte la memorie numite pointeri. In Visual Basic tipurile de date difera ca denumire, desi toate deriva din cele 5 tipuri principale. Astfel, folosind acest limbaj de programare, putem defini: Tipul de date Byte care lucreaza cu numere intregi cuprinse intre 0 si 255

Tipul de date Integer sau Double ce lucreaza cu numere intregi sau cu numere in virgula mobila Tipul de date String care contine siruri de caractere Tipul de date Boolean care contine doar valorile de adevar true/false Tipul de date Date care contine date calendaristice Tipul de date Object care contine obiecte diferite si se foloseste in general in programarea orientata obiect Tipul de date Variant care poate memora orice valoare definita de sistem si realizeaza conversia automata intre diferitele tipuri de date.

1.3

Structuri de control

Permit controlul desfasurarii programului si a fluxului de executie. Acestea se impart in structuri de decizie si structuri repetitive sau structuri de tip bucla.

1.3.1 Structuri decizionale


Prin intermediul acestora pot fi testate conditii si in functie de rezultatul acestor teste se pot efectua diferite operatii. Majoritatea limbajelor de programare implementeaza doua categorii de structuri decizionale: structurile de tip if then else si structurile de tip case. O structura If.ThenElse (daca atunci) se foloseste la executia conditionata a uneia sau mai multor instructiuni. De exemplu, structura de mai jos:
If intVarsta > 100 Then MsgBox Subiectul nu poate fi examinat. Este prea batran ElseIf intVarsta < 0 Then MsgBox Subiectul inca nu s-a nascut. Doriti sa-l examinati?!! Else MsgBox Varsta permite examinarea psihologica End If

Aceasta contine mai multe instructiuni IfThen.Else care testeaza varsta unui subiect. Daca varsta acstuia este mai mare de 100 de ani ori mai mica de 0 ani, programul afiseaza un mesaj catre utilizator prin care il informeaza asupra faptului ca subiectul nu poate fi examinat psihologic. In toate celelalte cazuri (adica varsta cuprinsa intre 0 si 100 de ani) programul informaza utilizatorul ca examinarea psihologica poate fi efectuata.

In structurile de tip ifthenelse pot fi incorporate alte structuri decizionale, la diferite niveluri, vorbind astfel despre structuri decizionale imbricate. Ca o alternativa la structura de tip IfThenElse uneori este mai comod sa folosim structura de tip Case. Aceasta permite executia selectiva a unui singur bloc de instructiuni ales dintre mai multe blocuri. Expresia este evaluata o singura data si se executa blocul corespunzator. Avem de exemplu structura:
Select Case strRol Case Is = Psiholog MsgBox Subiectul este psiholog Case Is = Psihopedagog MsgBox Subiectul este psihopedagog Case Is = Pedagog MsgBox Subiectul este pedagog Case Else MsgBox Nu poate fi determinata profesia subietului End Select

Observam ca programul evalueaza o singura data variabila strRol care stocheaza profesia unui subiect. In functie de continutul acestei variabile, programul afiseaza un anumit mesaj. Daca variabila contine orice altceva in afara de cuvintele psiholog, psihopedagog sau pedagog, programul informeaza utilizatorul ca profesia subiectului nu a putut fi determinata.

1.3.2 Structuri repetitive


Structurile repetitive permit executia repetata a uneia sau mai multor linii de cod. Cele mai multe limbaje de programare implementeaza trei tipuri de structuri repetitive: structura Do.Loop, structura For..Next si structura For Each..Next Buclele Do.Loop se folosesc pentru a executa un bloc de instructiuni de un numar necunoscut de ori. Desi exista mai multe variante, toate evalueaza o conditie numerica pentru a sti daca va continua executia buclei sau nu. Doua dintre variantele acestei bucle sunt mai cunoscute si mai folosite: bucla cu test initial si bucla cu test final. In cazul buclei cu test initial, programul va testa intai conditia. Daca este adevarata el va executa bucla atata timp cat conditia se pastreaza adevarata. In situatia in care conditia initiala este falsa, bucla nu va fi executata niciodata. Do While recSubiecti.EOF txtNume.Text = recSubiecti![Numele]

txtPrenume.Text = recSubiecti![Prenumele] recSubiecti.MoveNext Loop In cazul structurii de mai sus, se evalueaza daca tabelul din baza de date care stocheaza datele subiectilor nu este la ultima inregistrare. Daca aceasta conditie este indeplinita, programul executa bucla pana cand se ajunge la sfarsitul tabelului. Astfel, bucla asigura popularea a doua casete de text cu numele si prenumele subiectului, dupa care trece la urmatorul subiect. In momentul in care tabelul ajunge la ultima inregistrare, bucla este parasita. Desigur, daca tabelul este gol, bucla nu se realizeaza niciodata. Desi acest fragment de cod este functional, rularea lui va va permite sa vedeti doar datele ultimului subiect. De ce? Raspunsul la aceasta intrebare va invitam sa-l gasiti singur si se constutuie intr-o modalitate de evaluare. Bucla cu test final asigura cel putin o parcurgere a sa inainte de a putea fi abandonata. Iata aceeasi structura scrisa pentru o bucla cu test final. Do txtNume.Text = recSubiecti![Numele] txtPrenume.Text = recSubiecti![Prenumele] recSubiecti.MoveNext Loop While recSubiecti.EOF Se observa ca cel putin o data se va incerca popularea celor doua casete de text cu datele subiectilor. O asemenea abordare poate genera la un moment dat o eroare. Ca tema de evaluare va invitam sa identificati situatia in care programul va returna o eroare la executia acestui bloc de cod. Buclele ForNext se utilizeaza in momentul in care se stie precis de cate ori trebuie executate instructiunile cuprinse intre declaratia For si Next. Spre deosebire de buclele DoLoop, aceste structuri repetitive utilizeaza o variabila numita contor a carei valoare creste sau descreste la fiecare trecere prin ciclu. Sa consideram urmatoarea structura repetitiva: For intI = 1 To recTeste.RecordCount lstTeste.AddItem recTeste![Nume] txtNumarTeste.Text = intI recTeste.MoveNext Next intI Sa analizam cum lucreaza aceasta structura. In primul rand, variabila contor intI este initializata cu valoarea 1 dupa care, daca tabelul testelor contine vreo inregistrare, bucla

incepe sa fie executata pana cand se ajunge la ultima inregistrare din tabel. Daca tabelul nu contine nici o inregistrare, bucla nu este executata deoarece proprietatea RecordCount a obiectului de tip tabel returneaza 0 si prin urmare determina incheierea executiei buclei inainte ca aceasta sa inceapa. Bucla nu face altceva decat sa populeze un control de tip lista cu testele disponibile intr-un tabel si sa afiseze valoarea contorului intr-o caseta de tip text, dupa care trece la urmatoarea inregistrare. Puteti observa ca in final structura incrementeaza automat contorul. Buclele For Each Next se aseamana foarte mult cu buclele For Next insa acestea repeta o serie de instructiuni pentru fiecare element dintr-o colectie de obiecte sau din cadrul unei matrici in loc sa repete instructiunile de un anumit numar de ori. Acest lucru este util mai ales in situatia in care nu stim exact cate elemente contine o colectie de obiecte. Daca luam spre exemplu structura: Dim tdfTabele As TableDef Dim objDb As Database Set objDb = OpenDatabase(C:Psihologie.mdb) For Each tdfTabele In objDb.TableDefs() lstTabele.AddItem tdfTabele.Name Next tdfTabele Iata un exemplu ceva mai complex care include alaturi de structura repetitiva si definiri de variabile precum si creare de obiecte. Observam ca pentru inceput am definit doua variabile: una de tip tabel si alta de tip baza de date. Acestea sunt tipuri de date obiect caracteristice lucrului cu motoarele de baze de date. In continuare programul a deschis baza de date Psihologie.mdb prin atribuirea obiectului de tip baza de date objDb unui fisier de pe disc folosind metoda OpenDatabase. Noi nu stim inca ce tabele contine baza de date mentionata. Pentru aceasta vor stabili o structura repetitiva care sa populeze o lista cu numele tabelelor din baza de date. Asfel, pentru fiecare tabel din colectia de tabele a bazei de date, programul adauga in lista numele acelui tabel dupa care automat trece la urmatorul tabel. Simplu si eficient. Am putea umple volume intregi cu elementele de programare, functiile si facilitatile pe care le pune la dispozitie acest mediu de dezvoltare. Scopul nostru este insa acela de a familiariza cursantul cu elementele de baza ale elaborarii programelor si nu de forma programatori. Cei interesati de acest domeniu pot consulta pentru aprofundare bibliografia recomandata sau bogata literatura de specialitate existenta pe piata.

1.4

Intrebari recapitulative si teme


1. Care sunt etapele elaborarii unei aplicatii computerizate? 2. Ce categorii de module contine mediul de dezvoltare Visual Basic si care sunt particularitatile acestora.

3. Ce intelegeti prin termenul de variabila si care sunt tipurile de variabile pe care le cunoasteti? 4. Identificati si descrieti elementele implicate in declararea unei variabile. 5. Descrieti structura de tip Case si exemplificati printr-un bloc de cod personal. 6. Prezentati bucla de tip DoLoop si gasiti exemple de blocuri de cod functionale. TEMA: Se da blocul de cod: If strNumeSubiect = Then MsgBox Numele subiectului nu exista Else Do lstNB.AddItem recRezultate![NB] lstNS.AddItem recRezultate![NS] Loop While recRezultate.EOF Ignorand definirea variabilelor si crearea obiectelor, precizati daca acest bloc de cod va functiona sau nu. In cazul in care blocul de cod nu va functiona, identificati si corectati erorile.

PROIECT BAZELE PROGRAMARII PE OBIECTE


calculatoare

+ Font mai mare | - Font mai mic

DOCUMENTE SIMILARE Share on print Share on facebook Share on twitter Share on email More Sharing Services 0 Componentele arhitecturii ISA x86 PROIECT INGINERIA SISTEMELOR SOFTWARE Internetul - Comunicarea client - server web Limbajul algoritmic (pseudocodul) Stergerea folderelor si fisierelor CODIFICAREA DATELOR Utilizarea vederilor dinamice in administrarea bazei de date Oracle9I Proceduri. Programe. Utilitarul Norton Commander Functia comerciala TERMENI importanti pentru acest document : cod sursa vb6 contabilitate : operatiile care pot fii efectuate cu variabile de tip text visual basic : : comanda de derulare pe verticala in web :

Cuprins Partea 1. Teorie I. Programarea pe Obiecte.Notiuni Generale...pag3 I.1. Obiecte.Clase.Caracteristici.pag3 I.2. Modele Utilizate In Dezvoltarea de Produse Software..pag5 II.Limbajul VISUAL BASIC.....pag 8 III. VISUAL BASIC PRIN EXEMPLE PRACTICE15 IV. Limbajul de Programare Visual Basic.21 Partea 2. Aplicatii

Partea 1. Teorie I. Programarea pe Obiecte.Notiuni Generale I.1. Obiecte.Clase.Caracteristici.


I.1.1. Introducere. Limbajele de programare, tehnicile si metodele de programare au evoluat in mod spectaculos de la aparitia calculatorului si pana astazi, ca urmare a necesitatii de a raspunde la cresterea continua a complexitatii problemelor de rezolvat si deci, implicit a programelor corespunzatoare. Atunci cand limbajele de asamblare n-au mai facut fata complexitatii crescande a programelor, a fost necesara utilizarea unor limbaje de nivel mai inalt, cunoscute sub numele de limbaje de programare de generatia I-a si a II-a, ca instrumente care sa faciliteze gestionarea acelui nivel de complexitate. Reprezentante de seama ale acestei perioade sunt limbajele FORTRAN, COBOL, ALGOL. Odata cu cresterea dimensiunii si complexitatii proiectelor software, a devenit tot mai clar ca pentru a le putea controla este absolut necesara abstractizarea datelor si ca in acest scop programarea structurata nu mai este eficienta. S-a impus gasirea unui nou model de prrogramare capabil sa depaseasca limitarile programarii structurate si care sa fie capabila sa realizeze abstractizarea adecvata a datelor. Asa s-au nascut limbajele bazate pe obiecte si apoi cele orientate pe obiecte. Dintre acestea cele mai raspandite sunt Ada si CLOS si mai de curand JAVA (bazate pe obiecte), respectiv Smalltalk, C++, Eiffel (orientate pe obiecte). I.1.2. Conceptul de Obiecte. Prin obiect intelegem o entitate din lumea reala asupra careia se poate intreprinde o actiune, sau care poate intreprinde o actiune. Obiectul este deci un concept, o abstractiune sau un lucru, o entitate din lumea reala avand limite precise si un sens precis in contextul problemei studiate. Un obiect este caracterizat prin 3 elemente: o o o identitate; stare; comportament.

Spunem despre un obiect ca are doua componente:

o o

structura infirmationala; comportamentul sau operatiile care actioneaza asupra structurii.

Analizand mai atent obiectele, constatam ca acestea pot fi: o o obiecte concrete, care exista in mod fizic; obiecte conceptuale (o idee, o lege, etc.).

Comportamentul obiectelor poate fi declansat de stimuli externi sau evenimente (de exemplu: primeste o comanda, elibereaza o chitanta, repara automobilul, etc.). Singura parte vizibila a unui obiect este constituita din operatiile (functiile) obiectului si este denumita interfata. Orice obiect are atribute si operatii. Atributele descriu un obiect si sunt valori ale dtelor, in timp ce operatiile (functiile) deinesc comportamentul obiectelor. Anumite metode orientate obiect propun, pentru acelasi scop, utilizarea a trei tipuri de obiecte, definite in contextul problemei si anume: obiecte entitate; obiecte de interfata; obiecte de control.

Arhitectura sistemelor cu obiecte se bazeaza pe clase, obiecte si interactiunea dintre ele. Un obiect dispune de proprietati, metode si evenimente. Proprietatile unui obiect descriu caracteristicile fizice ale acestuia. Proprietatile reprezinta atribute ale obiectelor. Obiectul este caracterizat prin proprietatile (atributele) sale: nume, dimensiune, culoare, eticheta si ale proprietatii care fac unic un obiect. Din punct de vedere al programatorilor, un obiect reprezinta o multime de date si o serie de operatii, numite metode, care manipuleaza datele. Obiectul se caracterizeaza prin: Identitate - cea care individualizeaza obiectul (spre exemplu numele lui pentru a-l distinge fata de alte obiecte); Exemple de obiecte particulare pot fi: bicicleta lui Radu; o fereastra de la o statie de benzina;

un triunghi desenat pe hartie.

Metodele obiectului - reprezinta elementele comportamentale ale obiectului atunci cand acesta este accesat prin mesaje diverse din exteriorul sau. O operatie este o actiune pe care o efectueaza un obiect. Implementarea specifica a unei operatii de catre o anumita clasa se numeste metoda. Starea obiectului - este caracterizata de atributele care descriu obiectul. Fiecare atribut are un nume si o valoare asociata ca variabila de instanta. Variabila de instanta este o anumita compozitie a caracteristicilor obiectului la un moment dat (variabilele de instanta definesc proprietatile obiectului). Clsificarea - presupune ca obiectele care au aceeasi structura (aceleasi atribute) si acelasi comportament (aceleasi operatii) sunt regrupate in clase. Obiectul cu stari comportamentale asemanatoare formeaza o clasa de obiecte.

I.1.3. Conceptul de Clasa de obiecte. O clasa de obiecte este o abstractie care descrie toate caracteristicile comune ale unui grup de obiecte si care permite crearea de noi obiecte. Exemple de clase: Bicicleta, Fereastra, Triunghi,etc. Clasa reprezinta un ansamblu de obiecte cu stari comportamentale asemanatoare, sau, altfel spus, o anumita categorie de obiecte ale carei proprietati si metode pot fi mostenite intro subclasa. O clasa stocheaza si manipuleaza date si poate returna valori catre codul de program care utilizeaza un obiect al acelei clase. o clasa are un identificator (un nume) si campuri membre. Se pot crea clase in cadrul unor module specifice fiecarei clase, anumite module de clasa. Clasa este de fapt o entitate statica, avand interfata si proprietati bine determinate. Ea poate fi definita intr-un limbaj declarativ sau in mod grafic. Subclasa defineste comportamentul modului de realizare a obiectului derivat dintr-o clasa de baza; Tipul este o descriere abstracta a unui grup de entitati asemanatoare; Subtipul este o parte a comportamentului. In aceasta abordare deosebit de importante sunt conceptele de identitate, polimorfism, mostenire si incapsulare.

Identitatea semnifica faptul ca obiectele sunt entitati discrete si distincte.Fiecare obiect poseda propria sa identitate. Polimorfismul reprezinta capacitatea unui obiect de a-si modifica forma. Polimorfismul se manifesta prin reactii diferite ale diverselor obiecte la un acelasi mesaj. Existenta unor operatii (sau metode) diferite, cu acelasi nume, dar cu comportament diferit, se numeste polimorfism. Exemple: a muta o bicicleta; a muta o fereastra; a muta un triunghi.

Mostenirea permite partajarea atributelor si operatiilor comune intre clase pastrand, in acelasi timp, diferentele. O clasa poate fi rafinata in subclase din ce in ce mai fine. Fiecare subclasa mosteneste toate proprietatile superclasei sale si aduga propriile sale proprietati. Mostenirea reprezinta transmiterea de proprietati si metode. Msostenirea este marcata de o definire suplimentara si transmite proprietatile si metodele clasei. Mostenirea poate fi: o o simpla, cand o subclasa are o singura clasa parinte; multipla, cand o subclasa mosteneste proprietatile si metode ale mai multor clase parinte.

Incapsularea reprezinta combinarea datelor si metodelor intr-o singura structura de date, definind totodata modul in care obiectul si restul programului pot referi date din obiect. In obiecte/clase de obiecte sunt ascunse atat structura cat si implementarea operatiilor prin procesul de incapsulare. Incapsularea - reprezinta conceptul care defineste apartenenta unor proprietati si metode fata de un obiect. Incapsularea protejeaza obiectele de manevre eronate din afara.

I.2. Modele Utilizate In Dezvoltarea de Produse Software.


I.2.1. Generalitati privind activitatea de programare. Programarea este practic activitatea prin care se concepe si se realizeaza programul pentru rezolvarea unei probleme, cu ajutorul calculatorului electronic. Un program reprezinta o succesiune de instructiuni si comenzi apartinand unui/unor limbaje de programare (Pascal, Basic, C, Visual Basic, Java etc.) care conduc la solutionarea problemei formulate.

Daca ne referim la activitatea de programare, vom identifica in cadrul acesteia, urmatoarele etape: o Formularea problemei - etapa in care se formuleaza efectiv problema de rezolvat, se definesc obiectivele acesteia, datele de iesire si forma lor de prezentare, se determina datele de intrare necesare si cerintele de prelucrare. o Eliberarea, identificarea si descrierea algoritmului de rezolvare a problemei date (sub forma de pseudocod sau schema logica). Ea presupune analiza corecta, exacta si completa a problemei formulate, pentru gasirea si apoi descrierea algoritmului ei corect de rezolvare. o Scrierea programului - etapa in care are loc scrierea propriu-zisa a programului, intr-un limbaj de programare ales de programator. Se obtine astfel asa numitul program sursa. o Testarea programului - activitate prin care se verifica sintactic si logic corectitudinea programului. o Realizarea, completarea si definitivarea documentatiei programului, care trebuie sa fie accesibila atat utilizatorilor, cat si specialistilor (programatori sau operatori) care vor dezvolta, completa sau intretine programul in viitor. o Exploatarea curenta, utilizarea si intretinerea programului, are ca obiectiv intretinerea si dezvoltarea programului, daca este necesar. Modele utilizate in dezvoltarea programelor. Un model este o notiune abstracta si este construit pentru a intelege problema inainte de a implementa solutia. Cele mai utilizate modele in dezvoltarea programelor sunt: Modelul orientat procedural care se bazeaza pe proceduri si algoritmi; Modelul orientat pe obiecte, care consta intr-o colectie de obiecte ce apartin unor clase; Modelul orientat pe reguli (de tip If-Then); Modelul orientat logic in care anumite scopuri se exprima prin calcule cu predicate; Modelul orientat pe constrangeri (relaModelul orientat pe constrangeri (relatii de invarianta);

Cea mai mare raspandire o are modelul procedural si cel mai mare interes il reprezinta in ultimul timp modelul orientat pe obiecte. I.2.2. Scurta prezentare a modelului procedural.

Modelul procedural reprezinta, prin intermediul algoritmilor de prelucrare, succesiunea operatiilor elementare, in numar finit, care trebuie parcurse pentru rezolvarea unei probleme. Modelul procedural are la baza abstractia procedurala si principiul substitutiei conform careia, la apelul unei proceduri, fiecare pozite de parametru formal din corpul acesteia, poate fi ocupata de o valoare de parametru identica din punct de vedere al tipului, sau de un nou apel la o procedura, inclusiv a procedurii in cauza (recursivitate), care reintoarce tipul corespunzator parametrului substituit. Din limbajele de tip procedural amintim: Pascal, Cobol, Basic, C++, FoxPro. Modulul program reprezinta o parte a unui program, compusa din mai multe instructiuni, care are un nume propriu si care rezolva o anumita functie a programului respectiv. Orice modul se caracterizeaza prin urmatoarele elemente: nume, necesar pentru apelare; o functie concreta; un algoritm de rezolvare; o interfata cu programul.

Algoritmii, odata ce au fost identificati, sunt reprezentati prin: sceme logice care pot fi de program sau de sistam; pseudocod, un limbaj formalizat, care contine enunturi standard si nestandard si care nu are reguli atat de stricte precum limbajele de programare; tabelele de decizii; diagrame de tip arbore, daca avem de a face cu o proiectare modularizata; limbaje de programare.

I.2.3. Modularitatea. Clasele si obiectele obtinute in urma abstractizarii si incapsularii trebuie grupate si apoi stocate intr-o forma fizica, denumita modul. Modulele pot fi privite xa si containere fizice in care declaram clasele si obiectele rezultate in urma proiectarii la nivel logic. Modulele formeaza asadar arhitectura fizica a programului. Modularizarea consta in divizarea programului intr-un numar de module care pot fi compilate separat, dar acre sunt conectate (cuplate) intre ele. Reguli Generale de Modularizare.

a) Structura fiecarui modul trebuie sa fie suficient de simpla pentru a putea fi complet inteleasa. b) Implementarea unui modul trebuie sa depinda doar de interfetele altor module, adica trebuie sa fie posibila modificarea implementarii unui modul fara a avea cunostiinte despre implementarea altor module si fara a afecta comportarea celorlalte module. c) Detaliile sistemului care se presupune ca se vor modifica independent vor fi plasate in module diferite. d) Singurele legaturi intre module vor fi acelea a caror modificare este improbabila. e) Orice structura de date este incapsulata intr-un modul; ea poate fi adresata direct din interiorul modulului dar nu poate fi accesata din afara modulului decat prin intermediul obiectelor si claselor continute in acel modul. Elementul fizic de constructie in limbajele bazate/orientate pe obiecte este modulul care contine o colectie de clase si obiecte. Un program orientat pe obiecte are putine date globale, intrucat datele si operatiile sunt unite intr-un mod nou care face ca blocurile logice fundamentale ale sistemului sa nu mai fie algoritmii, ci clasele si obiectele I.2.4. Programarea Orientata pr Obiecte. Concepte de Baza. Proiectarea orientata pe obiecte este o metoda de implementare in care programele sunt organizate ca si colectii de obiecte ce coopereaza intre ele, fiecare obiect reprezentand instanta unei clase; fiecare clasa apartine unei ierarhii de clase, clasele fiind unite prin relatii de mostenire. Aceasta definitie cuprinde trei parti importante, si anume: obiectele si nu algoritmii sunt blocurile logice fundamentale; fiecare obiect este o instanta a unei clase; clasele sunt legate intre ele prin relatii de mostenire. Limbaj de Programare Bazat pe Obiecte. Programare cu Tipuri de Dtae Abstracte. Un limbaj de programare care ofera suport pentru utilizarea calselor si a obiectelor, dar care nu are implementat mecanismul relatiilor de mostenire intre clase este un limbaj de programare bazat pe obiecte. Concepte Fundamentale in Programarea pe Obiecte. Programarea orientata spre obiecte reprezinta un stil de programare nou, care utilizeaza concepte si constructii noi, modalitati noi de structurare a datelor, de tratare a colectiilor de date si chiar de programare. Ea pune in centrul atentiei obictele, care se definesc ca unitati de

program independente, care cuprind laolalta datele si procedurile ce actioneaza asupra obiectelor. Principalele concepte care stau la baza programarii orientate pe obiecte sunt: Abstractizarea; Incapsularea; Modularizarea; Ierarhizarea. Abstractizarea este una din caile fundamentale prin care noi, oamenii, ajungem sa intelegem si sa cuprindem complexitatea. In contextul programarii pe obiecte, Booch ne ofera urmatoarea definitie a abstractiunii: O abstractiune exprima toate caracteristicile esentiale ale unui obiect, care fac ca acesta sa se distinga de alte obiecte; abstractiunea ofera o definire precisa a granitelor conceptuale ale obiectului, din perspectiva unui privitor extern. In procesul de abstractizare atentia este indreptata exclusiv spre aspectul exterior al obiectului, adica spre comportarea lui, ignorand implementarea acestei comportari. Se poate spune ca abstractizarea consta in focalizarea pe aspectele esentiale ale unei entitati. Incapsularea consta in separarea aspectelor externe ale unui obiect, care sunt accesibile altor obiecte, de aspectele interne ale obiectului, care sunt ascunse celorlalte obiecte. Utilizatorul obiectului poate accesa doar anumite atribute si operatii, numite publice, in timp ce alte atribute si operatii ii raman inaccesibile (acestea se numesc private). Incapsularea este un concept complementar abstractizarii. Daca rezultatul operatiei de abstractizare pentru un anumit obiect este identificarea protocolului sau, atunci incapsularea are de a face cu selectarea unei implementari si tratarea acesteia ca pe un secret al respectivei abstractizari. Prin urmare, incapsularea este procesul in care are loc ascunderea implementarii fata de majoritatea obiectelor-client. Ierarhizarea reprezinta o ordonare a abstractiunilor. Cele mai importante ierarhii de clase in paradigma obiectuala sunt: Ierarhia de clase (relatie de tip 'is a'); Ierarhia de obiecte (relatie de tip 'part of'); Mostenirea (ierarhia de clase).

Mostenirea defineste o relatie intre clase in care o clasa impartaseste structura si comportarea definita in una sau mai multe clase (dupa caz vorbim de mostenire simpla sau multipla). Agregarea (ierarhia de obiecte). Majoritatea metodelor orientate obiect utilizeaza reguli sau operatii semantice cum sunt : generalizarea / specializarea; agregarea / descompunerea combinate cu mostenirea si incapsularea. Agregarea este relatia intre doua obiecte in care unul dintre obiecte apartine celuilalt obiect. Agregarea reda apartenta unui obiect la un alt obiect. Evenimentul - este actiunea savarsita de sistem atunci cand operatorul solicita executarea unei comenzi. Evenimentele pot fi declansate interactiv sau programat. 1.2.5. Modele ale proiectarii si programarii pe obiecte. Modelul obiectual - este descrierea structurii statice a obiectelor, claselor de obiecte, a operatiilor si atributelor precum si a legarturilor si a relatiilor dintre ele. O diagrama de obiecte este un graf ale carui noduri sunt obiectele si ale carui arce sunt relatiile dintre obiecte. Modelul dinamic - descrie interactiunea dintre obiecte si este focalizat pe aspecte ce se schimba in timp, deoarece orice obiect are un ciclu de viata cu un punct de pornire si unul de sfarsit. O diagrama de stare este un graf ale carui noduri sunt starile si ale carui arce sunt tranzactiile intre stari, cauzatre de evenimente externe. Modelul functional - descrie transformarile valorilor datelor precizand sursa, transformarile si destinatia lor. O diagrama de flux de date este un graf ale carui noduri sunt procesele si ale carui arce sunt fluxurile de date. Modalitatea de coordonare si interactiune intre obiecte este transmiterea mesajelor. Trimiterea unui mesaj are ca scop activarea unei metode (operatii asociate cu sablonul uni mesaj) a obiectului receptor cu argumentele continute in mesaj.

II. Limbajul VISUAL BASIC


2.1. Prezentare generala. Visual Basic reprezinta o varianta si totodata o dezvoltare a vechiului limbaj de programare Basic (Begginer's All-Purpose Symbolic Instructions Code-codul instructiunilor simbolice de uz general pentru incepatori) si a fost lansat pe piata de firma MicroSoft in anul 1991. MicroSoft specifica termenul 'Visual' deoarece limbajul permite proiectarea unei interfete grafice intre program si utilizator (Grafic User Interfaces - GUI) cu ajutorul unor formulare (forme). Acestea contin elemente visuale numite obiecte sau controale, cum ar fi

butoane de comanda, casete de validare, casete de dialog, casete text, etc., care prmit utilizatorilor sa obtina, sa afiseze, sa inscrie date, imagini, etc. Visual Basic este un mediu integrat de dezvoltare, deoarece integhreaza functii de proiectare, editare de text, compilare si depanare in cadrul unui mediu comun. Visual Basic este un limbaj interactiv, adica implementeaza fiecare instructiune pe masura ce e introdusa de la tastatura, compiland partial codul si semnaland orice eroare sintactica, daca instructiunea este corecta, executand-o. Visual Basic stocheaza fisierele sursa ca fisiere ASCII ale caror nume de fisier contin una din urmatoarele patru tipuri de extensie: .frm pentru forme - O forma asigura programului mijloacele visuale de prezentare a datelor; .bas pentru module cod sursa - Un modul stocheaza secvente de cod care nu necesita o forma; .cls pentru module clase - Un modul clasa este un tip special de modul cod care contine o singura clasa si obiectele asociate acesteia; .res pentru resurse - Un fisier de resurse contine imaginile si textele necesare programului, precum si alte informatii orientate pe prezentare. Visual Basic lucreaza cu mai multe tipuri de proiecte (standard.exe, ActiveX.exe, ActiveX.DLL, ActiveX Control etc) fiecare avand particularitatile sale. Incercand o prezentare succinta a limbajului de programare Visual Basic, acesta se poate caracteriza astfel: Cel mai rapid si cel mai simplu limbaj de dezvoltare a unei aplicatii sub Windows; Poate realiza tot ce poate fi realizat cu oricare alt limbaj de programare sub Windows; Este un mediu integrat de dezvoltare deoarece integreaza functiile de proiectare, editare de text, compilare si depanare in cadrul unui mediu comun; Visual Basic abordeaza interactiv dezvoltarea codului nefacand distinctie intre scrierea, compilarea si testarea codului; Combina elemente de programare orientata pe obiecte cu elemente de programare orientata pe evenimente; Poate crea baze de date pentru cele mai raspandite tipuri de date: Microsof Access, Microsoft FoxPro, dBase, Paradox, Microsoft SQL Server, etc.; Permite integrarea functiilor furnizate de catre alte aplicatii (de ex.:Microsoft Word, Excel, etc.);

Permite accesul la documente si aplicatii din internet sau intranet sau crearea unor aplicatii de tip Internet Server; Detine toate documentele necesare crearii unor aplicatii de uz personal sau pentru grupuri de lucru.

2.2. Mediul integrat de dezvoltare Visual Basic (IDE)


2.2.1. Lansarea in executie. Lansarea in executie a programului Visual Basic se poate face in mai multe moduri: Se activeaza butonul START de pe bara de task-uri; Se activeaza optiunea PROGRAMS si, in lista de optiuni se executa click pe Microsoft Visual Studio 6.0 si de acolo Microsoft Visual Basic 6.0

Mediul de programare Visual Basic (IDE - Integrated Development Environment) este un ansamblu de meniuri, bare de instrumente si ferestre cu ajutorul carora programatorul poate proiecta si crea aplicatii in Visual Basic. 2.2.2. Mediul de lucru Visual Basic. Mediul de lucru Visual Basic poate contine: Bara de meniuri contine maniurile standard ale uni meniu Windows: File, Edit, View, Windows si Help, precum si meniuri care cuprind comenzi specifice programarii in Visual Basic, precum: Project, Format, Debug. Toolbar (bara de instrumente) permitre accesul rapid la comenzile cele mai des folosite in mediul Windows: deschidere fisier, salvare, tiparire, copiere, mutare, etc. La acestea se pot adauga (sau elimina) si alte bare cu instrumente cu ajutorul comenzii Toolbar din meniul View. Toolbox (cutia de instrumente) situatx de regula in partea din stanga a ecranului, contine un set de pictograme corespnzatoare obiectelor care pot fi folosite in timpul proiectarii aplicatiilor cum ar fi: Label, TextBox, CommandButton, ComboBox, etc., si introduse in formular (forma). Unii programatori clasifica aceste controale in trei grupe: o o o Intrinseci (care apar in Toolbox atuci cand se porneste prima data Visual Basic); Externe (controale ActiveX, care pot fi adaugate de la ToolBox); Inserabile (controale facute din aplicatii externe, precum MS Excel).

Meniuri contextuale contin comenzi rapide pentru actiuni efectuate in mod frecvent. Meniurile contextuale se deschid executand click dreapta pe obiectul respectiv. Ele contin comenzi ce pot fi utilizate la locul si in momentul respectiv. Fereastra Project Properties serveste la stabilirea unor informatii despre proiect.

In sectiunea General se pot stabili: Project Type, deci tipul proiectului (.exe, .dll, .ocx, etc.); Startup Object, deci care este 'forma' cu care incepe aplicatia; Project Name, defineste numele fisierului help aferent proiectului; Project Description pentru o scurta descriere a proiectului.

In sectiunea Make se pot stabili informatii cu privire la versiunea aplicatiei, numarul versiunii, titlul, pictograma asociata acesteia. Sectiunea Compile stabileste optiunile de compilare ale proiectului: p-Code sau Native Code. Fereastra 'Project Explorer' faciliteaza lucrul cu diferitele componente ale proiectului, afisate sub forma unei liste arborescente. Fiecare componenta are un nume si un nume de fisier(acestea apar intre paranteze). Exista sapte tipuri de componente ce pot aparea aici: Projects (.VBP) Forms (.FRM) Modules (.BAS) Class Modules (.CLS) User Controls (.OCX) User Documents (.DOB) Property Pages (.PAG)

Fereastra Project Browser afiseaza informatii despre prototipurile tuturor functiilor, procedurilor, care se afla in fisierele biblioteca (dll, olb, ocx) legate la proiect. In fereastra Classes se poate vedea ce contine biblioteca: clase, module, enumerari, tipuri definite de utilizator, iar in fereastra din partea dreapta continutul fiecarei dintre acestea. Fereastra 'Properties Window' (fereastra de proprietati) afiseaza toate proprietatile formei/controlului selectat si valorile acestora. Fiecare proprietate are un nume si o valoare setata fie de Visual Basic, fie de programator. In denumirea obiectelor se foloseste un prefix din trei litere mici, reprezentand tipul obiectului:
Prefix cbo chk cmd frm img Tipul obiectului Combo box Check box Command button Form Image

lbl lst mnu pic txt

Label List box Menu Picture box Text box

O serie de proprietati sunt comune mai multor controale Visual Basic, cum sunt: Proprietatea Alignment Backcolor Borderstyle Caption Enabled Explicatia textul de pe control poate fi aliniat la stanga, la centru sau la dreapta culoarea fundalului tipul bordurii din jurul controlului textul afisat de pe control Daca are valoarea logica 'true', utilizatorul poate interactiona cu controlul; daca are valoarea 'false', controlul nu raspunde la actiunea utilizatorului determinx fontul, marimea lui si stilul textului afisat pe control Determina culoarea textului de pe un control inaltimea controlului (in twips) distanta de la marginea din stanga a formei (ecranului) determina forma cursorului mouse-ului cand acesta trece peste controlul respectiv numele controlului textul care apare cand utilizatorul tine cursorul mouse-ului peste controlul respectiv distanta de la marginea de sus a formei (ecranului) determinx daca controlul este vizibil sau nu latimea controlului

Font Forecolor Height Left MousePointer

(Name) ToolTipText

Top Visible Width

Fereastra Form Designer afiseaza un formular pe care programatorul in poate personaliza inserand controale, grafica si imagini, proiectand astfel intefata aplicatiei cu utilizatorul. Fiecare formular (forma) din cadrul proiectului are propria fereastra de tip Designer, aceasta fiind practic fereastra de proiectare a fiecarui formular. Fereastra 'Form-Layout' afiseaza o schita in miniatura a formei, reprezentand locatia de pe un ecran unde aceasta va aparea in timpul executiei programului. Din aceasta fereastra se poate stabili, de asemenea, locatia initiala a formei, prin mutarea schitei. Fereasra Code Editor este folosita ca un editor de texte pentru a introduce codul procedurilor aplicatiei. Pentru fiecare forma se poate deschide o fereastra de cod (code

window). Fereastra ne pune la dispozitie un procesor de texte specializat, cu numeroase facilitati pentru scrierea de cod in Visual Basic. Fereastra References afiseaza diferitele legaturi ce se pot stabili cu alte componente soft inregistrate in sistem. Pentru a se putea folosi in cadrul aplicatiei proceduri sau obiecte ce se gasesc in diferite fisiere DLL sau OCX trebuie sa se stabileasca o legatura cu acestea. In fereastra References sunt afisate toate legaturile spre bibliotecile de prototipuri care au fost inregistrate in sistem. Daca dorim sa legam la proiect un fisier care nu este in lista, vom folosi butonul Browse. Fereastra Components, cu ajutorul ei se pot introduce in proiect legaturi cu diferite controale (fisiere .OCX). Se aseamana cu fereastra References numai ca se pot stabili legaturi doar cu controalele ActivX inregistrate in sistem. Ferestrele Immediate, Locals si Watch sunt utilizate de regula in faza de testare si corectare a programului de erori. Sunt disponibile numai in timpul executiei programului. Fereastra Options este importanta pentru a stabili diverse optiuni ale IDE. Cele mai utilizate optiuni sunt: Optiunea Auto Syntax Check cere compilatorului V.B. sa verifice corectitudinea sintaxei comenzilor in timp ce se scrie codul si sa atentioneze asupra eventualelor greseli; Optiunea Require Variable Declaration stabileste daca trebuie sa se declare explicit variabilele; Optiunea Prompt for project din sectiunea Environment permite alegerea unui sablon de proiect care se foloseste pentru un proiect nou; Optiunea Create default stabileste un sablon de proiect care se va incarca automat de cate ori se doreste sa se creeze un proiect nou; In sectiunea Advanced se poate alege unul din cele doua stiluri ale IDE: SDIsingle document interface si MDI-multiple document interface. Alegand SDI toate ferestrele din IDE pot fi mutate oriunde pe ecran; alegand MDI toate ferestrele sunt continute intr-o singura fereastra parinte.

2.3. Concepte de baza in Visual Basic.


2.3.1. Obiecte. Proprietati. Obiectul se poate defini astfel, din punct de vedere al proiectantului, ca un ansamblu de date si operatii, numite metode, care manipuleaza datele. Obiectele stau in centrul programarii in Visual Basic. Fiecare obiect are o identitate a sa, proprie si este caracterizat printr-o serie de proprietati sau atribute.

Proprietatile unui obiect descriu caracteristicile fizice ale acestuia: dimensiunea, culoarea, pozitia acestuia, inaltimea, latimea, numele obiectului, etc. Avem doua posibilitati de a modifica proprietatile unui obiect: in momentul proiectarii, folosind fereastra de proprietati; in timpul executiei, prin codul programului.

Modificarea valorilor proprietatilor unui obiect in faza de executie a programului se face prin cod, referirea acestuia realizandu-se printr-o expresie cu sintaxa: NumeObiect.Proprietate = Valoare 2.3.2. Metode. O metoda este o actiune pe care programul o poate efectua asupra obiectului. O metoda este o procedura din program care poate fi invocata pentru a asocia o anumita actiune unui obiect. Sintaxa apelului unei metode este urmatoarea: [NumeObiect].Metoda [lista-parametri] Metoda Move presupune utilizarea cuvantului cheie Move si patru parametrii: Left, Top, Width si Height. Pe langa proprietati si metode, majoritatea obiectelor din Visual Basic dispun si de un eveniment, cel putin. Un eveniment este raspunsul unui obiect la o actiune a utilizatorului sau la o actiune a programului. Codul din aplicatiile Visual Basic se imparte in blocuri de dimensiuni mai mici numite proceduri. O procedura - eveniment contine cod care este executat atunci cand se produce un anumit eveniment. 2.3.3. Aplicatii Visual Basic. Caracteristici. Modulele formelor constitue baza pentru majoritatea aplicatiilor create in Visual Basic. Ele contin declaratii de variabile, constante, tipuri definite de utilizator, enumerari, proceduri ce gestioneaza evenimentele, proceduri si functii globale sau locale. Modulele standard (fisiere c extensia .bas)contin proceduri si declaratii care pot fi accesate din orice alt modul al aplicatiei. Putem adauga module standard la aplicatiile noastre cu ajutorul comenzii AddModule din meniul Project. Modulele claselor constitue baza programarii orientate pe obiecte in Visual Basic. Astfel, putem scrie cod in modulele claselor pentru a crea obiecte noi, cu proprietati si module proprii. Putem adauga un modul clasa la aplicatie cu ajutorul comenzii Add Class Module. Etapele proiectarii unei aplicatii in Visual Basic.

Crearea unei aplicatii in Visual Basic parcurge, in mod normal urmatoarele etape: 1. Formularea problemei si deci definirea aplicatiei de rezolvat cu calculatorul; 2. Proiectarea interfetei grafice cu utilizatorul (forme, obiecte, evenimente); 3. Stabilirea proprietatilor pentru obiectele identificate; 4. Scrierea codului (asociat diferitelor evenimente); 5. Rularea (executia) aplicatiei si corectarea erorilor; 6. Salvarea Proiectului. 2.3.4. Formulare Visual Basic. Un formular reprezinta o zona rectangulara, asemanatoare unei ferestre. Pe ecran pot aparea la un moment dat unul sau mai multe formulare. Toate proiectele Visual Basic au cel putin cate un formular. Avem doua tipuri de interfete: Interfata de tip SDI - Singular Document Interface, ceea ce inseamna ca se poate deschide un singur document odata; Interfata de tip MDI - Multiple Document Interface, ceea ce inseamna ca este permisa afisarea mai multor documente in acelasi timp.

Proprietatile unui formular definesc caracteristicile fizice ale acestuia: Caption stabileste textul care va fi afisat in bara de titlu a formularului; Icon stabileste pictograma care va fi afisata cand se va minimiza formularul; MaxButton si MinButton arata daca formularul poate fi maximizat sau minimizat; BorderStyle controleaza comportamentul formularului la redimensionare; Height si Width caracterizeaza dimensiunile initiale ale formularului; Left si Top determina dispunerea formularului relativ relativ la coltul din stanga sus a ecranului; WindowStyle stabileste starea ferestrei astfel incat la pornire formularul sta sa apara in forma Maximed, Minimized sau Normal; Name - atribuie un nume formularului, prin care acesta va fi apelat in cadrul codului Visual Basic.

2.3.5. Controale Visual Basic. In Visual Basic obiectele se mai numesc si controale si acestea pot fi: butoane de comanda, butoane de optiune, casete de dialog, casete de validare, bare de derulare, etc. Un control dispune de proprietati, metode si evenimente. In Visual Basic controalele pot fi grupate in mai multe categorii, astfel: 1. Controale de tip buton Acestea sunt de doua tipuri: Buton de comanda - Command Button; Buton imagine - Image Button. 2. Controale care afiseaza imagini si grafica. Acestea sunt: Controlul imagine - folosit pentru a afisa imagini de tipul: pictograme, bitmap, JPEG sau GIF; Controlul forma grafica (shape) - foloseste la desenarea unor forme grafice predefinite pe suprafata unui formular ca: patrat, oval, cerc, dreptunghi, etc.; Controlul linie - este folosit pentru a genera segmente de linie pe un formular; Controlul caseta cu imagini - este folosit pentru afisarea graficii, ca un container pentru alte controale. 3. Controale eticheta (Label) Acest control afiseaza text care poate fi doar citit, nu si modificat in mod direct de utilizator. Controalele etichete pot afisa diferite mesaje, care se pot schimba in functie de context. 4. Controale caseta cu text (text Box) Acest control permite introducerea unui text de la tastatura si/sau afiseaza un text introdus de utilizator sau rezultat din evaluarea unei expresii. Acest text este controlat de proprietatea Text si poate fi modificat doar in cazul in care proprietatea Locked nu are valoarea True. 5. Controale cu optiuni pentru utilizator. Visual Basic pune la dispozitia utilizatorilor sai mai multe controale standard oferindu-le posibilitati de alegere:

Caseta de validare Check Box; Butoane de optiune (Butoane radio) Option Button; Caseta cu lista - List Box si Combo Box. Controlul caseta de validare (Check Box) permite utilizatorului sa aleaga una sau mai multe optiuni si afiseaza un marcaj de validare cand este selectat. Aspectul acestei casete se stabileste cu proprietatile: Style, Picture, DownPicture si Disable Picture. Controlul butoane de optiune (Option Button) se folosesste pentru a afisa o lista de optiuni dintre care utilizatorul poate alege una singura la un moment dat. Starea controlului este controlata de proprietatea Value, care are valoarea True daca butonul este selectat si Falsein caz contrar. Controlul de tip Caseta cu lista prezinta doua posibilitati: Caseta cu lista List Box; Caseta combinata Combo Box. Controlul Casetx cu listx (List Box) afiseaza pe verticala o lista de optiuni din care utilizatorul poate alege una sau mai multe elemente. Sintaxa controlului este: NumeCaseta.AddItem element [,index], in care Nume Caseta numele casetei cu lista; Element sirul de caractere care trebuie adaugat in lista; index pozitia in care va fi inserat elementul in lista. Daca acesta are valoarea zero, elementul va fi adaugat la inceputul listei, iar daca liseste elementul va fi adaugat la sfarsitul listei. Stergerea unui anumit element din lista se face cu metoda RemoveItem, putand specifica pozitia din lista a elementului sters. Stergerea tuturor elementelor din lista se face cu metoda Clear, cu sintaxa: NumeCAseta.Clear Crearea casetelor cu lista multicoloana si multiselectie se face atribuind valori corespunzatoare proprietatilor Columns si MultiSelect. Controlul Caseta Combinata (Combo Box) oferx utilizatorului o lista de optiuni reunind caracteristicile unei casete cu text cu cele ale unei casete cu lista. Caseta combinata are trei stiluri gestionate de proprietatea Style:

Derulanta DropDown Combo este stilul implicit cand proprietatea Style are valoarea zero; Simpla Simple Combo este o caseta in care lista de optiuni este intotdeauna vizibila, proprietatea Style avand valoarea1; Lista derulanta DropDown List afiseaza o lista de optiuni cand utilizatorul executa click pe sageata din dreapta a casetei, proprietatea Style avand valoarea 2.

6.Controale de acces la date: ADO Data creaza rapid legaturi intre controalele asociate datelor(oricare poseda proprietatea DataSource) si o baza de date; Data List si Data Combo asemanatoare cu controalele standard caseta cu lista si caseta combinata; Data Grid afiseaza datele asemanator unei foi de calcul tabelar sub forma de randuri si coloane; Microsoft Hiperarchical Flex Grid (MSHFlexGrid) si Microsoft FlexGrid (MSFlexGrid) vizualizeaza sub formx de grila datele dintr-un set de inregistrari care provin din una sau mai multe tabele; Data si Remote Data (date de la distanta) sunt incluse in Visual Basic pentru compatibilitate cu versiunile mai vechi. 7.Controale pentru sistemul de fisiere. DriveListBox - casetx cu listx a unitatilor de disc - ofera o lista derulanta a unitatilor de disc din care utilizatorul poate alege; DirListBox - caseta cu lista a directoarelor; FileListBox - casetx cu listx a fisierelor- afiseaza o lista cu numele fisierelor din cadrul directorului curent selectat. 8. Alte controale 1) Controlul de timp - Timer - masoara trecerea timpului si poate fi folosit pentru a crea un eveniment la intervale de timp regulate; 2) Controlul Container OLE - permite legarea sau incapsularea intr-o aplicatie Visual Basic a unor obiecte din cadrul unor aplicatii, precum si accesul la facilitatile oricarei aplicatii ce permite OLE; 3) Controlul dialog uzual - Common Dialog - acesta adauga intr-o aplicatie Visual Basic un set de casete de dialog pentru: a) Deschiderea si salvarea fisierelor;

b) Selectarea culorilor; c) Selectarea fonturilor; d) Selectarea functiilor de tiparire la imprimanta.

III. VISUAL BASIC PRIN EXEMPLE PRACTICE.


GENERALITATI Formele si controalele Visual Basic sunt obiecte ce au propriile proprietati, metode si evenimente. Proprietatile sunt atribute pe care le poseda obiectul si care ii descriu modul de prezentare. Name, top, left, height, width, visible sunt doar cateva din proprietatile ce se intalnesc la marea majoritate a obiectelor. Metodele stabilesc comportamentul obiectelor, indicand ce pot face ele efectiv. Ele sunt de fapt niste proceduri, adica blocuri de cod, care determina obiectul sa faca un anumit lucru. Evenimentele definesc interactiunea cu mediul extern proiectului (utilizatorul face parte din mediul extern proiectului). Pentru fiecare eveniment se poate scrie o procedura, denumita 'numeobiect.eveniment' care se va executa in momentul producerii acelui eveniment.

3.1. Proiectarea unei forme (formular)


Formele (formularele) constitue elementul de la care se incepe construirea unei interfete in Visual Basic, constituind practic ferestrele prin intermediul carora utilizatorul va interactiona cu aplicatia. Formele poseda propriile proprietati, evenimente si metode cu ajutorul carora putem controla modul de afisare si comportamentul. Proprietatea Caption stabileste titlul care va fi afisat in bara de titlu a formei; Icon stabileste iconita pentru forma; MaxButton si MinButton stabilesc daca forma poate sa fie maximizata sau minimizata; BorderStyle controlam modul de redimensionare al formei; Height si Width stabilesc dimensiunile initiale ale formei; Left si Top stabilesc locatia formei fata de coltul stanga sus al ecranului; WindowState stabileste modul in care se va afisa forma la inceput: minimizata, maximizata sau normala; Name stabileste un identificator cu ajutorul caruia putem referi forma respectiva. Pentru a afisa o forma pe ecran se va utiliza metoda Show. Form1.Show(Form1 reprezinta numele formei) Pentru a inlatura o forma de pe ecran (a o ascunde) vom folosi metoda Hide sau functia Unload:

Form1.Hide sau Unload Form1

3.2. Buton de Comanda (Command Button).


Un buton de comanda este un control care are o anumita forma, afiseaza o eticheta si permite utilizatorului sa comande executia unor actiuni prin activarea lui. Proprietatea Caption ne permite sa afisam un anumit text pe buton, de exemplu :OK, Cancel, Adauga, etc. Cel mai frecvent eveniment intalnit la acest control si pentru care vom scrie cel mai mult cod este evenimentul click. De cate ori utilizatorul va face click de mouse pe acest buton evenimentul se va produce si va determina executarea codului scris in procedura numita : NumeButton_Click(). La click de mouse pe butonul EXIT se doreste terminarea programului. Procedura va arata astfel: Private Sub EXIT_Click () end End Sub

3.3. Controale care manipuleaza texte.


Principalele controale utilizate pentru manipularea textelor sunt: Eticheta (Label) - este un control grafic folosit pentru afisarea de text pe care utilizatorul nu il poate modifica. Textul care va fi afisat se stabileste prin intermediul proprietatii Caption. Acesta poate fi stabilit din faza de proiectare, dar se poate modifica in timpul executiei prin intermediul unei proceduri asociate. Caseta de text (TextBox) - este folosit pentru a afisa textul specificat de dumneavoastrx din faza de proiectare (la proprietatea Text), sau introdus de la utilizator la executie sau asociat controlului prin program. Daca textul trebuie afisat pe mai multe linii, proprietatea MultiLine trebuie sa aiba valoarea True.

3.4. Controale care permit alegerea unor optiuni.


3.4.1. Caseta de validare (CheckBox) - ofera utilizatorilor posibilitatea de a alege sau nu o anumitx optiune. Proprietatea Value este utilizatx pentru a determina starea controlului: 1=bifat, 0=nebifat, 2=indisponibil. Cu ajutorul proprietatii Caption putem adauga textul explicativ dorit in dreptul casetei.

3.4.2. Butonul de optiune (Option Button) - pun la dispozitia utilizatorului un set de optiuni, dintre care acesta are posibilitatea sa marcheze una singura la un moment dat. Selectarea unui buotn implicx automat deselectarea celorlalte. Butonul de optiune care este mercat are proprietatea Value=True, iar celelalte butoane din grup au proprietatea Value=False. Un buton de optiune poate fi dezactivat atribuind proprietatii Enabled valoarea False. Daca este dezactivat, butonul de optiune apare in timpul executiei estompat. Aspectul unui buotn de optiune poate fi schimbat prin intermediul proprietatilor Picture, Style, DownPicture si DisablePicture.

3.5. Caseta cu Lista (ListBox).


Caseta cu lista este un control care permite afisarea pe verticala a unei serii de articole din care utilizatorul poate alege unul sau mai multe. Daca numarul de articole depaseste capacitatea de afisare a casetei cu lista proiectata, atunci ei i se vor asocia automat bare de derulare verticala, respectiv orizontala. In mod implicit articolele sunt afisate pe o singura coloana. Acest lucru poate fi schimbat prin modificare proprietatii Columns care poate avea atribuite urmatoarele semnificatii: 0 - caseta de tip lista are o singura coloana, cu derulare pe verticala; 1 - casetx de tip lista are o singura coloana, cu derulare pe orizontala; >1 - caseta de tip lista multicoloana cu derulare pe orizontala. Daca dorim ca utilizatorul sa poata selecta mai multe articole din lista, atunci trebuie stabilita corespunzator valoarea proprietatii MultiSelect: 0 - nu permite nici o selectie; 1 - permite selectie multipla simpla; 2 - permite selectie multipla extinsa. Proprietatea ListCount a unei liste returneaza numarul de articole din lista. Proprietatea ListIndex este utilizata pentru a determina numarul articolului selectat. Numerotarea articolelor incepe de la zero. Adaugarea unui nou articol in lista se face cu metoda AddIttem, care are sintaxa: Nume caseta. AddIttem element[,index] unde: - nume caseta - este numele obiectului de tip lista;

- element - este sirul de caractere care trebuie adaugat in lista si care poate fi specificat ca atare, intre '' sau continut intr-o variabila al carei nume trebuie specificat; - index - precizeaza pozitia din lista unde va fi inserat noul articol. NewIndex permite determinarea indexului ultimului articol din lista. RemoveItem permite stergerea unui articol din lista, avand sintaxa: Nume caseta.RemoveItem index Pentru stergerea tuturor articolelor din lista se utilizeaza metoda Clear : Nume caseta.Clear

3.6. Caseta Combinata (ComboBox)


CAseta combinata este un control care combina caracteristicile controlului caseta cu lista cu cele ale controlului casetx text. Existx trei tipuri de casetx combinata, in functie de valoarea proprietatii Style: caseta derulanta combinata - contine o listx derulanta si o caseta de text. Utilizatorul are posibilitatea sa selecteze din lista una sau sa scrie in caseta de text; caseta combinata simpla - contine o caseta de text si o lista nederulanta. Dimensiunea unui asemenea control este suma dimensiunilor portiunii de editare si a listei; caseta cu lista derulanta - permite doar selectarea din lista derulanta, portiunea de text fiin neaccesibila.

Proprietatea Text controleaza selectia articolelor din lista ComboBox. Aceasta inseamna ca aici vom gasi continutul articolelor selectat la un moment dat.

3.7. Controale care afiseaza imagini si grafica.


Visual Basic ofera programatorilor patru controale cu ajutorul carora se pot afisa imagini grafice: Caseta cu poze (PictureBox); Imagine (Image); Figura (Shape); Linie (Line).

3.7.1. Caseta cu poze (PictureBox)

Este un control utilizat pentru a afisa poze si imagini grafice. In timpul executiei programului, pentru a afisa o poza sau pentru a o schimba se foloseste functia LoadPicture pentru a stabili proprietatea Picture: Picture1.Picture=LoadPicture('Poza.gif') Daca poza care va fi afisata nu are aceeasi dimensiune cu a controlului, se poate seta proprietatea AutoSize=True si astfel controlul va avea aceeasi dimensiune cu poza. Pot fi utilizate, de asemenea, metodele Circle, Line sau Pset pentru a afisa imagini grafice in caseta de poze. 3.7.2. Controlul Imagine (Image) Daca dorim sa afisam o poza este recomandat sa folosim controlul Imagine. Acest contro incarca poza dar nu va permite nici o prelucrare a acesteia. Stretch=True este o proprietate pe care o folosim atunci cand dorim ca poza sa aiba aceeasi dimensiune cu controlul imagine. Se poate stabili poza care se va afisa cu ajutorul proprietatii Picture. 3.7.3. Figura (Shape) si Linie (Line) Controalele figura si linie sunt folosite pentru a desena imagini grafice pe suprafata formei. Ele nu poseda nici un eveniment. modificand proprietatea Shape a controlului, acesta poate sa ia forma de cerc, oval, patrat, dreptunghi, patrat cu colturi rotunjite sau dreptunghi cu colturi rotunjite. Controlul linie este asemanator cu cel figura, permitand trasarea unei linii.

3.8. Controale care permit manipularea fisierelor.


3.8.1. Controlul DriveListBox (caseta cu lista unitatilor de disc) - acest control se aseamana cu o caseta combinata care contine toate unitatile de disc pe care le recunoaste sistemul. Selectarea unei unitati de disc din lista nu inseamna insa schimbarea automata a unitatii de disc curente. Pentru a schimba efectiv unitatea de disc se utilizeaza proprietatea Drive ca argument a instructiunii ChDrive cu sintaxa: ChDrive Drive.Drive Proprietatea Drive permite aflarea unitatii de disc curente. 3.8.2. Controlul DirListBox (caseta cu lista a directoarelor) - in aceasta lista directorul (folderul) curent apare evidentiat si identat fata de cele de nivel ierarhic superior, iar subdirectoarele sale apar identate fata de el. Proprietatea Path stabileste sau returneaza calea si directorul curent. Selectand cu click mouse un director, acesta devine evidentiat, iar daca se selecteaza cu dublu click mouse, atunci el devine director curent, astfel ca apare in proprietatea Path iar ListIndex ia valoarea -1. O comanda ChDir de forma:

ChDir Dir1.Path stabileste directorul curent de lucru. Proprietatea ListCount returneaza, in acest caz, numarul de subdirectoare ale directorului curent. 3.8.3. Controlul FileListBox (caseta cu lista a fisierelor) - se aseamana cu o caseta tip lista ce contine fisierele din directorul curent selectat si specificat de proprietatea Path in momentul executiei. Proprietatea FileName stabileste sau returneaza in timpul executiei numele fisierului selectat. Pentru a afisa toate fisierele directorului curent se poate utiliza instructiunea: File1.Path=dir1.Path unde File1 este numele implicit dat controlului utilizat. Daca se cere in proprietatea Pattern afisarea fisierelor cu extensia .bas, atunci se da comanda: File1.Pattern='*.bas'

3.9. Casete de dialog predefinite


Un mod simplu de a adauga o caseta de dialog aplicatiei noastre este sa folosim casetele de dialog predefinite. Pentru aceasta Visual Basic ne pune la dispozitie doua functii: InputBox care afiseaza o caseta de dialog ca permite prelucrarea datelor de la utilizator; MsgBox care permite afisarea diferitelor informatii, mesaje.

Functia InputBox afiseaza o caseta de dialog modala care cere utilizatorului sx introduca date. Sintaxa: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) unde: - prompt - este un sir de caractere afisat ca mesaj in caseta de dialog. Numarul maxim este de caractere este de 1024; - title - este un sir de caractere care va fi afisat ca titlu in bara de titlu a casetei de dialog; - default - este un sir de caractere ce va fi afisat in caseta cu text si care va fi returnat de functie in caz ca utilizatorul nu introduce alte date; - xpos, ypos - expresii numerice care specifica coordonatele coltului stanga sus al casetei de dialog fata de coltul stanga sus al ecranului;

- helpfile - un sir de caractere ce specifica numele fisierului Help ce va fi folosit pentru a oferi asistenta in lucrul cu caseta de dialog. Functia MsgBox - se poate utiliza pentru a obtine raspunsuri de tipul Da/Nu de la utilizatori sau pentru a afisa diferitemesaje de avertizare, erori, atentionari. Sintaxa functiei este: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) unde: - prompt - este un sir de caractere afisat ca mesaj in caseta de dialog. Numarul maxim de caractere este de 1024; - buttons - este o expresie numerica ce reprezinta suma valorilor care specifica numarul si tipul butoanelor afisate, iconita; - title - un sir de caractere ce va fi afisat ca titlu in bara de titlu a casetei de dialog; - helpfile - un sir de caractere ce specifica numele fisierului Help ce va fi folosit pentru a oferi asistenta in lucrul cu caseta de dialog.

3.10. Alte controale


1. Controlul de timp (TIMER) Este un control care masoara timpul si ca urmare poate fi folosit pentru a crea un anumit eveniment la intervale de timp regulate. Controlul Timer functioneaza independent de celelalte evenimente. Proprietatea Enabled controleaza modul de actiune al controlului in sensul de a raspunde sau nu la actiuni ale utilizatorului. Ea poate lua valoarea True, caz in care intra in functiune imediat dupa incarcarea formularului, sau False pentru a suspenda functionarea controlului. Proprietatea Interval defineste intervalul de timp care se scurge intre doua evenimente, exprimat in milisecunde. El poate lua valori intre 0 si 64767. 2. Controlul container OLE Acest control permite legarea sau incapsularea intr-o aplicatie Visual Basic a unor obiecte din cadrul altor aplicatii, precum si accesul la aplicatii care permite OLE, cum sunt: MS Word, MS Excel, etc. 3. Controlul dialog uzual (Common Dialog) Este un control care pune la dispozitia utilizatorului o metoda usoara pentru lucrul cu fisierele. Astfel, el ofera un set de casete de dialog pentru operatii cum sunt: deschiderea fisierelor;

salvarea fisierelor; selectarea culorilor; selectarea fonturilor; stabilirea functiilor de imprimare.

3.11. Editarea de meniuri


Visual Basic pune la dispozitia programatorilor un editor de meniuri cu ajutorul caruia se pot crea meniuri oricat de complexe intr-un mod relativ simplu. Activarea editorului se face activand meniul TOOLS si de caolo optiunea Menu Editor (Ctrl/E). Caption stabileste un sir de caractere care va fi afisat pe ecran, permitand utilizatorului sa selecteze o anumita optiune din meniu. Caseta Shortcut permite precizarea tastelor de acces rapide Checked este o optiune care poate lua valoarea logica de adevar sau fals. Daca are valoarea True va afisa un semn de bifare inaintea textului stabilit din proprietatea Caption. Enabled stabileste daca meniul va fi activ sau nu. Daca nu este activ, textul de la Caption va fi afisat cu gri. Name stabileste numele obiectului cu ajutorul caruia acesta poate fi identificat atunci cand scriem cod. Shortcut stabileste o combinatie de taste prin apasarea careia se poate alege o anumita optiune din meniu. Fiecare meniu poate contine submeniunri care la randul lor pot contine alte submeniuri. Exista cinci nivele de submeniuri. Pe langa aceste meniuri prezentate care se gasesc in bara de meniuri a aplicatiei, mai exista si meniurile Defilante (Pop-up). Acestea 'defileaza' pe ecran in momentul cand se apasa butonul dreapta al mouse-ului. Pentru a realiza un astfel de meniu trebuie sa creem un meniu ivizibil cu ajutorul editorului de meniuri care sa contina cel putin un meniu invizibil. Il putem afisa pe ecran folosind metoda PopupMenu a formei.

3.12. Structuri de control


Structura liniara. Poate contine o succesiune de instructiuni de tipul:

- instructiune de atribuire; - instructiune de apel de procedura. Instructiunea cea mai importanta si cea mai frecventa a limbajului este instructiunea de atribuire, avand forma: variabila=expresie sau Set variabila=obiect sau Nume_de_functie=expresie Instructiunea specifica faptul ca unei variabile sau unei functii (cea din stanga semnului '=') ii este atribuita o noua valoare, care este specificata printr-o expresie sau printr-un obiect. O expresie consta dintr-o secventa formata din operanzi (variabile, constante, etc.) si operatori (simboluri operationale). Instructiunea de apel de procedura specifica activarea (apelul) procedurii al carui nume apare in instructiune si are forma: nume_de_procedura lista_parametri_actuali sau Call nume_de_procedura(lista_parametrii_actuali) Structura alternativa Este descrisa cu ajutorul instructiunilor If Then, If Then Else si Select Case. Structura repetitiva Permite repetarea in anumite conditii a unei instructiuni sau a unei secvente de instructiuni sau a unei secvente de instructiuni. Avem doux tipuri de structuri repetitive: Structuri repetitive cu contor - descrise de instructiunile For Next si For Each Next care executa acelasi lucru de un numar stabilit de ori; Structuri repetitive cu conditie - descrise de diferitele variante ale instructiunii Do Loop ce indeplinesc aceeasi sarcina atata timp cat o conditie existx sau pana cand nu mai exista o conditie.

Exemplu: Do While i<=9

MsgBox 'Este repetarea numarului: '+str(i) Loop

IV. Limbajul de Programare Visual Basic 4.1. Generalitati privind limbajele de programare.
Un limbaj de programare este un ansamblu de simboluri, cuvinte, instructiuni si semnificatii atribuite acestora, utilizat pentru descrierea algoritmilor. Limbajul de programare este un mijloc de comunicare intre calculator si programator. Orice limbaj de programare presupune definirea urmatoarelor elemente componente: o o o o o Alfabetul; Vocabularul; Gramatica; Punctuatia; Semantica.

Program sursa - reprezinta programul scris ca text intr-un limbaj de programare, el fiind scris prin intermediul unui editor de texte al limbajului de programare sau acceptat de limbajul de programare respectiv (ex.: Notepad). Compilatorul - este componenta software care realizeaza traducerea programului sursa in cod intern, rezultand asa numitul program cod obiect.

4.2. Elemente ale limbajului de programare Visual Basic


Setul de caractere Pentru a scrie instructiuni pe care calculatorul sa le interpreteze si sa le execute in cadrul programului folosim cuvintele. In cadrul limbajului de programare Visual Basic se pot folosi urmatoarele caractere: - Litere mari si mici ala alfabetului limbii romane :A-Z, a-z; - Cifrele sistemului de numerotatie zecimal: 0-9; - Caractere speciale: + - / ^ () [] . , ; : _ ! # $ % etc.; - Caractere speciale perechi, care definesc operatori de comparare: <=, >=, =, <>; - Separatori: spatiu, tab si caracterul Enter.

Identificatori Un identificator este numele dat de programator unui element dintr-un program, care poate fi o variabila, o constanta, un tip definit de utilizator, o enumerare, o procedura, o functie, un obiect, o metoda, o proprietate, un control, o forma sau chiar proiectul insusi. Un proiect Visual Basic poate sa contina maxim 32000 identificatori. Comentarii, separatori, impartirea liniei Comentariile sunt siruri de caractere care au in fata caracterul apostrof ( ' ) si servesc pentru a face textul programului mai lizibil, pentru a documenta programul. Daca se doreste se pot scrie mai multe instructiuni pe o singura linie despxrtindu-le cu ajutorul separatorului de instructiuni si declaratii care este caracterul doua puncte ( : ). Daca o declaratie sau o instructiune este prea mare, atunci ea se poate scrie pe mai multe linii folosind caracterul continuatorul de linie, un spatiu urmat de o linie jos ( _).

4.3. Tipuri de date


Tipul unei date defineste multimea de valori pe care le poate lua o variabila si multimea de operatii care pot fi efectuate cu elementele multimii respective Fiecare tip de data permite o serie de operatii. 4.3.1. Constante In Visual Basic exista doua tipuri de constante: o o Intrinseci sau definite de sistem; Simbolice sau definite de utilizator (se declarx prin instructiunea Const).

Formatul general al declaratiei de constante este: [Public|Private] Const Nume constanta[As type] = expresie 4.3.2. Variabile Visual Basic Tipul variabilelor din Visual BAsic sunt: Variable, Byte, Boolean, String, Integer, Long, Single, Double, Currency, Date si Object. Tipul Variant (nedefinit) este un tip special de date care poate contine date numerice, siruri de caractere si date calendaristice, precum si valorile Null (indica faptul ca o variabila nu contine nici o data vlida in mod deliberat) si Empty (indica faptul ca o variabila nu a fost initializata si este egala cu zero). Declararea unei variabile inseamna practic a defini de la inceput informatiile necesare programului de variabila respectiva, astfel incat programul sa stie cum se numeste, ce tip de date poate stoca, ce zona de memorie trebuie sa-i aloce si unde.

Declararea unei variabile se face astfel: [Public|Private|Dim] NumeVariabila As TipVariabila In Visual Basic principalele tipuri de date sunt: Tipul Byte poate lua valori de la 0 la 255; Tipul Integer are sufixul procent %, ocupa doi octeti si poate lua valori intregi cuprinse in intervalul de la -32768 la 32767; Tipul Long are sugixul &, ocupa 4 octeti si poate lua valori intregi cuprinse in intervalul-2.147.483.648 si 2.147.483.647; Tipul Single poate memora valori reale in simpla precizie; Tipul Double poate memora valori reale in dubla precizie; Tipul Curency are ca sufix semnul @, ocupa 8 octeti si poate lua valori reale cuprinse intre -9.22*E la puterea 14 si 9.22*E la puterea 14; Tipul Date nu are suffix, ocupa 8 octeti si poate lua valori cuprinse intre 1 ianuarie 1000 si 31 decembrie 9999; Tipul String are sufixul $ si ocupa numarul de octeti precizat prin declaratia de tip; Tipul Boolean memoreaza valori logice de tip adevarat sau fals, da, nu, pornit sau oprit si ocupa doi octeti; Tipul de date Obiect reprezinta o variabila care poate stoca o valoare sau poate apela obiecte din cadrul aplicatiei sau din alte aplicatii; Tipul Variant este tipul implicit pentru orice variabila Visual Basic care nu a fost declarata in mod explicit.

4.3.3. Tipuri de date definite de utilizator. Aceste tipuri de date sunt compuse dintr-un numar de componente numite campuri. Spre deosebire de tablouri, campurile pot contine tipuri de date diferite. Sintaxa unui tip definit de utilizatori este urmatoarea: Private|Public Type NumeTip Nume_camp1 As TipData Nume_camp2 As TipData ..

Nume_camp3 As TipData End Type 4.3.4. Date de tipul Enumerare. Tipul de date enumerare defineste o multime ordonata de valori: se enumera un sir de identificatori care desemneaza valorile posibile. Sintaxa instructiunilor de declarare a unui tip enumerare este: Private|Public Enum NumeEnumerare Element1[=valoare] Element2[=valoare] .. Elementn[=valoare] End Enum

4.4. Operatori
Operatorii reprezinta comenzi speciale pentru operatiile ce pot fi executate cu datele din program. Visual Basic pune la dispozitie 4 tipuri de operatori: a) Operatori Aritmetici: +(adunare), -(scadere), *(inmultire), /(impartire), (impartire intreaga) si MOD (modulo); b) Operatori Logici - manipuleaza valorile True si False - : AND(conjunctia logica), OR(disjunctia logica), XOR(disjunctia exclusiva), NOT(negatia logica), EQV(echivalenta logica), IMP(implicatia logica); c) Operatori de comparare: <(mai mic), <=(mai mic sau egal), >(mai mare), >=(mai mare sau egal), =(egal), <>(diferit, neegal); d) Operatori de concatenare: +, & realizeaza concatenarea (alipirea) a doua siruri de caractere.

4.5. Operatiuni de Intrare-Iesire


4.5.1. Dialogul standard cu utilizatorul Functia InputBox - afiseaza o caseta de dialog care contine un mesaj, doua butoane (OK si Cancel) si o zona de text in care se poata tasta un raspuns. Sintaxa functiei este:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) Functia MsgBox - afiseaza un mesaj intr-o caseta de dialog si se asteapta ca utilizatorul sa actioneze unul dintre butoanele existente. Functia returneaza o valoare intreaga, indicand astfel care buton a fost actionat. Sintaxa este: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) 4.5.2. Comanda Print Puteti afisa text in interiorul formelor sau al casetelor cu poza cu ajutorul metodei Print. Sintaxa: [obiect.] Print [lista iesiri] [ ]

4.6. Functii incorporate in Visual Basic.


Acestea pot fi grupate in mai multe categorii, astfel: a). Functii matematice si statice: ABS( ),EXP( ), INT( ), LOG( ), RND( ), SQR( ), ATN( ), SIN( ), COS( ) si TAN( ); b). Functii pentru siruri de caractere: LCASE(sir), UCASE(sir), LTRIM(sir), RTRIM(sir), TRIM(sir), CHR(sir), ASC(sir), LEN(sir), VAL(sir), StrREVERSE(sir), LEFT(sir,Nrc), RIGHT(sir,Nrc), MID(sir,Start [,Nrc]), INSTR([intStart, ] Sir, strCauta [, intCompara]); c). Functii de editare: Format, Format_String; d). Functii financiare: DDB, FV, IPMT, IRR, MIRR, NPER, NPV, PMT, PPMT, PV, RATE, SLN; e). Functii pentru conversia intregilor: Int(), CInt(); f). Functii pentru conversia tipului de data: CDbl(arg), CLng(arg), CSng(arg), Cstr(arg), CVar(arg), CCur(arg); g). Functii de verificare a tipului de data: IsNumeric(), IsDate(), IsEmpty(), IsNull(), VarType(); h). Functii pentru lucrul cu date calendaristice: DateDiff(), IsDate(expresie), Time(), Date(), Now(), CStr (Time), CStr (Date), CStr (Now); i). Functii pentru lucrul cu fisiere: Seek(NumarFisier), LOF(NumarFisier), EOF(NumarFisier).

4.7. Functii si proceduri utilizator in Visual Basic.


O functie este un modul program care efectueaza o anumita sarcina si returneaza o valoare identificata prin numele functiei.

O procedura eveniment devine activx atunci cand e apelata de utilizator sau de program in mod automat. O procedura functie este o procedura care realizeaza o anumita valoare identificata prin numele functiei. Procedurile tip proprietate pot returna si atribui valori si pot stabili referinte la obiecte. Procedurile sunt blocuri de cod constituite din instructiuni, date locale si alte subprograme. Procedurile generale sunt blocuri de cod prin care se transmite aplicatiei cum trebuie sa indeplineasca o anumita sarcina. Procedurile eveniment sunt blocuri de cod asociate diferitelor evenimente recunoscute de un obiect si care se executa in momentul in care se produce evenimentul respectiv. Apelarea unei proceduri se face in doua moduri, cu sintaxa: NumeProcedura lista_parametri_actuali sau Call NumeProcedura(lista_parametri_actuali)

4.8. Instructiuni de atribuire.


Atribuirea unei valori la o variabila de memorie se poate efectua prin instructiunile: Let, Set, Lset si Rset.

4.9. instructiuni de terminare sau oprire a programului.


Terminarea executiei unui program sau oprirea temporara a acestuia se pot realiza prin instructiunile: DoEvents, End, Exit, Stop.

4.10. Comenzi pentru lucrul cu fisiere.


4.10.1. Deschiderea fisierului - este o operatie care trebuie executata inainte de orice prelucrare a acestuia. Pentru intrare sau iesire, orice fisier trebuie deschis cu comanda OPEN, cu sintaxa: OPEN ( numefisier) FOR ( mod de deschidere ) [Access acces] [blocare] AS # numarFisier [Len=lungInreg] 4.10.2. Comenzi pentru fisiere aleatorii. Descrieirea campurilo - ce formeaza inregistrarile unui fisier aleator se face utilizand o declaratie de tip utilizator:

TYPE numetip NumeVariabila1 as NumeVariabilak as EDN TYPE Scrierea unei inregistrari intr-un fisier se face cu instructiunea PUT care are urmatoarea sintaxa: PUT #NumeFisier, [NumarInreg] , NumeVariabila Pozitionarea pentru citire pe o inregistrare dintr-un fisiert aleator se face cu instructiunea GET, cu sintaxa: GET [#]numarfisier [, numar] 4.10.3. Inchiderea fisierelor - se realizeaza cu comanda CLOSE, a carei sintaxa este: CLOSE [lista fisiere] sau CLOSE [ # numarFisier1] [, # numarFisier2] [, # numarFisier3] 4.10.4. Comenzi pentru fisiere secventiale. a). Scrierea datelor intr-un fisier secvential se poate face cu comenzile: Print #NumarFisier, lista_expresii sau Write #NumarFisier, lista_expresii b). Citirea informatiilor din fisiere cu acces secvential - se poate face cu ajutorul instructiunilor: Input #NumarFisier, lista_expresii Line Input# NumarFisier, SirCaractere Input$ (NumarOcteti, [#] NumarFisier)

4.11. Grafica si Multimedia in Visual Basic.


Stergerea zonei de desenare.

Pentru a curata zona de desenare folositi metoda Cls care sterge si redeseneaza forma sau controlul pastrand aceeasi culoare de fundal. Stabilirea culorilor. BackColor - culoarea fundalului unui control sau a unei forme; ForeColor - culoarea folositx la desenarea figurilor si textelor; BorderColor - culoarea chenarului; FillColor - culoarea de completare a spatiului liber al unei figuri. Afisarea textului - in interiorul formelor sau al casetelor cu poza se face cu ajutorul metodei Print, cu sintaxa: [obiect.] Print [lista iesiri] [ ] Desenarea unui dreptunghi se face folosind metoda Line a formei sau a casetei cu imagini, care are urmatoarea sintaxa: obiect.Line [Step] (x1,y1) [Step] (x2,y2), [color], [B], [F] Desenarea cercurilor, a arcelor de cerc si a elipselor - se realizeaza utilizand metoda Circles a formei sau a casetei cu poza, cu sintaxa: Obiect.Circle [Step] (x,y), radius, [color,[start, end, [aspect]]] Desenarea punctelor intr-o forma sau Intr-o casetx cu poza se realizeaza cu ajutorul metodei Pset, cu sintaxa: obiect.Pset [Step] (x,y), [color]

PARTEA a 2-a Aplicatii. 1) Ceas cu alarma

Private Declare Function mciExecute Lib 'winmm.dll' (ByVal lpstrCommand As String) As Long Dim x Private Sub Command1_Click() On Error Resume Next Form2.Show End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Label1.Caption = Format(Time, 'short time')

End Sub Private Sub Timer2_Timer() If Label1.Caption = Text1.Text Then x = mciExecute('play alarm.wav') MsgBox ' End If End Sub Private Sub Command1_Click() On Error Resume Next Form1.Text1.Text = Form2.Text1.Text + ':' + Form2.Text2.Text Form1.Timer2.Enabled = True Form1.Timer2.Interval = 1000 If Text1.Text > 24 Or Text1.Text < 0 Then MsgBox 'Introduceti o valoarea intre 0 si 24', vbExclamation, 'Ora setata incorect !' Text1.Text = '' ElseIf Text2.Text > 59 Or Text2.Text < 0 Then MsgBox 'Introduceti o valoarea intre 0 si 59', vbExclamation, 'Minute setate incorect !' Text2.Text = '' End If Unload Me End Sub Private Sub Form_Load() Alarma !!! ', vbInformation, 'Alarma'

On Error Resume Next End Sub 2) Calculator

Dim n As Double Private Sub Command1_Click() On Error Resume Next If Option1.Value = True Then Text3.Text = Val(Text1.Text) + Val(Text2.Text) ElseIf Option2.Value = True Then Text3.Text = Val(Text1.Text) - Val(Text2.Text) ElseIf Option3.Value = True Then Text3.Text = Val(Text1.Text) * Val(Text2.Text) ElseIf Option4.Value = True Then If Text2.Text = '0' Then

MsgBox 'Nu se poate imparti la 0', vbCritical, 'Eroare' Text2.Text = '' Else Text3.Text = Val(Text1.Text) / Val(Text2.Text) End If ElseIf Option5.Value = True Then Text2.Text = '0' Text2.Enabled = False If Val(Text1.Text) < 0 Then MsgBox 'Nu se poate extrage radical de oridin 2 din numere negative', vbCritical, 'Eroare' Else n = Val(Text1.Text) Text3.Text = Sqr(n) End If End If Text2.Enabled = True End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Text1.Text = Empty Text2.Text = Empty

Text3.Text = Empty Option1.Value = False Option2.Value = False Option3.Value = False Option4.Value = False Option5.Value = False End Sub Private Sub Option5_Click() Text2.Enabled = False End Sub 3) Conversie valuatara

Private Sub Command1_Click() Unload Me End Sub Private Sub Command2_Click() OpDolar.Value = False OpEuro.Value = False OpFranc.Value = False OpYen.Value = False suma = Empty txtDolar = Empty txtEuro = Empty txtFranc = Empty txtYen = Empty End Sub Private Sub Form_Load() End Sub Private Sub OpDolar_Click() curs = InputBox('Introduceti cursul valutar pentru USD:') txtDolar = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' USD' End Sub Private Sub OpEuro_Click() curs = InputBox('Introduceti cursul valutar pentru Euro:') txtEuro = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Euro'

End Sub Private Sub OpFranc_Click() If OpFranc.Enabled = True Then curs = InputBox('Introduceti cursul valutar pentru Francul Francez:') txtFranc = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Franci' End If End Sub Private Sub OpYen_Click() If OpYen.Enabled = True Then curs = InputBox('Introduceti cursul valutar pentru Yenul Japonez:') txtYen = CStr(Format(Val(suma.Text) / curs, 'FIXED')) + ' Yeni' End If End Sub 4) Calcul dobanda Option Explicit Dim i As Integer, j As Integer Dim DobandaA As Long, SumaActual As Long Private Sub cmdCalcul_Click()

Select Case cmbCont.Text

Case cmbCont.Text If cmbCont.Text = '<ALL>' Then Me.Cls ''curata' forma de text For j = LBound(Record) To UBound(Record) 'incepe de la LBound - limita inferioara a vectorului 'RECORD' - pana la UBound - limita superioara a vectorului

If Record(j).TermenDepozit = '1' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.1) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '3' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.11) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '6' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.12) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '12' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.14) * Val(Record(j).TermenDepozit) / 12

SumaActual = Val(Record(j).SumaDepusa) + DobandaA Me.Print '(NR.CONT ' & Record(j).NrCont & ') ' & Record(j).Nume & ' ' & Record(j).Prenume & vbCrLf & _ 'VALOARE DOBANDA = ' & DobandaA & vbCrLf & _ 'SUMA ACTUALIZATA = ' & SumaActual & vbCrLf

Next j

Else

If cmbCont.Text <> '' Then

Me.Cls

j = Val(cmbCont.Text)

If Record(j).TermenDepozit = '1' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.1 / 100) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '3' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.11 / 100) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '6' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.12 / 100) * Val(Record(j).TermenDepozit) / 12 If Record(j).TermenDepozit = '12' Then DobandaA = (Val(Record(j).SumaDepusa) * 0.14 / 100) * Val(Record(j).TermenDepozit) / 12

SumaActual = Val(Record(j).SumaDepusa) + DobandaA Me.Print '(NR.CONT ' & Record(j).NrCont & ') ' & Record(j).Nume & ' ' & Record(j).Prenume & vbCrLf & _ 'VALOARE DOBANDA = ' & DobandaA & vbCrLf & _ 'SUMA ACTUALIZATA = ' & SumaActual

ElseIf i < 0 Then MsgBox 'Nu exista inregistrari', vbInformation

ElseIf i >= 0 Then MsgBox 'Alege NUMAR CONT', vbInformation

End If

End If Case '': Exit Sub

End Select End Sub Private Sub cmdRaport_Click() If i < 0 Then

MsgBox 'Nu exista inregistrari', vbInformation

ElseIf i >= 0 Then MsgBox 'Exista ' & i + 1 & ' inregistrari.', vbInformation

End If

End Sub Private Sub Form_Load() i = -1

End Sub

Private Sub cmdIntroducere_Click() i = i + 1 'incrementare numar cont ReDim Preserve Record(i) 'redimensionare marime vector 'RECORD' Record(i).NrCont = i 'atribuire numar cont EnterNume: 'marcaj punct de inceput inregistrare Nume Record(i).Nume = InputBox('NUME pentru REC.' & i, 'Inregistrare NR. ' & i) 'atribuire nume 'start verificari pentru Nume If Len(Record(i).Nume) = 0 Then 'verificare daca exista nume introdus

If MsgBox('NUME nu poate avea valoare nula.' & vbCrLf & _ 'Va rog introduceti NUME.' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', _ vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then 'Numele nu este introdus sau se doreste anularea inregistrarii (utilizatorul a executat clic pe Cancel)

GoTo EnterNume 'executia se intoarce la marcajul de inceput inregistrare Nume (utilizatorul a dat clic pe OK, deci doreste introducerea numelui, implicit executia continua

Else

'utilizatorul a executat clic pe Cancel, el nu mai doreste sa continue inregistrarea i = i - 1 'contorul de contruri se intoarce la starea precedenta

MsgBox 'Inregistrare anulata.' & vbCrLf & _ 'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anulata' 'notificare Exit Sub 'executia intregii subrutine se opreste

End If

End If EnterPrenume: Record(i).Prenume = InputBox('PRENUME pentru REC.' & i, 'Inregistrare NR. ' & i) If Len(Record(i).Prenume) = 0 Then

If MsgBox('PRENUME nu poate avea valoare nula.' & vbCrLf & _ 'Va rog introduceti PRENUME.' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', _ vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then

GoTo EnterPrenume

Else

i=i-1 MsgBox 'Inregistrare anulata.' & vbCrLf & _

'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anulata' Exit Sub

End If

End If EnterSumaDepusa: Record(i).SumaDepusa = InputBox('SUMA DEPUSA pentru REC.' & i & vbCrLf & vbCrLf & _ Record(i).Prenume & ', ' & UCase(Record(i).Nume), 'Inregistrare NR. ' & i) If IsNumeric(Record(i).SumaDepusa) = False Then 'se verifica daca SumaDepusa este valoare numerica

If MsgBox('SUMA DEPUSA nu poate avea valoare nula si/sau sa fie un sir de caractere.' & vbCrLf & _ 'Va rog introduceti SUMA DEPUSA (valoare numerica).' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then

GoTo EnterSumaDepusa

Else

i=i-1

MsgBox 'Inregistrare anulata.' & vbCrLf & _ 'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anulata' Exit Sub

End If

End If EnterTermenDepozit: Record(i).TermenDepozit = InputBox('TERMEN DEPOZIT pentru REC.' & i & vbCrLf & _ Record(i).Prenume & ', ' & UCase(Record(i).Nume) & vbCrLf & vbCrLf & _ 'TERMENE: (introduceti cifra corespunzatoare)' & vbCrLf & _ '(1) O luna' & vbCrLf & _ '(3) Trei luni' & vbCrLf & _ '(6) Sase luni' & vbCrLf & _ '(12) Doisprezece luni', _ 'Inregistrare NR. ' & i)

If IsNumeric(Record(i).TermenDepozit) = False Or _ Record(i).TermenDepozit <> '1' And _ Record(i).TermenDepozit <> '3' And _ Record(i).TermenDepozit <> '6' And _

Record(i).TermenDepozit <> '12' Then 'se verifica daca TermenDepozit este valoare numerica si daca aceasa este 1, 3, 6 sau 12

If MsgBox('TERMEN DEPOZIT nu poate avea valoare nula si/sau sa fie un sir de caractere.' & vbCrLf & _ 'Va rog introduceti TERMEN DEPOZIT (valoare numerica: 1, 3, 6, 12).' & vbCrLf & vbCrLf & _ 'Pentru a anula inregistrarea curenta clic 'Cancel'', vbExclamation + vbOKCancel, 'Date invalide') = vbOK Then

GoTo EnterTermenDepozit Else i=i-1 MsgBox 'Inregistrare anulata.' & vbCrLf & 'Incrementarea NumarCont nemodificata (REC.' & i + 1 & ')', , 'Inregistrare Anulata' Exit Sub End If End If cmbCont.Clear For j = LBound(Record) To UBound(Record) cmbCont.AddItem j Next j cmbCont.AddItem '<ALL>'

End Sub

5) Lista de produse

Dim a As String Private Sub cmdadauga_Click() a = InputBox('Introduceti ce doriti sa adaugati in lista') If a = '' Then MsgBox ('introduceti un produs') Else lst1.AddItem (a) End If End Sub Private Sub cmdsterge_Click() lst1.RemoveItem (ListIndex) End Sub Private Sub lst1_Click() lbl3.Caption = lst1.ListIndex + 1 End Sub

6) Analiza unui text preluat dintr-un fisier sau introdus de la tastatura Option Explicit

Dim retry As Integer, maxRetry As Integer Dim strPassword As String Private Sub cmdExit_Click() Unload Me End Sub Private Sub cmdOK_Click() If Text1 <> strPassword Then retry = retry + 1 If retry >= maxRetry Then MsgBox 'Parola incorecta.' & vbCrLf & 'S-a depasit numarul de incercari.' & vbCrLf & 'Executie terminata.', vbCritical, 'Parola' Unload Me

Else Select Case maxRetry - retry Case 1: MsgBox 'Parola incorecta.' & vbCrLf & 'Mai aveti o incercare.', vbCritical, 'Parola' Case Else MsgBox 'Parola incorecta.' & vbCrLf & 'Mai aveti ' & maxRetry retry & ' incercari.', vbCritical, 'Parola' End Select End If Else Me.Hide Load Form2 Form2.Show Unload Me End If End Sub Private Sub Form_Load() retry = 0 maxRetry = 5 strPassword = 'parola' Label1 = 'Facultatea Informatica Manageriala' & vbCrLf & _ 'Universitatea Romano-Americana' & vbCrLf & vbCrLf & _ 'Descriere proiect: Analiza Text'

End Sub Private Sub Command1_Click() Unload Me End End Sub Private Sub Command2_Click() On Error Resume Next Dim cuv() As String Dim tot() As Long Dim i As Long, j As Long If Len(Text1) <> 0 Then cuv = Split(Trim(Text1), ' ', , vbTextCompare) Form3.Text1.Text = 'Cuvinte gasite: ' & UBound(cuv) + 1 & vbCrLf ReDim tot(UBound(cuv)) 'nr aparitii For i = 0 To UBound(cuv) For j = 0 To UBound(cuv) If Trim(cuv(i)) = Trim(cuv(j)) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(cuv) For j = i + 1 To UBound(cuv) If Trim(cuv(i)) = Trim(cuv(j)) Then cuv(i) = ''

Next Next ' afisare For i = 0 To UBound(cuv) If cuv(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Cuvant: ' & Chr(34) & cuv(i) & Chr(34) & ' nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '----------------------' 'afisare propozitii (succesiune de cuvinte urmate de .) Dim prop() As String prop = Split(Text1, '.', , vbTextCompare) Form3.Text1.Text = Form3.Text1.Text & 'Propozitii gasite: ' & UBound(prop) & vbCrLf ReDim tot(UBound(prop)) ' total aparitii For i = 0 To UBound(prop) For j = 0 To UBound(prop) If Trim(prop(i)) = Trim(prop(j)) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(prop) For j = i + 1 To UBound(prop) If Trim(prop(i)) = Trim(prop(j)) Then prop(i) = '' Next

Next ' afisare For i = 0 To UBound(prop) If prop(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Propozitie: ' & Chr(34) & prop(i) & Chr(34) & ' nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '-------------------------' 'afisare frazele (succesiune de cuvinte urmate de . si ,) Dim fraz() As String fraz = Split(Text1, '.', , vbTextCompare) fraz = Split(Text1, ',', , vbTextCompare) Form3.Text1.Text = Form3.Text1.Text & 'frazele gasite: ' & UBound(fraz) + 1 & vbCrLf ReDim tot(UBound(fraz)) ' total aparitii For i = 0 To UBound(fraz) For j = 0 To UBound(fraz) If Trim(fraz(i)) = Trim(fraz(j)) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(fraz) For j = i + 1 To UBound(fraz) If Trim(fraz(i)) = Trim(fraz(j)) Then fraz(i) = '' Next

Next ' afisare For i = 0 To UBound(fraz) If fraz(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'frazele: ' & Chr(34) & fraz(i) & Chr(34) & ' nr aparitii: ' & tot(i) & vbCrLf Next Form3.Text1.Text = Form3.Text1.Text + '------------------------' Dim lit() As String ReDim lit(Len(Text1)) Form3.Text1.Text = Form3.Text1.Text & 'Litere gasite: ' & UBound(lit) & vbCrLf ReDim tot(UBound(lit)) For i = 0 To UBound(lit) lit(i) = Mid(Text1, i + 1, 1) Next For i = 0 To UBound(lit) For j = 0 To UBound(lit) If lit(i) = lit(j) Then tot(i) = tot(i) + 1 Next Next For i = 0 To UBound(lit) For j = i + 1 To UBound(lit) If lit(i) = lit(j) Then lit(i) = '' Next

Next ' afisare For i = 0 To UBound(lit) If lit(i) <> '' Then Form3.Text1.Text = Form3.Text1.Text & 'Litera: ' & Chr(34) & lit(i) & Chr(34) & ' nr aparitii: ' & tot(i) & vbCrLf Next Else Form3.Text1 = 'ERROR: TEXT SURSA INEXISTENT' End If Form3.Show 1, Me End Sub Private Sub Command3_Click() On Error Resume Next Dim fileData As String CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 fileData = Input(LOF(1), 1) Close #1 Text1.Text = fileData End Sub Private Sub Form_Load() CommonDialog1.Filter = 'Text (*.txt)|*.txt|All files (*.*)|*.*' End Sub Private Sub Form_Resize()

On Error Resume Next If Me.ScaleWidth <= 120 + Command3.Width + 240 + Command2.Width + 120 + Command1.Width + 120 Then Me.Width = 120 + Command3.Width + 240 + Command2.Width + 120 + Command1.Width + 120 End If Text1.Move 120, 120, Me.ScaleWidth - 240, Me.ScaleHeight - 240 Command1.Height - 120 Command3.Move 120, Text1.Height + 240 Command2.Move Command3.Width + 240, Text1.Height + 240 Command1.Move Me.ScaleWidth - Command1.Width - 120, Text1.Height + 240 End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() End Sub

7) Aplicatie pentru un centru de vanzare si inchiriere carti, reviste, ziare.

Option Explicit Dim k As Integer Dim strText As String Private Sub Form_Activate() strText = String(30, ' ') + 'Va multumim pentru vizita la Centrul nostru de vanzari si inchirieri - carti,reviste,ziare' Timer1.Enabled = True Text1.Text = 'Centru de inchirieri si vanzare' & vbCrLf & 'carti, reviste, ziare'

Text2.SetFocus k=1

End Sub Private Sub Timer1_Timer() strText = Mid(strText, 2) & Left(strText, 1) Text2.Text = strText k=k+1 If k = 30 Then Form5.Show End If End Sub

Private Sub bare_instrumente_Click() BaraInstrumente.Show

End Sub Private Sub Clienti_Click() Clientii.Show End Sub Private Sub Clienti_inchi_vanz_Click() ClientiInchiVanz.Show End Sub Private Sub Command1_Click() End End Sub Private Sub culori_Click() aspect.Show End Sub Private Sub exit_Click() End End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data' Unload Splash Unload Form5 If parolacon = 'admin' Then setari.Visible = True

Else setari.Visible = False End If DB.Close 'Set DB = OpenDatabase(DBDir & DBName) 'Setdata1.recordset= DB.OpenRecordset('table1') End Sub Private Sub generare_app_Click() MsgBox ' Se genereaza Baza de date - numai la incarcarea aplicatiei pentru prima oara' 'Kill ('C:proiectVBdata.mdb') MsgBox 'Recreati Baza de Date ?', vbYesNo If vbYes Then Kill App.Path & 'data.mdb' '1) Creaza baza de date DATA 'Set DB = CreateDatabase(App.Path & 'data', dbLangGeneral, dbEncrypt) Set DB = CreateDatabase(App.Path & 'data', dbLangGeneral) End If '2) Creaza tabela clienti MsgBox 'Doriti crearea tbelei CLIENTI ?', vbYesNo If vbYes Then DB.Execute 'CREATE TABLE clienti' & '( nume_pren CHAR (30),legit int, cnp char(13),datan date);' DB.Execute 'insert into clienti (nume_pren ,legit , cnp , datan) values ('Ionescu Ion',1, '1234567890123', '21/10/1986');'

End If '3) Creaza tabela PRODUSE MsgBox 'Doriti crearea tbelei PRODUSE ?', vbYesNo If vbYes Then DB.Execute 'CREATE TABLE PRODUSE ' & '(tipprod CHAR (7), numeprod CHAR (20), prez char (50), autedit char(50), evbib char(1), inchiriat char(1), pret INT, cant int, imag char (20));' DB.Execute 'insert into PRODUSE (tipprod,numeprod,prez,autedit,evbib,inchiriat,pret,cant,imag) values ('ziar', 'ZIARUL', 'cotidian central','tipografia ziarul','0','0',1,1,'ziarul.jpg'); ' End If '4) Creaza tabela miscari MsgBox 'Doriti crearea tbelei MISCARI ?', vbYesNo If vbYes Then DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT, cnp CHAR(13), numeprod CHAR (20), tipprod char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );' DB.Execute 'insert into miscari (legit) values ('1'); ' End If '5) Creaza tabela parole MsgBox 'Doriti crearea tbelei PAROLE ?', vbYesNo If vbYes Then DB.Execute 'CREATE TABLE parole ' & '(user CHAR (20), parola char (6), drepturi char (13) );' DB.Execute 'insert into parole (user, parola, drepturi) values ('Admin','admin','administrator'); '

DB.Execute 'insert into parole (user, parola, drepturi) values ('Operator1','op1','operator'); ' DB.Execute 'insert into parole (user, parola, drepturi) values ('Operator2','op2','operator'); ' End If DB.Close MsgBox 'Baza de date OK' End Sub Private Sub imagini_Click() ModificareImagini.Show End Sub Private Sub imprumuturi_Click() Imprumutury.Show End Sub Private Sub Incasari_Click() Inkasari.Show End Sub Private Sub inregistrare_client_Click() InregistrareClient.Show End Sub Private Sub intrari_prod_Click() produseNoi.Show End Sub Private Sub parola_Click()

Parole.Show End Sub Private Sub Penalizari_Click() Penalizarile.Show End Sub Private Sub prod_neret_Click() Prodneret.Show End Sub Private Sub Produse_Click() Prods.Show End Sub Private Sub produse_existente_Click() ProduseExistente.Show End Sub Private Sub produse_inchiriate_Click() ProduseInchiriate.Show End Sub Private Sub produse_returnate_Click() Prodreturn.Show End Sub Private Sub restantieri_Click() Restantierii.Show End Sub

Private Sub text_Click() ModificareText.Show End Sub Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If Button.Index = 1 Then Imprumutury.Show End If If Button.Index = 2 Then Vanzari.Show End If If Button.Index = 3 Then InregistrareClient.Show End If If Button.Index = 4 Then ProduseExistente.Show End If If Button.Index = 5 Then Restantierii.Show End If If Button.Index = 6 Then produseNoi.Show End If End Sub

Private Sub tot_pro_client_Click() Totprod.Show End Sub Private Sub Vanzare_Click() Vanzari.Show End Sub

Private Sub Combo1_Click() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'select numeprod,pret from produse where trim(tipprod) = '' & Trim(Combo1.Text) & '''

Data1.Refresh Data1.Recordset.MoveLast 'MsgBox Data1.Recordset.RecordCount

If Data1.Recordset.RecordCount > 0 Then Combo2.Clear Data1.Recordset.MoveFirst While Not Data1.Recordset.EOF Combo2.AddItem Data1.Recordset.Fields(0) Data1.Recordset.MoveNext Wend Combo2.Text = Combo2.List(0) End If End Sub Private Sub Combo2_Click() Data1.Recordset.MoveFirst Data1.Recordset.Move Combo2.ListIndex Text4.Text = Data1.Recordset.Fields(1) End Sub Private Sub Command1_Click() InregistrareClient.Show Command2.Visible = True Text1.Visible = False

Text2.Visible = False Text3.Visible = False End Sub Private Sub Command2_Click() Text1.Visible = True Text2.Visible = True Text3.Visible = True Text1.Text = legitg Text2.Text = cnpg Text3.Text = numeg Command2.Visible = False Text5.SetFocus End Sub Private Sub Command3_Click() Data1.Recordset.Close Data1.Database.Close DBDir = App.Path DBName = 'data.mdb' Set DB = OpenDatabase(DBDir & DBName) 'DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT,cnp CHAR(13), numeprod CHAR (20), tipprod char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );' DB.Execute 'insert into miscari (legit,cnp,numeprod,tipprod,pret,datai,dataimp,datares,tipop) values ('' _ & Text1.Text & '', '' _

& Text2.Text & '', '' _ & Combo2.Text & '', '' _ & Combo1.Text & '', '' _ & Text4.Text & '', '' _ & Text6.Text & '', '' _ & Text6.Text & '', '' _ & Text7.Text & '', '1');' End Sub Private Sub Command4_Click() 'DB.Close Unload Me End Sub Private Sub Form_Load() Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Text1.Visible = False Text2.Visible = False Text3.Visible = False Command2.Visible = False Text6.Text = Mid(Now, 1, 10)

End Sub Private Sub Text5_LostFocus() Text8.Text = Val(Text5.Text) * Val(Text4.Text) End Sub

Private Sub Combo1_Click() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'select numeprod,pret from produse where trim(tipprod) = '' & Trim(Combo1.Text) & ''' Data1.Refresh Data1.Recordset.MoveLast 'MsgBox Data1.Recordset.RecordCount

If Data1.Recordset.RecordCount > 0 Then Combo2.Clear

Data1.Recordset.MoveFirst While Not Data1.Recordset.EOF Combo2.AddItem Data1.Recordset.Fields(0) Data1.Recordset.MoveNext Wend Combo2.Text = Combo2.List(0) End If End Sub Private Sub Combo2_Click() Data1.Recordset.MoveFirst Data1.Recordset.Move Combo2.ListIndex Text4.Text = Data1.Recordset.Fields(1) End Sub Private Sub Command1_Click() InregistrareClient.Show Command2.Visible = True Text1.Visible = False Text2.Visible = False Text3.Visible = False End Sub Private Sub Command2_Click() Text1.Visible = True Text2.Visible = True

Text3.Visible = True Text1.Text = legitg Text2.Text = cnpg Text3.Text = numeg Command2.Visible = False Text5.SetFocus End Sub Private Sub Command3_Click() Data1.Recordset.Close Data1.Database.Close DBDir = App.Path DBName = 'data.mdb' Set DB = OpenDatabase(DBDir & DBName) MsgBox Text2.Text 'DB.Execute 'CREATE TABLE MISCARI ' & '(legit INT,cnp CHAR(13), numeprod CHAR (20), tipprod char (1), pret int, datai date, dataimp date,datares date, tipop char (1) );' DB.Execute 'insert into miscari (legit,cnp,numeprod,tipprod,pret,datai,dataimp,datares,tipop) values ('' _ & Text1.Text & '', '' _ & Text2.Text & '', '' _ & Combo2.Text & '', '' _ & Combo1.Text & '', '' _ & Text4.Text & '', '' _ & Text6.Text & '', '' _

& Text6.Text & '', '' _ & Text6.Text & '', '0');' End Sub Private Sub Command4_Click() 'DB.Close Unload Me End Sub Private Sub Form_Load() Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Text1.Visible = False Text2.Visible = False Text3.Visible = False Command2.Visible = False Text6.Text = Mid(Now, 1, 10) End Sub Private Sub Text5_LostFocus() Text8.Text = Val(Text5.Text) * Val(Text4.Text) End Sub

Public i As Integer Private Sub Command1_Click() Data1.Recordset.Close Data1.Database.Close Unload Me End Sub Private Sub Command2_Click() Text1.Text = '' Text2.Text = '' Text3.Text = '' Text4.Text = '' Command5.Visible = True

Command6.Visible = True Command2.Visible = False Command3.Visible = False Command4.Visible = False Label6.Caption = 'ADAUGARE CLIENT' i=1 Text1.SetFocus End Sub Private Sub Command3_Click() Command5.Visible = True Command6.Visible = True Label6.Caption = 'MODIFICARE CLIENT' i=2 Text1.SetFocus End Sub Private Sub Command4_Click() Command5.Visible = True Command6.Visible = True Label6.Caption = 'STERGE CLIENT' i=3 Command5.Caption = 'OK' Command5.SetFocus End Sub

Private Sub Command5_Click() Select Case i Case 1 Data1.Recordset.AddNew Data1.Recordset.Fields(0) = Text1.Text Data1.Recordset.Fields(1) = Text2.Text Data1.Recordset.Fields(2) = Text3.Text Data1.Recordset.Fields(3) = Text4.Text Data1.Recordset.Update Data1.Refresh Case 2 'MsgBox 'edit' Data1.Recordset.MoveFirst Data1.Recordset.Move ItemIndex - 1 Data1.Recordset.Edit Data1.Recordset.Fields(0) = Text1.Text Data1.Recordset.Fields(1) = Text2.Text Data1.Recordset.Fields(2) = Text3.Text Data1.Recordset.Fields(3) = Text4.Text Data1.Recordset.Update Data1.Refresh Case 3 Data1.Recordset.MoveFirst

With Data1.Recordset .Move ItemIndex - 1 .Delete End With Data1.Refresh End Select Command5.Caption = 'Save' Command5.Visible = False Command6.Visible = False Command2.Visible = True Command3.Visible = True Command4.Visible = True Label6.Caption = 'Inregistrare clienti' Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields(0)) LI.SubItems(1) = Data1.Recordset.Fields(1) LI.SubItems(2) = Data1.Recordset.Fields(2) LI.SubItems(3) = Data1.Recordset.Fields(3) Data1.Recordset.MoveNext Loop Text1.Text = ''

Text2.Text = '' Text3.Text = '' Text4.Text = '' Command5.Visible = False Command6.Visible = False Command3.Visible = False Command4.Visible = False i=0 End Sub Private Sub Command6_Click() Command5.Caption = 'Save' Command5.Visible = False Command6.Visible = False Command2.Visible = True Command3.Visible = False Command4.Visible = False Label6.Caption = 'Inregistrare clienti' End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb'

Data1.DatabaseName = DBDir & DBName

Data1.RecordSource = 'select * from clienti' 'MsgBox Data1.Recordset.RecordCount Data1.Refresh If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If

Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields(0)) LI.SubItems(1) = Data1.Recordset.Fields(1) LI.SubItems(2) = Data1.Recordset.Fields(2) LI.SubItems(3) = Data1.Recordset.Fields(3) Data1.Recordset.MoveNext Loop Text1.Text = '' Text2.Text = '' Text3.Text = '' Text4.Text = '' Command5.Visible = False Command6.Visible = False Command3.Visible = False

Command4.Visible = False i=0 End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) ItemIndex = ListView1.SelectedItem.Index Text1.Text = ListView1.ListItems.Item(ItemIndex) Text2.Text = ListView1.ListItems(ItemIndex).SubItems(1) Text3.Text = ListView1.ListItems(ItemIndex).SubItems(2) Text4.Text = ListView1.ListItems(ItemIndex).SubItems(3) Command3.Visible = True Command4.Visible = True legitg = Text2.Text cnpg = Text3.Text numeg = Text1.Text End Sub Public Sub ColumnSort(ListViewControl As ListView, Column As ColumnHeader) With ListViewControl If .SortKey <> Column.Index - 1 Then .SortKey = Column.Index - 1 .SortOrder = lvwAscending Else

If .SortOrder = lvwAscending Then

.SortOrder = lvwDescending Else .SortOrder = lvwAscending End If End If .Sorted = -1 End With End Sub Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) Call ColumnSort(ListView1, ColumnHeader) End Sub

Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'select numeprod as Denumire_produs,pret,cant from produse order by tipprod' Data1.Refresh If Data1.Recordset.RecordCount > 0 Then MSFlexGrid1.Visible = True

End If

End Sub

Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'select a.legit ,a.cnp ,b.nume_pren ,b.datan from miscari a, clienti b where (a.legit = b.legit) and (a.tipop = '1') and (a.datares<date())' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then MSFlexGrid1.Visible = True End If

End Sub

Private Sub Command1_Click() Dim struser As String Dim strparola As String Dim strdrept As String DBDir = App.Path DBName = 'data.mdb'

Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'produse' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If

If Option1.Value = True Then

With Data1.Recordset .AddNew

!tipprod = Trim(Combo1.Text) !numeprod = Trim(Text2.Text) !prez = Trim(Text3.Text) !autedit = Text4.Text If Combo2.Text = 'Se inchiriaza' Then !evbib = 1 Else !evbib = 0 End If !inchiriat = 0 !pret = Text1.Text !cant = Text5.Text !imag = numeimg

.Update End With Dir1.Visible = False Frame1.Visible = True Label9.Visible = False File1.Visible = False Image1.Visible = False Call Option4_Click End If '================================================== If Option2.Value = True Then

With Data1.Recordset .Move ItemIndex - 1 .Edit !tipprod = Trim(Combo1.Text) !numeprod = Trim(Text2.Text) !prez = Trim(Text3.Text) !autedit = Text4.Text If Combo2.Text = 'Se inchiriaza' Then !evbib = 1 Else

!evbib = 0 End If !inchiriat = 0 !pret = Text1.Text !cant = Text5.Text !imag = numeimg .Update End With Dir1.Visible = False Frame1.Visible = True Label9.Visible = False File1.Visible = False Image1.Visible = False Call Option4_Click End If '============================================= If Option3.Value = True Then struser = Trim(Text1.Text) strparola = Trim(Text2.Text) strdrept = Trim(Combo1.Text) MsgBox 'Chiar doriti sa stergeti ?', vbYesNo If vbOK Then With Data1.Recordset

.Move ItemIndex - 1 .Delete End With End If End If '=========================================== Data1.Refresh Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant') LI.SubItems(8) = Data1.Recordset.Fields('imag') numeimg = Data1.Recordset.Fields('imag') Data1.Recordset.MoveNext Loop Command1.Visible = False

Command3.Visible = False Option4.Value = True

End Sub Private Sub Command2_Click() DB.Close Unload Me End Sub Private Sub Command3_Click() Command1.Visible = False Command3.Visible = False Option4.Value = True Dir1.Visible = False File1.Visible = False Image1.Visible = False Label9.Visible = False Frame1.Visible = True End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path File1.Pattern = '*.jpg' End Sub Private Sub File1_Click()

Command1.Visible = True Command3.Visible = True Dim X As Picture Set X = LoadPicture(File1.Path & '' & File1.FileName) Set Image1.Picture = X numeimg = File1.FileName End Sub Private Sub Form_Load() DBDir = App.Path DBName = 'data.mdb' Combo1.Clear Combo1.AddItem 'carte' Combo1.AddItem 'revista' Combo1.AddItem 'ziar' Combo1.Text = 'carte' Combo2.Clear Combo2.AddItem 'Se inchiriaza' Combo2.AddItem 'Se vinde' Combo2.Text = 'Se vinde'

Command1.Visible = False Command3.Visible = False Label9.Visible = False

Frame1.Visible = True Option4.Value = True File1.Pattern = '*.jpg' Dir1.Path = App.Path & 'imagini' Dir1.Visible = False File1.Visible = False Image1.Visible = True Data1.DatabaseName = DBDir & DBName Data1.RecordSource = 'produse' Data1.Refresh

If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) Dim X As Picture ItemIndex = ListView1.SelectedItem.Index Combo1.Text = ListView1.ListItems.Item(ItemIndex) Text2.Text = ListView1.ListItems(ItemIndex).SubItems(1) Text3.Text = ListView1.ListItems(ItemIndex).SubItems(2) Text4.Text = ListView1.ListItems(ItemIndex).SubItems(3) numeimg = RTrim(ListView1.ListItems(ItemIndex).SubItems(8))

'Path = 'D:ProiecteVBproiectVBimagini' Path = App.Path + 'imagini'

Set X = LoadPicture(Path & RTrim(ListView1.ListItems(ItemIndex).SubItems(8))) Set Image1.Picture = X Image1.Visible = True Combo2.Text = ListView1.ListItems(ItemIndex).SubItems(4) Text1.Text = ListView1.ListItems(ItemIndex).SubItems(5) Text5.Text = ListView1.ListItems(ItemIndex).SubItems(6)

End Sub Private Sub Option1_Click() If Option1.Value = True Then Dir1.Visible = True File1.Visible = True Image1.Visible = True Label9.Visible = True Frame1.Visible = False Text2.Text = '' Text3.Text = '' Text1.Text = '' Text5.Text = '' 'Command1.Visible = True

Command3.Visible = True DBDir = App.Path DBName = 'data.mdb' Data1.Refresh Data1.Recordset.MoveFirst ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant') LI.SubItems(8) = Data1.Recordset.Fields('imag') Data1.Recordset.MoveNext Loop Text1.Text = '' Text2.Text = '' End If End Sub Private Sub Option2_Click()

'Data1.Refresh Dir1.Visible = True File1.Visible = True Image1.Visible = True Label9.Visible = True Frame1.Visible = False Command1.Visible = True Command3.Visible = True Call ListView1_ItemClick(ListView1.SelectedItem) ListView1.SetFocus End Sub Private Sub Option3_Click() Data1.Refresh Command1.Visible = True Command3.Visible = True If Option3.Value = True Then Call ListView1_ItemClick(ListView1.SelectedItem) ListView1.SetFocus End If End Sub Private Sub Option4_Click() Set DB = OpenDatabase(DBDir & DBName) Data1.DatabaseName = DBDir & DBName

Data1.RecordSource = 'produse' Data1.Refresh If Data1.Recordset.RecordCount > 0 Then Data1.Recordset.MoveFirst End If 'Data1.Recordset.MoveFirst

ListView1.ListItems.Clear Do While Not Data1.Recordset.EOF Set LI = ListView1.ListItems.Add(, , Data1.Recordset.Fields('tipprod')) LI.SubItems(1) = Data1.Recordset.Fields('numeprod') LI.SubItems(2) = Data1.Recordset.Fields('prez') LI.SubItems(3) = Data1.Recordset.Fields('autedit') LI.SubItems(4) = Data1.Recordset.Fields('evbib') LI.SubItems(5) = Data1.Recordset.Fields('inchiriat') LI.SubItems(6) = Data1.Recordset.Fields('pret') LI.SubItems(7) = Data1.Recordset.Fields('cant') LI.SubItems(8) = Data1.Recordset.Fields('imag') Data1.Recordset.MoveNext Loop Call ListView1_ItemClick(ListView1.SelectedItem) End Sub 8) Aplicatie pentru o casa de schimb valutar.

Private Function calc_stoc(smb As String) As Double Dim valoare(100) As Integer, stoc_disp(100) As Double nr_bancnote = 0 fiss2 = FreeFile Open 'stocuri/stoc_' + smb + '.dat' For Input As fiss2 While Not EOF(fiss2) nr_bancnote = nr_bancnote + 1 Input #fiss2, valoare(nr_bancnote), stoc_disp(nr_bancnote) Wend Close fiss2 total = 0 For i = 1 To nr_bancnote total = total + valoare(i) * stoc_disp(i)

Next i calc_stoc = total End Function Private Sub incarca_valute() Dim q_simbol(100) As String, q_vanzare(100) As Double, q_cumparare(100) As Double

Combo1.Clear Combo1.AddItem '-' k=0 fiss = FreeFile Open 'valute.dat' For Input As fiss While Not EOF(fiss) k=k+1 Input #fiss, q_simbol(k), q_vanzare(k), q_cumparare(k) Wend Close fiss

max_val = 0 For w = 1 To k stc = calc_stoc(q_simbol(w)) If stc > 0 Then max_val = max_val + 1 simbol(max_val) = q_simbol(w)

vanzare(max_val) = q_vanzare(w) cumparare(max_val) = q_cumparare(w) stoc(max_val) = stc Combo1.AddItem UCase(simbol(max_val)) End If Next w Combo1.ListIndex = 0

End Sub Private Sub admin_stocuri_Click() main.Enabled = False pass_stocuri.Visible = True End Sub Private Sub admin_utilizatori_Click() main.Enabled = False pass_users.Visible = True End Sub Private Sub Combo1_Click() If Combo1.ListIndex = 0 Then lbl_cantitate.Caption = '-' lbl_cumparare.Caption = '-' lbl_vanzare.Caption = '-' Else

lbl_cantitate.Caption = Str(stoc(Combo1.ListIndex)) lbl_vanzare.Caption = Str(vanzare(Combo1.ListIndex)) lbl_cumparare.Caption = Str(cumparare(Combo1.ListIndex)) End If End Sub Private Sub Command1_Click() permis = True If Combo1.ListCount = 1 Then x = MsgBox('Nu exista nici un tip de valuta disponibila pt tranzactii!', vbInformation, 'Info') Exit Sub End If If Combo1.ListIndex = 0 Then x = MsgBox('Nu ati selectat nici un tip de valuta!', vbExclamation, 'Atentie') permis = False Else If Trim(Text3.Text) = '' Then x = MsgBox('Nu ati introdus nici o cantitate', vbExclamation, 'Atentie') permis = False End If End If If permis Then If Option1.Value = True Then

opp = 'cumparata' Else opp = 'vanduta' End If If (opp = 'vanduta') And (Val(Text3.Text) > Val(lbl_cantitate)) Then x = MsgBox('Cantitatea selectata pt vanzare este mai mare decat stocul!', vbExclamation, 'Atentie') Else List1.AddItem Trim(Text3.Text) + ' ' + Trim(Combo1.Text) + ' / ' + opp End If End If End Sub Private Sub Command2_Click() If List1.ListCount > 0 Then idx = List1.ListIndex If idx < 0 Then x = MsgBox('Nu ati selectat nici o tranzactie!', vbInformation, 'Info') Else x = MsgBox('Confirmati stergerea tranzactiei selectate?', vbYesNo, 'Confirmare') If x = 6 Then List1.RemoveItem idx End If End If

Else x = MsgBox('Cosul de tranzactii este gol!', vbInformation, 'Info') End If End Sub Private Sub Command3_Click() If List1.ListCount > 0 Then x = MsgBox('Confirmati golirea cosului?', vbYesNo, 'Confirmare') If x = 6 Then List1.Clear Else x = MsgBox('Cosul de tranzactii este gol!', vbInformation, 'Info') End If End Sub Private Sub Command4_Click() Unload Me End Sub Private Sub Command5_Click() If List1.ListCount = 0 Then x = MsgBox('Nu exista nici o tranzactie in cos!', vbInformation, 'Info') Else If Trim(Text1.Text) = '' Then x = MsgBox('Nu ati completat numele cumparatorului!', vbExclamation, 'Atentie') Else If Trim(Text2.Text) = '' Then

x = MsgBox('Nu ati completat CNP-ul cumparatorului!', vbExclamation, 'Atentie') Else List1.Clear Text1.Text = '' Text2.Text = '' Text3.Text = '' x = MsgBox('Tranzactii incheiate cu succes!', vbInformation, 'Info') End If End If End If End Sub Private Sub Form_Load() Call incarca_valute End Sub

Dim t_simbol(100) As String, t_vanzare(100) As Double, t_cumparare(100) As Double Dim valoare(100) As Integer, stoc_disp(100) As Double, vall(1000) As Integer, seria(1000) As String Dim permis As Boolean, nr_bancnote As Integer, total As Double, tot_hartii As Integer Private Sub refresh_tip_banc() Combo2.Clear total = 0 For i = 1 To nr_bancnote total = total + valoare(i) * stoc_disp(i) Combo2.AddItem valoare(i) Next i

Combo2.ListIndex = 0 End Sub Private Sub refresh_bancnote() List1.Clear For i = 1 To tot_hartii If (Trim(Combo2.Text) = vall(i)) Then List1.AddItem seria(i) End If Next i End Sub Private Function refresh_tot(smb As String) nr_bancnote = 0 fiss2 = FreeFile Open 'stocuri/stoc_' + smb + '.dat' For Input As fiss2 While Not EOF(fiss2) nr_bancnote = nr_bancnote + 1 Input #fiss2, valoare(nr_bancnote), stoc_disp(nr_bancnote) Wend Close fiss2

Call refresh_tip_banc

Label13.Caption = Combo1.Text

Label9.Caption = Combo1.Text Label10.Caption = Combo1.Text

Label14.Caption = Str(total)

tot_hartii = 0 fiss3 = FreeFile Open 'bancnote/banc_' + smb + '.dat' For Input As fiss3 While Not EOF(fiss3) tot_hartii = tot_hartii + 1 Input #fiss3, vall(tot_hartii), seria(tot_hartii) Wend Close fiss3

Call refresh_bancnote End Function Private Sub resetcolor(coll As String) Label1.ForeColor = coll Label2.ForeColor = coll Label3.ForeColor = coll Label5.ForeColor = coll Label6.ForeColor = coll End Sub

Private Sub verifica(q As Integer, coll2 As String) permis = True resetcolor (&H0&) Select Case q Case 1: exista = False For i = 0 To Combo2.ListCount - 1 If Combo2.List(i) = Trim(Text3.Text) Then exista = True Exit For End If Next i If (Trim(Text3.Text) = '') Or (exista = True) Then Label5.ForeColor = coll2 permis = False End If If Trim(Text4.Text) = '' Then Label6.ForeColor = coll2 permis = False End If Case 2: If Trim(Text2.Text) = '' Then Label4.ForeColor = coll2

permis = False End If If Trim(Text3.Text) = '' Then Label5.ForeColor = coll2 permis = False End If End Select End Sub Private Sub incarca()

Combo1.Clear

tot_val = 0 fiss = FreeFile Open 'valute.dat' For Input As fiss While Not EOF(fiss) tot_val = tot_val + 1 Input #fiss, t_simbol(tot_val), t_vanzare(tot_val), t_cumparare(tot_val) Combo1.AddItem UCase(t_simbol(tot_val)) Wend Close fiss

Combo1.ListIndex = 0

End Sub Private Sub Combo1_Click() If modif = True Then x = MsgBox('Au fost efectuate modificari ce nu au fost salvate! Continuati?', vbYesNo, 'Confirmare') If x = 6 Then modif = False Text1.Text = t_vanzare(Combo1.ListIndex + 1) Text2.Text = t_cumparare(Combo1.ListIndex + 1) Call refresh_tot(Combo1.Text) End If Else Text1.Text = t_vanzare(Combo1.ListIndex + 1) Text2.Text = t_cumparare(Combo1.ListIndex + 1) Call refresh_tot(Combo1.Text) End If End Sub Private Sub Combo2_Click() Label11.Caption = stoc_disp(Combo2.ListIndex + 1) Call refresh_bancnote End Sub Private Sub Command1_Click() Call verifica(1, &HFF&) If permis = False Then

x = MsgBox('Exista erori in completarea unor campuri obligatorii!', vbExclamation, 'Atentie') Else x = MsgBox('Confirmati adaugarea tipului de moneda?', vbYesNo, 'Confirmare') If x = 6 Then If valoare(1) > Val(Trim(Text3.Text)) Then nr_bancnote = nr_bancnote + 1 For j = nr_bancnote To 2 valoare(j) = valoare(j - 1) stoc_disp(j) = stoc_disp(j - 1) Next j valoare(1) = Val(Trim(Text3.Text)) stoc_disp(1) = Val(Trim(Text4.Text)) Else If valoare(nr_bancnote) < Val(Trim(Text3.Text)) Then nr_bancnote = nr_bancnote + 1 valoare(nr_bancnote) = Val(Trim(Text3.Text)) stoc_disp(nr_bancnote) = Val(Trim(Text4.Text)) Else For i = 1 To nr_bancnote - 1 If valoare(i) < Val(Trim(Text3.Text)) And (valoare(i + 1) > Val(Trim(Text3.Text))) Then nr_bancnote = nr_bancnote + 1 For j = nr_bancnote To i + 1

valoare(j) = valoare(j - 1) stoc_disp(j) = stoc_disp(j - 1) Next j valoare(i + 1) = Val(Trim(Text3.Text)) stoc_disp(i + 1) = Val(Trim(Text4.Text)) Exit For End If Next i End If End If Text3.Text = '' modif = True Call refresh_tip_banc x = MsgBox('Tipul de bancnota a fost adaugat cu succes!', vbInformation, 'Info') End If End If End Sub Private Sub Command2_Click() Text6.Text = '' For i = 1 To 10 Randomize Text6.Text = Trim(Text6.Text) + Trim(Str(Int(Rnd * 9))) Next i

Randomize x = Int(Rnd * Combo2.ListCount) Text5.Text = Combo2.List(x)

Command3.Enabled = True End Sub Private Sub Command3_Click() x = MsgBox('Confirmati adaugarea bancnotei in stoc?', vbYesNo, 'Confirmare') If x = 6 Then For i = 0 To Combo2.ListCount - 1 If Combo2.List(i) = Val(Trim(Text5.Text)) Then stoc_disp(i + 1) = stoc_disp(i + 1) + 1 End If Next i tot_hartii = tot_hartii + 1 vall(tot_hartii) = Val(Trim(Text5.Text)) seria(tot_hartii) = Trim(Text6.Text) Call refresh_bancnote modif = True x = MsgBox('Bancnota a fost adaugata cu succes!', vbInformation, 'Info') End If End Sub Private Sub Command4_Click()

main.Enabled = True Unload stocuri End Sub Private Sub Command5_Click() x = MsgBox('Confirmati salvarea modificarilor?', vbYesNo, 'Confirmare') If x = 6 Then t_vanzare(Combo1.ListIndex + 1) = Trim(Text1.Text) t_cumparare(Combo1.ListIndex + 1) = Trim(Text2.Text)

fiss = FreeFile Open 'valute.dat' For Output As fiss For i = 1 To Combo1.ListCount Write #fiss, t_simbol(i), t_vanzare(i), t_cumparare(i) Next i Close fiss

fiss = FreeFile Open 'stocuri/stoc_' + LCase(Trim(Combo1.Text)) + '.dat' For Output As fiss For i = 1 To Combo2.ListCount Write #fiss, valoare(i), stoc_disp(i) Next i Close fiss

fiss = FreeFile Open 'bancnote/banc_' + LCase(Trim(Combo1.Text)) + '.dat' For Output As fiss For i = 1 To tot_hartii Write #fiss, vall(i), seria(i) Next i Close fiss modif = False x = MsgBox('Modificarile au fost salvate!', vbInformation, 'Info')

End If End Sub Private Sub Command6_Click() If List1.ListCount > 0 Then idx = List1.ListIndex If idx < 0 Then x = MsgBox('Nu ati selectat nici o bancnota!', vbInformation, 'Info') Else x = MsgBox('Confirmati stergerea bancnotei selectate?', vbYesNo, 'Confirmare') If x = 6 Then For i = 1 To tot_hartii If seria(i) = Trim(List1.List(idx)) Then For j = 0 To Combo2.ListCount - 1

If Combo2.List(j) = vall(i) Then stoc_disp(j + 1) = stoc_disp(j + 1) - 1 End If Next j For j = i To tot_hartii - 1 seria(j) = seria(j + 1) vall(j) = vall(j + 1) Next j tot_hartii = tot_hartii - 1 End If Next i List1.RemoveItem idx End If End If Else x = MsgBox('Stocul de bancnote cu aceasta valoare este nul!', vbInformation, 'Info') End If End Sub Private Sub Form_Load() modif = False Call incarca Call refresh_tot(Combo1.Text) End Sub

Dim user(100), parola(100) As String Dim nr_usr As Integer, permis As Integer Private Sub resetcolor(coll As String) Label3.ForeColor = coll Label4.ForeColor = coll Label5.ForeColor = coll End Sub Private Sub verifica(q As Integer) coll2 = &HFF& permis = True resetcolor (&H0&) Select Case q Case 1: If Trim(Text1.Text) = '' Then Label3.ForeColor = coll2 permis = False End If

Case 2: If Trim(Text2.Text) = '' Then Label4.ForeColor = coll2 permis = False End If If Trim(Text3.Text) = '' Then Label5.ForeColor = coll2 permis = False End If End Select End Sub Private Sub scriere() fiss = FreeFile Open 'users.dat' For Output As fiss For i = 1 To nr_usr Write #fiss, user(i), parola(i) Next i Close fiss End Sub Private Sub refres() nr_usr = 0 fiss = FreeFile Open 'users.dat' For Input As fiss

While Not EOF(fiss) nr_usr = nr_usr + 1 Input #fiss, user(nr_usr), parola(nr_usr) Wend Close fiss Combo1.Clear For i = 1 To nr_usr Combo1.AddItem user(i) Next i Combo1.ListIndex = 0 Label2.Caption = parola(1) End Sub Private Sub Combo1_Click() idx = Combo1.ListIndex Label2.Caption = parola(idx + 1) End Sub Private Sub Command1_Click() Call verifica(1) If permis = False Then x = MsgBox('Exista erori in completarea campurilor obligatorii!', vbExclamation, 'Atentie') Else a = MsgBox('Sigur schimbati parola?', vbYesNo, 'Confirmnare') If a = 6 Then

ix = Combo1.ListIndex + 1 parola(ix) = Trim(Text1.Text) Call scriere x = MsgBox('Parola afost schimbata cu succes!', vbInformation, 'Info') End If Text1.Text = '' Call refres End If End Sub Private Sub Command2_Click() ussr = Trim(Text2.Text) psss = Trim(Text3.Text) Call verifica(2) If permis = False Then x = MsgBox('Exista erori in completarea campurilor obligatorii!', vbExclamation, 'Atentie') Else x = MsgBox('Confirmati adaugarea utilizatorului?', vbYesNo, 'Confirmare') If x = 6 Then fiss = FreeFile Open 'users.dat' For Append As fiss Write #fiss, ussr, psss Close fiss x = MsgBox('Utilizatorul a fost adaugat!', vbInformation, 'Info')

Text2.Text = '' Text3.Text = '' Call refres End If End If End Sub Private Sub Command3_Click() main.Enabled = True Unload users End Sub Private Sub Command4_Click() Maxx = Combo1.ListCount If Maxx > 1 Then a = MsgBox('Sigur stergeti utilizatorul?', vbYesNo, 'Confirmnare') If a = 6 Then ix = Combo1.ListIndex + 1 For i = ix To nr_usr - 1 user(i) = user(i + 1) parola(i) = parola(i + 1) Next i nr_usr = nr_usr - 1 Call scriere x = MsgBox('Utilizatorul a fost sters!', vbInformation, 'Info')

Call refres End If Else x = MsgBox('Trebuie sa existe cel putin un utilizator!', vbInformation, 'Info') End If End Sub Private Sub Form_Load() Call refres End Sub

Proiect Visual Basic 1.Programarea pe obiecte.Notiuni generale 1.1.1. Obiecte.Clase.Caracteristici Limbajele de programare,tehnicile si metodele de programare au evoluat in mod spectaculos de la aparitia calculatorului si pana astazi,ca urmare a necesitatii de a raspunde la cresterea continua a complexitatii problemelor de rezolvat si deci,implicit a programelor corescpunzatoare.Astfel,programarea a evoluat de la stadiul initial al introducerii notiunilor direct in cod binar si a continuat cu aparitia limbajelor de asamblare,care permiteau reprezentarea simbolica a instructiunilor pt calculator.Atunci cand limbajele de asamblare nau mai facut fata complexitatii crescande a programelor a fost necesara utilizarea unor limbaje de nivel mai inalt, cunoscute sub numele de limbaje de programare de gereratia 1 si 2, care sa faciliteze gestionarea acelui nivel de complexitate.Reprezentate de seama ale acestei perioade sunt limbajele FORTRAN,COBOL,ALGOL. Deceniul 6 al secolului 20 a adus cu sine aparitia programarii structurate, ceea ce a constituit unul dintre pasii semnificativi in evolutia ingineriei software, aceasca paradigma de programare dominand o buna bucata de timp lumea programarii.Programarea structurata este sustinuta de limbaje de generatia 3 cum sunt C,PASCAL,BASIC principala caracteristica a lor fiind utilizarea subprogramelor ca modalitate de gestionare a complexitatii.Programarea structurata s-a dovedit a fi o modalitate corespunzatoare de abstractizare a operatiilor si a algoritmilor,dovedindu-si eficienta in gestionarea programelor a caror complexitate putea fi controlata de catre un singur programator sau de catre un numar restrans de programatori.

Odata cu cresterea dimensiunii si complexitatii proiectelor software a devenit tot mai clar ca pentru a le putea controla este absolut necesara abstractizarea datelor si ca in acest scop programarea structurata nu mai este suficienta.In 1984 Shankar afirma ca:Natura abstractizarilor ce pot fi obtinute prin utilizarea procedurilor este adecvata descrierii operatiilor abstracte, darn u este adecvata descrierii obiectelor abstracte.Aceasta este o carenta majora de vreme ce in multe aplicatii complexitatea obiectelor de date care trebuiesc manipulate contribuie substantial la complexitatea globala a problemei. S-a impus gasirea unui nou model de programare capabil sa depaseasca limitarile programarii structurate si care sa fie capabila sa realizeze abstractizarea adecvata a datelor.Asa s-a nascut limbajele bazate pe obiecte si apoi cele orientate pe obiecte.Dintre acestea cele mai raspandite sunt Ada si CLOS si ma ide curand Java(bazate pe obiecte),respective Smalltalk,C++,Eiffel (orientate pe obiecte). 1.1.2.Conceptul de obiecte In evolutia tehnicilor de proiectare si realizare efectiva a programelor au aparut la un moment dat,concepte si constructii noi,modalitati noi de structurare a datelor, de tratare a colectiilor de date si chiar de programare. Constructia de baza in abordarea orientata obiect este obiectul care combina structura datelor si comportamentul intr-o singura entitate. Prin obiect intelegem o entitate din lumea reala asupra careia se poate intreprinde o actiune,sau care poate intreprinde o actiune. Obiectul este deci un concept,o abstractie sau un lucru,o entitate din lumea reala avand limite precise si un sens precis in contextul problemei studiate Un obiect este caracterizat prin 3 elemente: identitate; stare; comportament; Spunem despre un obiect ca are 2 componente: structura informationala; comportamentul sau operatiile care actioneaza asupra structurii. Analizand mai atenti obiectele,constatam ca acestea pot fi: obiecte concrete,care exista in mod fizica; obiecte conceptuale(o idee,o lege,etc). Comportamentul obiectelor poate fi declansat de stimul externi sau evenimente.

Fiecare obiect contine informatii individuale(date) care trebuie sa fie accesate sau modificate numai prin intermediul multimii de operatii care definesc comportamentul obiectului respectiv.Singura parte vizibila a unui obiect este constituita din operatiile(functiile) obiectului si este denumita interfata. Atat structura care memoreaza informatiile cat si implementarea operatiilor sunt ascunse in interiorul obiectului.Operatiile arata numai ce face obiectul nu si cum face. Orice obiect are atribute si operatii. Atributele descriu un obiect si sunt valori ale datelor,in timp ce operatiile(functiile) definesc comportamentul obiectelor.Anumite metode orientate propun,pentru acelasi scop,utilizarea a trei tipuri de obiecte,definite in contextual problemei si anume: obiecte entitate obiecte de interfata obiecte de control Modelul in abordarea pe obiecte bazata pe faptul ca fiecare obiect, ca subsistem individual cuprinde o procedura particulara, un comportament propriu si comunica cu alte obiecte. Arhitectura sistemelor cu obiecte se bazeaza pe clase,obiecte si interactiunea dintre ele. Un obiect dispune de proprietati,metode si evenimente. Proprietatile unui obiect descriu caracteristicile fizice ale acestuia.Obiectul este deci caracterizat prin proprietatile(atributele) sale:nume,dimensiune,.culoare,eticheta si alte proprietati care fac unic un obiect. Intr-un limbaj de programare, fiecare obiect poseda o cheie unica prin care el poate fi referit fara ambiguitate.Referintele asupra obiectelor sunt uniforme si independente de continutul lor, ceea ce permite crearea colectiilor de obiecte. Din punct de vedere al programatorilor,un obiect reprezinta o multime de date si o serie de operatii, numite metode,care manipuleaza datele.Utilizarea de obiecte in programe este o modalitate de a privi programele din perspective obiectelor care compun un sistem. Un obiect se caracterizeaza prin: identitate-cea care individualizeaza obiectul starea obiectului-este caracterizata de atributele care descriu obiectul Obiectele cu stari comportamentale asemanatoare formeaza deci o clasa de obiecte. 1.1.3.Conceptul de Clasa de obiecte

O clasa de obiecte este o abstractie care descrie toate caracteristicile comune ale unui grup de obiecte si care permite crearea de noi obiecte.Ea descrie o multime de obiecte cu atribute similare,operatii similare,aceeasi semantica si aceleasi relatii cu alte obiecte. Exemple de clase: bicicleta; fereastra; triunghi. O clasa poate fi rafinata in subclase din ce in ce mai fine.Fiecare subclasa mosteneste toate proprietatile superclasei sale si adauga propriile sale proprietati. Daca o clasa mosteneste o alta clasa atunci ea mosteneste toate atributele si operatiile clasei de baza,iar din punctual de vedere al codului, acestea sunt aceleasi cu cele ale clasei de baza,si nu copii ale lor. Incapsularea reprezinta conceptul care defineste apartenenta unor proprietati si metode fata de un obiect.Incapsularea protejeaza obiectele de manevre eronate din afara. 1.2.Modele utilizate in dezvoltarea de produse software 1.2.1Generalitati privind activitatea de programare Programarea este practice activitatea prin care se concepe si se realizeaza programul pentru rezolvarea unei probleme,cu ajutorul calculatorului electronic. Un program reprezinta o succesiune de instructiuni si comenzi apartinand unui/unor limbaje de programare(Pascal,Basic,C,Visual Basic,Java,etc) care conduc la solutionarea problemelor formulate. Daca ne referim la activitatea de programare,vom identifica in cadrul acesteia,urmatoarele etape: formularea problemei; elaborarea,identificarea si descrierea algoritmului de rezolvare a problemei date; scrierea programului; testarea programului; realizarea,completarea si definitivarea documentatiei programului; exploatarea curenta,utilizarea si intretinerea programului. Modele utilizate in dezvoltarea programelor:

Un model este o notiune abstracta si este construit pentru a intelege problema inainte de a implementa solutia. Cele mai utilizate modele in dezvoltarea programelor sunt: modelul orientat procedural care se bazeaza pe proceduri si algoritmi; modelul orientat pe obiecte,care consta intr-o colectie de obiecte ce apartin unor clase; modelul orientat pe reguli(de timpul If-Then); modelul orientat logic in care anumite scopuri se exprima prin calcule cu predicate; modelul orientat pe constrangeri(relatii de invarianta). Cea mai mare raspandire o are modelul procedural si cel mai mare interes il prezinta in ultimul timp modelul orientat pe obiecte. 1.2.2.Scurta prezentare a modelului procedural Modelul procedural reprezinta,prin intermediu algoritmilor de prelucrare,succesiunea de operatii elementare,in numar infinit,care trebuie parcurse pentru rezolvarea unei probleme. Modelul procedural are la baza abstractia procedurala si principiul substitutiei conform careia,la apelul unei proceduri,fiecare pozitie de parametru formal din corpul acesteia,poate fi ocupata de o valoare de parametru identical din punct de vedere al tipului,sau de un nou apel la o procedura,inclusive a procedurii in cauza(recursivitate),care reintoarce tipul corespunzator parametrului substituit. Programele complexe sunt structurate in subprograme si/sau proceduri.Programele cuprind deci proceduri ce se pot apela reciproc. Dintre limbajele de tim procedural amintim:Pascal,Cobol,Basic,C++,FoxPro. 1.2.3.Modularitatea Clasele si obiectele obtinute in urma abstractizarii si incapsularii trebuie grupate si apoi stocate intr-o forma fizica,denumita modul.Modulele pot fi privite ca si containere fizice in care declaram clasele si obiectele rezultate in urma proiectarii la nivel logic.Modulele formeaza asadar arhitectura fizica a programului.Modularizarea consta in divizarea programului intr-un numar de module care pot fi compilate separate,dar care sunt conectate intre ele.Limbajele care suporta conceptul de modul fac in acelasi timp distinctia intre interfata modulului si implementarea sa.Putem spune ca incasularea si modularizarea merg mana in mana.Concret,in C++ modulele nu sunt altceva decat fisiere ce pot fi co

Proiect Visual Basic

Marime: 529 kb

Pentru: facultate Nota: 6,40 Download: 102

Voturi: 5

Afisari: 884

Ti-a fost util acest referat? Te rugam sa-i dai o nota: 6,40 (5 voturi)

Proiect Visual Basic 1.Programarea pe obiecte.Notiuni generale 1.1.1. Obiecte.Clase.Caracteristici Limbajele de programare,tehnicile si metodele de programare au evoluat in mod spectaculos de la aparitia calculatorului si pana astazi,ca urmare a necesitatii de a raspunde la cresterea continua a complexitatii problemelor de rezolvat si deci,implicit a programelor corescpunzatoare.Astfel,programarea a evoluat de la stadiul initial al introducerii notiunilor direct in cod binar si a continuat cu aparitia limbajelor de asamblare,care permiteau reprezentarea simbolica a instructiunilor pt calculator.Atunci cand limbajele de asamblare nau mai facut fata complexitatii crescande a programelor a fost necesara utilizarea unor limbaje de nivel mai inalt, cunoscute sub numele de limbaje de programare de gereratia 1 si 2, care sa faciliteze gestionarea acelui nivel de complexitate.Reprezentate de seama ale acestei perioade sunt limbajele FORTRAN,COBOL,ALGOL. Deceniul 6 al secolului 20 a adus cu sine aparitia programarii structurate, ceea ce a constituit unul dintre pasii semnificativi in evolutia ingineriei software, aceasca paradigma de programare dominand o buna bucata de timp lumea programarii.Programarea structurata este sustinuta de limbaje de generatia 3 cum sunt C,PASCAL,BASIC principala caracteristica a lor fiind utilizarea subprogramelor ca modalitate de gestionare a complexitatii.Programarea structurata s-a dovedit a fi o modalitate corespunzatoare de abstractizare a operatiilor si a algoritmilor,dovedindu-si eficienta in gestionarea programelor a caror complexitate putea fi controlata de catre un singur programator sau de catre un numar restrans de programatori. Odata cu cresterea dimensiunii si complexitatii proiectelor software a devenit tot mai clar ca pentru a le putea controla este absolut necesara abstractizarea datelor si ca in acest scop programarea structurata nu mai este suficienta.In 1984 Shankar afirma ca:Natura abstractizarilor ce pot fi obtinute prin utilizarea procedurilor este adecvata descrierii operatiilor abstracte, darn u este adecvata descrierii obiectelor abstracte.Aceasta este o carenta majora de vreme ce in multe aplicatii complexitatea obiectelor de date care trebuiesc manipulate contribuie substantial la complexitatea globala a problemei. S-a impus gasirea unui nou model de programare capabil sa depaseasca limitarile programarii structurate si care sa fie capabila sa realizeze abstractizarea adecvata a datelor.Asa s-a nascut limbajele bazate pe obiecte si apoi cele orientate pe obiecte.Dintre acestea cele mai raspandite sunt Ada si CLOS si ma ide curand Java(bazate pe obiecte),respective Smalltalk,C++,Eiffel (orientate pe obiecte). 1.1.2.Conceptul de obiecte In evolutia tehnicilor de proiectare si realizare efectiva a programelor au aparut la un moment dat,concepte si constructii noi,modalitati noi de structurare a datelor, de tratare a colectiilor de date si chiar de programare. Constructia de baza in abordarea orientata obiect este obiectul care combina structura datelor

si comportamentul intr-o singura entitate. Prin obiect intelegem o entitate din lumea reala asupra careia se poate intreprinde o actiune,sau care poate intreprinde o actiune. Obiectul este deci un concept,o abstractie sau un lucru,o entitate din lumea reala avand limite precise si un sens precis in contextul problemei studiate Un obiect este caracterizat prin 3 elemente: identitate; stare; comportament; Spunem despre un obiect ca are 2 componente: structura informationala; comportamentul sau operatiile care actioneaza asupra structurii. Analizand mai atenti obiectele,constatam ca acestea pot fi: obiecte concrete,care exista in mod fizica; obiecte conceptuale(o idee,o lege,etc). Comportamentul obiectelor poate fi declansat de stimul externi sau evenimente. Fiecare obiect contine informatii individuale(date) care trebuie sa fie accesate sau modificate numai prin intermediul multimii de operatii care definesc comportamentul obiectului respectiv.Singura parte vizibila a unui obiect este constituita din operatiile(functiile) obiectului si este denumita interfata. Atat structura care memoreaza informatiile cat si implementarea operatiilor sunt ascunse in interiorul obiectului.Operatiile arata numai ce face obiectul nu si cum face. Orice obiect are atribute si operatii. Atributele descriu un obiect si sunt valori ale datelor,in timp ce operatiile(functiile) definesc comportamentul obiectelor.Anumite metode orientate propun,pentru acelasi scop,utilizarea a trei tipuri de obiecte,definite in contextual problemei si anume: obiecte entitate obiecte de interfata obiecte de control Modelul in abordarea pe obiecte bazata pe faptul ca fiecare obiect, ca subsistem individual cuprinde o procedura particulara, un comportament propriu si comunica cu alte obiecte. Arhitectura sistemelor cu obiecte se bazeaza pe clase,obiecte si interactiunea dintre ele. Un obiect dispune de proprietati,metode si evenimente. Proprietatile unui obiect descriu caracteristicile fizice ale acestuia.Obiectul este deci caracterizat prin proprietatile(atributele) sale:nume,dimensiune,.culoare,eticheta si alte proprietati care fac unic un obiect. Intr-un limbaj de programare, fiecare obiect poseda o cheie unica prin care el poate fi referit fara ambiguitate.Referintele asupra obiectelor sunt uniforme si independente de continutul lor, ceea ce permite crearea colectiilor de obiecte. Din punct de vedere al programatorilor,un obiect reprezinta o multime de date si o serie de operatii, numite metode,care manipuleaza datele.Utilizarea de obiecte in programe este o modalitate de a privi programele din perspective obiectelor care compun un sistem. Un obiect se caracterizeaza prin: identitate-cea care individualizeaza obiectul starea obiectului-este caracterizata de atributele care descriu obiectul Obiectele cu stari comportamentale asemanatoare formeaza deci o clasa de obiecte. 1.1.3.Conceptul de Clasa de obiecte O clasa de obiecte este o abstractie care descrie toate caracteristicile comune ale unui grup de obiecte si care permite crearea de noi obiecte.Ea descrie o multime de obiecte cu atribute similare,operatii similare,aceeasi semantica si aceleasi relatii cu alte obiecte.

Exemple de clase: bicicleta; fereastra; triunghi. O clasa poate fi rafinata in subclase din ce in ce mai fine.Fiecare subclasa mosteneste toate proprietatile superclasei sale si adauga propriile sale proprietati. Daca o clasa mosteneste o alta clasa atunci ea mosteneste toate atributele si operatiile clasei de baza,iar din punctual de vedere al codului, acestea sunt aceleasi cu cele ale clasei de baza,si nu copii ale lor. Incapsularea reprezinta conceptul care defineste apartenenta unor proprietati si metode fata de un obiect.Incapsularea protejeaza obiectele de manevre eronate din afara. 1.2.Modele utilizate in dezvoltarea de produse software 1.2.1Generalitati privind activitatea de programare Programarea este practice activitatea prin care se concepe si se realizeaza programul pentru rezolvarea unei probleme,cu ajutorul calculatorului electronic. Un program reprezinta o succesiune de instructiuni si comenzi apartinand unui/unor limbaje de programare(Pascal,Basic,C,Visual Basic,Java,etc) care conduc la solutionarea problemelor formulate. Daca ne referim la activitatea de programare,vom identifica in cadrul acesteia,urmatoarele etape: formularea problemei; elaborarea,identificarea si descrierea algoritmului de rezolvare a problemei date; scrierea programului; testarea programului; realizarea,completarea si definitivarea documentatiei programului; exploatarea curenta,utilizarea si intretinerea programului. Modele utilizate in dezvoltarea programelor: Un model este o notiune abstracta si este construit pentru a intelege problema inainte de a implementa solutia. Cele mai utilizate modele in dezvoltarea programelor sunt: modelul orientat procedural care se bazeaza pe proceduri si algoritmi; modelul orientat pe obiecte,care consta intr-o colectie de obiecte ce apartin unor clase; modelul orientat pe reguli(de timpul If-Then); modelul orientat logic in care anumite scopuri se exprima prin calcule cu predicate; modelul orientat pe constrangeri(relatii de invarianta). Cea mai mare raspandire o are modelul procedural si cel mai mare interes il prezinta in ultimul timp modelul orientat pe obiecte. 1.2.2.Scurta prezentare a modelului procedural Modelul procedural reprezinta,prin intermediu algoritmilor de prelucrare,succesiunea de operatii elementare,in numar infinit,care trebuie parcurse pentru rezolvarea unei probleme. Modelul procedural are la baza abstractia procedurala si principiul substitutiei conform careia,la apelul unei proceduri,fiecare pozitie de parametru formal din corpul acesteia,poate fi ocupata de o valoare de parametru identical din punct de vedere al tipului,sau de un nou apel la o procedura,inclusive a procedurii in cauza(recursivitate),care reintoarce tipul corespunzator parametrului substituit. Programele complexe sunt structurate in subprograme si/sau proceduri.Programele cuprind deci proceduri ce se pot apela reciproc. Dintre limbajele de tim procedural amintim:Pascal,Cobol,Basic,C++,FoxPro. 1.2.3.Modularitatea Clasele si obiectele obtinute in urma abstractizarii si incapsularii trebuie grupate si apoi

stocate intr-o forma fizica,denumita modul.Modulele pot fi privite ca si containere fizice in care declaram clasele si obiectele rezultate in urma proiectarii la nivel logic.Modulele formeaza asadar arhitectura fizica a programului.Modularizarea consta in divizarea programului intr-un numar de module care pot fi compilate separate,dar care sunt conectate intre ele.Limbajele care suporta conceptul de modul fac in acelasi timp distinctia intre interfata modulului si implementarea sa.Putem spune ca incasularea si modularizarea merg mana in mana.Concret,in C++ modulele nu sunt altceva decat fisiere ce pot fi compilate separat. Reguli generale de modularizare 1.Structura fiecarui modul trebuie as fie sufficient de simpla pentru a putea fi complet inteleasa. 2.Implementarea unui modul trebuie sa depinda doar de interfetele altor module.Cu alte cuvinte trebuie sa fie posibila modificarea implementarii unui modul fara a avea cunostinte despre implementarea altor module si fara a afecta comportarea celorlante module. 3.Detaliile sistemului ce se presupune ca se vor modifica independent vor fi plasate in module diferite. 4.Singurele legaturi intre module vor fi acelea a caror modificare este improbabila. 5.Orice structura de date este incapsulata intr-un modul;ea poate fi accesata direct din interiorul modulului darn u poate fi accesata din afara modulului decat prin intermediul obiectelor si claselor continute in acel modul. 1.2.4.Programarea orientata pe obiecte.Concepte de baza. Programarea orientata pe obiecte este o metoda de implementare in care programele sunt organizate ca si colectii de obiecte ce coopereaza intre ele,fiecare obiect reprezentand instanta unei clase;fiecare clasa apartine unei ierarhii de clase,clasele fiind unite prin relatii de mostenire. Limbaj de programare bazat pe obiecte.Programare cu tipuri de date abstracte. Un limbaj de programare care ofera support pentru utilizarea claselor si a obiectelor,dar care nu are implementat mecanismul relatiilor de mostenire intre clase este un limbaj de programare bazat pe obiecte.Programarea bazata pe clase si pe obiecte,care nu face uz de relatia de mostenire se mai numeste programare cu tipuri de date abstracte. APLICATIE PENTRU EVIDENTA CHELTUIELILOR LUNARE ALE ASOCIATIILOR DE PROPRIETARI - Proiect de diploma Vizite: ? Nota: ? d1k23kd

APLICATIE PENTRU EVIDENTA CHELTUIELILOR LUNARE ALE ASOCIATIILOR DE PROPRIETARI

1. CONTINUTUL PROIECTULUI: a. Piese scrise: Specificatii de Definitie, Introducere, Memoriu Tehnic, Memoriu Justificativ, Caiet de Sarcini, Manual de Operare, Bibliografie. b. Piese desenate: diagrame c. Anexe: Listing program. 2. LOCUL DOCUMENTATIEI: 3. CONSULTANTI: 4. DATA EMITERII TEMEI:

5. TERMEN DE PREDARE: Cuprins 1. INTRODUCERE 1 1.1 Aplicabilitate 1 1.2 Specificatii de definitie 2 1.3 Reguli de calcul 4 2. MEMORIU TEHNIC 8 2.1 Aplicatii cu baze de date 8 2.2 Metodica de proiectare a aplicatiei 10 2.3 Etapa analiza. Entitati si Atribute 13 2.4 Etapa analiza. Evenimente si Functii 17 2.5 Etapa proiectare. Diagrama Entitate-Relatie 18 2.6 Etapa proiectare. Diagrama Functionala 22 2.7 Etapa proiectare. Arhitectura aplicatiei 25 2.8 Etapa implementare 27 3. MEMORIU JUSTIFICATIV 29 3.1 Proiectarea si implementarea bazei de date 29 3.2 Proiectarea interfetei utilizator 32 Meniul aplicatiei 32 Formulare 35 3.3 Implementare 40 Functii publice 41 Functia de calcul a cheltuielilor 42 Raportul cheltuielilor 44 3.4 Documentare 45 3.5 Testare 46 3.6 Pachet de instalare 46 4. CAIET DE SARCINI 47 5. MANUAL DE OPERARE 48 Instructiuni pentru instalarea aplicatiei 48 Instructiuni de utilizare 50 6. CONCLUZII 51 Aprecieri 51 Posibilitati de dezvoltare ulterioara 52 BIBLIOGRAFIE 53 ANEXE 54 Anexa 1. Listing Program 54 1. INTRODUCERE In partea introductiva a lucrarii vom prezenta scopul aplicatiei, posibilitatile de utilizare practica, precum si notiunile de baza utilizate de catre administratorii de imobile, notiuni utilizate la implementarea aplicatiei sub forma elementelor de proiectare. De asemenea, din partea introductiva va rezulta si necesitatea dezvoltarii unei astfel de aplicatii si implicatiile pe care le are utilizarea acesteia in cadrul activitatii de calcul si evidenta a cheltuielilor asociatiilor de proprietari . 1.1 Aplicabilitate Aplicatia este destinata asociatiilor de proprietari respectiv administratorilor de imobile, prin caracterul sau general acesta putandu-se aplica in orice asociatie de proprietari sau imobil din Romania, respectand prevederile legale de calcul si evidenta aflate in vigoare. Se urmareste automatizarea procesului de calcul si evidenta a cheltuielilor pe care le au de achitat lunar locatarii / proprietarii unui imobil. Calculele pe care administratorul blocului le

face manual sunt greoaie si predispuse erorilor, in orice moment exista posibilitatea ca acesta sa introduca erori de calcul sau de evidenta, deci o aplicatie care sa-i usureze si sa ii sistematizeze activitatea este un ajutor binevenit. In principiu, aplicatia trebuie sa permita introducerea informatiilor necesare calculului cumulativ, sa execute acest calcul pe baza informatiilor introduse sau deja existente intr-o forma de evidenta si sa genereze o lista pe care administratorul o va afisa pe panou. De asemenea aplicatia trebuie sa permita introducerea si memorarea platilor pe care le efectueaza locatarii / proprietarii lunar. Pentru faza de documentare si testare, s-au folosit informatii puse la dispozitie de catre administratorul imobilului aflat pe strada Prof. Ciortea nr.7. 1.2 Specificatii de definitie In urma discutiilor purtate cu administratorul de imobil precum si in urma studierii unor prevederi legale(legi, ordonante) referitoare la asociatiile de proprietari si la administrarea imobilelor, au rezultat o serie de notiuni specifice acestui domeniu, care vor fi utilizate la faza de implementare sub forma unor elemente de proiectare. Prezentam in continuare aceste notiuni si semnificatia lor. Notiunea de asociatie de proprietari reprezinta asocierea tuturor proprietarilor sau locatarilor care locuiesc respectiv detin unul sau mai multe apartamente intr-un imobil de locuinte intr-o forma cu personalitate juridica, numita Asociatie de Proprietari in vederea gestionarii in comun a resurselor legate de serviciile furnizate de catre regiile autonome si a altor probleme legate de gestionarea in comun a unor resurse, fonduri, spatii. Astfel, cererea pentru dobandirea personalitatii juridice a asociatiei, statutul, acordul de asociere si procesul-verbal al adunarii constitutive se inregistreaza la organul financiar pe a carui raza se afla cladirea. Asociatia dobandeste personalitate juridica in baza incheierii actului de catre judecatorul delegat la organul financiar local de presedintele judecatoriei in a carei circumscriptie teritoriala se afla imobilul.a1i Forma de organizare a asociatiei de proprietari nu face subiectul acestei lucrari, deci vom insista doar pe partea de calcul si evidenta a cheltuielilor lunare. In cazul de fata, la proiectarea aplicatiei ne vom referi in special la notiunea de imobil care reprezinta totalitatea apartamentelor aflate intr-o cladire cu locuinte. Acesta este caracterizat prin denumire, adresa, localitatea si judetul unde se este situat imobilul. Prin notiunea de apartament se intelege locuinta separata, indivizibila aflata intr-un imobil. Un imobil contine unul sau mai multe apartamente si un apartament apartine unui singur imobil. In cadrul imobilului, apartamentul este identificat prin numar de apartament. De asemenea apartamentul este caracterizat prin proprietar, numar de camere, suprafata totala si numarul de persoane care locuiesc in apartament. Aceste caracteristici pot fi variabile in sensul modificarii lor de la o luna la alta. Notiunea de furnizor reprezinta o societate comerciala, o regie autonoma, o persoana fizica sau o persoana juridica care furnizeaza servicii asociatiei de proprietari. Furnizorul este caracterizat prin denumire, cod fiscal si adresa. Contravaloarea acestor servicii fac obiectul unei facturi emise de furnizor catre asociatia de proprietari. Astfel introducem notiunea de factura ca si documentul care contine cuantumul de consum al serviciului oferit si contravaloarea acestuia, exprimat in lei. Factura este caracterizata prin numar de document, furnizorul, tipul de serviciu furnizat, consumul, luna pentru care se face facturarea si suma care reprezinta contravaloarea serviciului. Factura se emite de catre furnizor pentru luna precedenta. Prin notiunea de luna intelegem intervalul de timp echivalent cu o luna calendaristica pentru care furnizorul a efectuat facturarea si in consecinta proprietarul apartamentului trebuie sa achite cota parte din aceasta factura care ii revine conform normelor de calcul in vigoare.a2i Luna se caracterizeaza prin indexul sau denumirea acesteia(ianuarie - decembrie) si prin anul din care aceasta face parte.

Aplicatia va utiliza astfel notiunea de luna ca si termen de referinta pentru efectuarea calculelor. Pentru o luna se pot emite una sau mai multe facturi. Pentru ca un furnizor poate sa emita facturi pentru unul sau mai multe tipuri de consum, vom trata separat notiunea de tip de consum, care reprezinta tipul de consum pentru factura emisa de catre furnizor. Tipul de consum este caracterizat de furnizor, unitate de masura si tip de calcul. Unui tip de consum ii pot reveni astfel una sau mai multe facturi. Notiunea tip de calcul reprezinta modalitatea in care se face calcul cuantumului aferent fiecarui apartament din imobil pentru un anumit tip de consum. Astfel, acesta poate sa fie la nivel de apartament, la nivel de numar de persoane care locuiesc in apartament in luna respectiva sau la nivel de suprafata a apartamentului.a2i Un tip de calcul este determinant pentru unul sau mai multe tipuri de consum. Prin notiunea de incasare se intelege actiunea prin care administratorul imobilului primeste de la proprietarul apartamentului o suma de bani aferenta cuantumului rezultat in urma cheltuielilor lunare. De obicei proprietarul achita suma exacta rezultata dar poate sa achite si o parte din aceasta suma, sau chiar sa nu achite deloc suma datorata, astfel suma devenind restanta. In urma achitarii unei sume, administratorul emite o chitanta, care este dovada ca proprietarul a achitat suma respectiva. Incasarea este caracterizata de numar chitanta, data la care a fost efectuata plata si suma incasata. Astfel, pentru un apartament se pot efectua una sau mai multe incasari. 1.3 Reguli de calcul Cuantumul cheltuielilor aferente fiecarui apartament din imobil se calculeaza pe baza facturilor lunare pe care administratorul imobilului le primeste de la furnizorii de servicii(societatile comerciale care asigura livrarea apei reci si calde menajere, furnizarea agentului termic, curentului electric, gazului metan, serviciile de salubrizare, etc.) precum si din informatiile specifice fiecarui apartament(numar de persoane, suprafata, numar de camere, etc.) Calcul se face pe baza prevederilor legale in vigoare. Prezentam in continuare formulele de calcul defalcate pentru cele 3 tipuri de calcul: a. Calcul la nivel de suprafata Acest tip de calcul se face in special in cazul energiei termice. Cheltuielile pentru incalzirea locuintelor/apartamentelor, indiferent de modul de inregistrare a consumului de energie termica si de sursa de agent termic, se repartizeaza proportional cu suprafata utila inscrisa in actul de proprietate, iar pentru incalzirea spatiilor aflate in folosinta comuna intr-o cladire (casa scarii, culoare, spalatorii, uscatorii, holuri si altele asemenea) se repartizeaza proportional cu cota-parte indiviza care ii revine fiecarui proprietar din proprietatea comuna, astfel cum aceasta este inscrisa in actul de proprietate.a7i Consumul se calculeaza cu urmatoarea formula: unde cas -; consumul la nivel de suprafata, pe apartament sa -; suprafata apartament cis -; consumul la nivel de suprafata, total pe imobil cics-; consumul la nivel de suprafata, contorizat total pe imobil si -; suprafata totala a tuturor apartamentelor din imobil sic -; suprafata totala a tuturor apartamentelor contorizate din imobil Apartamentele contorizate sunt cele care au contoare separate pentru tipul de consum in discutie si care platesc separat, in functie de consumul inregistrat de aceste contoare. In cazul energiei termice se va obtine consumul aferent unui apartament necontorizat, exprimat in m3. Cu urmatoarea formula se obtine valoarea aferenta acestui consum, exprimata in Lei, adica suma pe care o are de platit un apartament necontorizat pentru serviciul respectiv. unde vas -; valoarea consumului la nivel de suprafata, pe apartament cas -; consumul la nivel de suprafata, pe apartament vis -; valoarea totala a serviciului facturat, la nivel de suprafata cis -; consumul la nivel de suprafata, total pe imobil

b. Calcul la nivel de numar de persoane Acest tip de calcul se face in cazul consumului de apa curenta menajera(apa rece, apa calda, canalizare), consumului de gaze naturale, etc. Consumul se calculeaza cu urmatoarea formula: unde cap -; consumul la nivel de numar persoane, pe apartament pa -; numarul de persoane care locuiesc in apartament cip -; consumul la nivel de numar persoane, total pe imobil cicp -; consumul la nivel de numar persoane, contorizat total pe imobil pi -; numarul total de persoane care locuiesc in imobil pic -; numarul total de persoane care locuiesc in imobil dar la care apartamentele in care locuiesc exista contoare pentru serviciul respectiv De exemplu, in cazul consumului de gaze naturale se va obtine consumul aferent unui apartament necontorizat, exprimat in m3. Pentru obtinerea valorii aferente acestui consum, exprimata in Lei, adica suma pe care o are de platit un apartament necontorizat pentru serviciul respectiv, se foloseste formula: unde vap -; valoarea consumului la nivel de numar persoane, pe apartament cip -; consumul la nivel de numar persoane, total pe imobil cap -; consumul la nivel de numar persoane, pe apartament vip -; valoarea totala a serviciului facturat, la nivel de numar persoane c. Calcul la nivel de apartament Acest tip de calcul se face in cazul retributiilor sub forma de salarizare ale administratorului, persoanei care face curatenie in imobil, etc. Consumul se calculeaza cu urmatoarea formula: unde caa -; consumul la nivel de apartament, pe apartament cia -; consumul la nivel de apartament, total pe imobil cica -; consumul la nivel de apartament, contorizat total pe imobil ai -; numarul total de apartamente din imobil aic -; numarul total de apartamente din imobil in care locuiesc exista contoare pentru serviciul respectiv De exemplu, in cazul salariului administratorului, avand in vedere ca nu exista apartamente cu regim de contorizare, cic si aic vor fi zero, deci fiecare apartament va plati aceeasi suma, egala cu salariul administratorului impartit la numarul de apartamente din imobil. Pentru obtinerea valorii aferente acestui consum, exprimata in Lei, adica suma pe care o are de platit un apartament necontorizat pentru serviciul respectiv, se foloseste formula: unde vaa -; valoarea consumului la nivel de apartament, pe apartament caa -; consumul la nivel de apartament, pe apartament via -; valoarea totala a serviciului facturat, la nivel de apartament cia -; consumul la nivel de apartament, total pe imobil Dupa calcularea valorilor pentru fiecare tip de consum in parte, obtinem totalul de plata pentru fiecare apartament, dupa formula: unde vt -; valoarea totala de plata pentru apartament, pentru luna curenta vas -; valoarea consumului la nivel de suprafata, pe apartament vap -; valoarea consumului la nivel de numar persoane, pe apartament vaa -; valoarea consumului la nivel de apartament, pe apartament ns ; numarul de servicii dependente de suprafata np -; numarul de servicii dependente de numarul de persoane na -; numarul de servicii dependente de apartament Aceste formule de calcul se aplica pentru fiecare apartament din imobil iar valorile obtinute vt, constituie lista de cheltuieli lunare, scopul principal al dezvoltarii acestei aplicatii. Eventual, ca si optiune, se pot afisa si unele dintre consumurile vs, vp sau va, de obicei cele mai importante din punct de vedere valoric, cum ar fi energia termica sau apa curenta menajera. 2. MEMORIU TEHNIC 2.1 Aplicatii cu baze de date O aplicatie este in principiu o colectie software consolidata cu scopul de a rezolva un set dat de probleme. Rezolvarea problemelor prin punerea in practica a software-ului se numeste software engineering. Tot asa cum in alte proiecte ingineresti cum ar fi constructia unei cladiri sau a unui aparat de zbor este depus un efort considerabil inaintea punerii primei caramizi in

constructia cladirii sau inainte de conceperea primei piese a aparatului de zbor. In timpul fazei initiale (numita faza de proiectare) o serie de elemente vor intra in contact unele cu altele pentru a da forma proiectului de aplicatie. Unele din elemente sunt ne-negociabile sau resurse limitate cum ar fi timpul, banii, sau mana de lucru. Altele, cum ar fi tehnologiile disponibile, cunostintele, sau indemanarea sunt resurse dinamice si variaza pe parcursul ciclului de viata al sistemului "business".a9i Notiunea de baza de date este strans legata de notiunea de date, care refera fapte culese din lumea reala a11i. Baza de date se refera la un volum mare de date, care sunt stocate pe suport fizic; ea reprezinta, in cazul sistemului computerizat, echivalentul arhivei din viata reala. Mai poate fi inteleasa ca o colectie de fisiere de date intr-un sistem de calcul a12i. Pentru o baza de date cel mai important lucru este manipularea datelor continute in acea baza de date. Aceasta manipulare refera operatiile care se pot efectua asupra datelor: operatii de adaugare a unor date noi, operatii de regasire, de modificare, de stergere a datelor existente a12i. Programarea bazelor de date constituie, de fapt, procesul de stocare -; folosind o modalitate standard -; a unei varietati de informatii, astfel incat sa fie posibila o accesare si o intretinere facila a datelor. Informatiile stocate intr-o baza de date, spre deosebire de un document creat cu un procesor de texte, respecta de obicei un format standard.a10i Pentru aplicatia ceruta, utilizarea unei aplicatii cu baze de date in detrimentul altor metode de rezolvare a problemei date, cum ar fi calculul tabelar sau o aplicatie standard, fara baze de date, rezolva o serie de probleme si neajunsuri. Din acest punct de vedere, unele avantaje ale proiectarii aplicatiei cu baze de date au constituit un factor important de decizie atunci cand am ales modalitatea de rezolvare a problemei date, cum ar fi: - posibilitatea stocarii unui volum relativ mare de informatii, precum si accesul ulterior la aceste informatii; - remanenta informatiei, care in cazul unei aplicatii standard, fara baze de date, era incerta. Astfel, utilizatorul aplicatiei va avea posibilitatea sa verifice la un moment dat situatia locatarilor sau a cheltuielilor pentru luna precedenta sau chiar pentru anul trecut, existand posibilitatea intocmirii unor statistici evolutive a situatiei locatarilor, a cheltuielilor, etc.; - simplificarea procesului de calcul, care in cazul calculului tabelar ar fi avut o complexitate ridicata, fara a avea un control real asupra fluxului de informatie gestionat; - transparenta totala a implementarii, utilizatorul aplicatiei nu trebuie sa cunoasca modalitatile efective de implementare, modul de stocare a datelor, verificarile de corectitudine a informatiilor introduse. Utilizatorul nu trebuie sa cunoasca ce se intampla cu o informatie introdusa in sistem, dar in acelasi timp acesta trebuie sa aiba acces la informatia respectiva; - fiind vorba de sume de bani, securitatea metodelor de calcul trebuie sa fie ridicata, trebuie sa fie eliminata pe cat posibil posibilitatea introducerii de erori in rezultatul final, iar o aplicatie care utilizeaza baze de date reuseste sa atinga acest obiectiv. In acest sens sunt necesare o serie de verificari la introducerea de informatii in sistem, care sa evite aceste erori(cum ar fi de exemplu verificarea ca la introducerea unui consum sau a unei sume, sa nu poata fi introduse valori negative). Concluzionand, baza de date va trebui sa contina toate informatiile necesare calculului si a evidentei cheltuielilor lunare ale imobilelor. Aceste informatii vor fi introduse de catre utilizatorul sistemului, adica de catre administratorul imobilului, prin intermediul interfetei puse la dispozitie de aplicatie. Avand in vedere ca in general administratorii de imobil nu sunt persoane cu pregatire informatica sau cunostinte de operare, cei mai multi dintre acestia nefiind familiarizati cu tehnica de calcul, aplicatia trebuie sa fie cat mai intuitiva, cat mai usor de utilizat si sa nu contina elemente care ar putea sa genereze situatii de ambiguitate. Este de asemenea important ca interfata aplicatiei sa fie realizata in intregime cu termeni in limba romana, iar

termenii utilizati pentru denumirea elementelor constitutive ale interfetei sa reprezinte cat mai bine termenii corespondenti din limbajul specific al acestui domeniu, mai exact termeni gasiti si in legislatia referitoare la asociatiilor de proprietari. Automatizarea procesului de calcul prin intermediul aplicatiei trebuie sa fie de asemenea transparent, fazele in care se obtin valori intermediare nu au importanta practica pentru administrator. 2.2 Metodica de proiectare a aplicatiei Dezvoltarea unui sistem este o activitate laborioasa ce cuprinde o multitudine de subactivitati("tasks") desfasurate intr-o maniera metodica. Aceste sub-activitati pot fi grupate in etape importante. Fiecare etapa are definite clar elementele livrate (adica ce produse finale sunt obtinute la incheierea etapei) etapelor ulterioare. In cadrul fiecarei etape (stadiu) sub-activitatile tind sa fie de scurta durata si pot fi estimate cu usurinta. Fiecare sub-activitate este divizata in mai multe sub-sub-activitati. O anumita subsub-activitate se poate repeta de un numar de ori din diferite motive. Vom discuta despre dezvoltarea pe baza modelului CASE(Computer-Aided Szstems Engineering). Prezentam in mare etapele importante de dezvoltare, conform acestui model, fara a insista cu detalii asupra metodelor si sub-activitatilor corespunzatoare fiecarei etape : - etapa de strategie -; obiectivul este de a produce un set de modele de business, un set de recomandari si un plan agreat pentru dezvoltarea sistemelor de informatii ce vor servi nevoilor curente si viitoare ale organizatiei, tinand cont de constrangerile financiare si tehnice ale organizatiei.a9i Este analizata problema care trebuie rezolvata, pe baza specificatiilor de definitie. Aceste specificatii sunt obtinute in urma discutiilor avute cu beneficiarul aplicatiei, studierea unor documentatii legate de domeniul de activitate respectiv, in acest caz este vorba de studierea legislatiei asociatiilor de proprietari si discutiile avute cu administratorul de imobil; - etapa de analiza -; Preia si verifica lucrurile obtinute in etapa strategie si le expandeaza in detaliu suficient pentru a asigura acuratetea de business, fezabilitatea si un fundament sanatos pentru proiectare, in cadrul domeniului organizatiei si avand in minte sisteme existente;a9i - etapa de proiectare -; pe baza etapei de analiza, se realizeaza proiectarea aplicatiei, in urma careia rezulta directive concrete pentru etapa de implementarea9i, de exemplu se realizeaza proiectarea schemei bazei de date, stabilirea functiilor de business necesare in sistem, etc.; - etapa de implementare -; realizarea efectiva a aplicatiei, scrierea codului, realizarea bazei de date, compilarea aplicatiei sub forma unui program executabil; - etapa de testare -; produsul software este testat in conditii normale de utilizare si se rezolva eventualele probleme; - etapa de documentare -; se scrie documentatia aplicatiei(sub forma tiparita si/sau online), se face instruirea viitorilor utilizatori ai aplicatiei. Figura 1. Ciclul de viata al unui sistem informatica9i Rezultatul stadiilor strategie si analiza trebuie sa fie complet independente de orice tehnica de implementare specifica, pentru a da proiectantului oportunitatea maxima de a folosi tehnologia potrivita si pentru a proiecta in coexistenta cu sisteme curente. Metoda CASE trebuie sa fie doar scheletul, ea trebuie completata cu ideile proprii si inovatia contribuie la calitatea produsului final. Business-urile sunt in continua miscare. In linii mari se schimba nu CE este facut ci CINE si CUM face. Modelele folosite pentru a defini cerintele business-ului trebuie sa permita modificari rezonabile in structura organizatiei. Modelele trebuie sa fie de asemenea independente de toate solutiile cunoscute. Sistemul trebuie sa continue sa functioneze eficient cand, de exemplu, sunt adoptate proceduri

noi de fabricatie, vanzare, administrare. Cerintele ar trebui modelate si definite intr-o maniera generica. Cerintele functionale ar trebui sa defineasca ce este facut, nu cum sau de catre cine. Structura datelor trebuie sa permita modificari: in structura organizatiei, pentru exceptii si pentru limite curente si observabile.a9i 2.3 Etapa analiza. Entitati si Atribute Pentru a ajunge la realizarea structurii bazei de date, am utilizat specificatiile de definitie(prezentate in subcapitolul 1.2). Pe baza acestor specificatii extragem entitatile si atributele care constituie puncte de plecare la proiectarea bazei de date. NOTIUNE CALITATE(entitate sau atribut) imobil Entitate denumire imobil Atribut adresa imobil Atribut localitate Atribut judet Atribut nume administrator Atribut apartament Entitate numar apartament Atribut proprietar Atribut numar de camere Atribut numar de persoane Atribut suprafata Atribut furnizor Entitate denumire furnizor Atribut cod fiscal Atribut adresa furnizor Atribut factura Entitate numar document Atribut consum Atribut suma Atribut incasare Entitate numar chitanta Atribut data emiterii Atribut suma Atribut luna Entitate anul Atribut tip calcul Entitate tip consum Entitate denumire consum Atribut unitate de masura Atribut consum Entitate valoare Atribut Tabel 1. Lista cu entitati si atribute In tabelul 2 prezentam entitatile cu tipul acestora precum si cu legaturile dintre ele. ENTITATE TIP ENTITATE ENTITATI CU CARE ARE LEGATURA imobil entitate de baza apartament entitate de baza luna incasare consum furnizor entitate de baza tip consum factura entitate de baza luna tip consum incasare entitate de baza apartament luna entitate de baza apartament factura tip calcul entitate de baza tip consum consum entitate de legatura apartament tip consum tip consum entitate de baza consum factura furnizor tip calcul Tabel 2. Entitatile si legaturile dintre ele Aceste legaturi le-am stabilit pe baza textului care constituie specificatiile de definitie si sunt piesele de baza la proiectarea structurii bazei de date. Pentru inceput, entitatile si atributele acestora sunt elementele de baza pentru alcatuirea diagramei entitate-relatie. Modelarea ER a fost inventata la mijlocul anilor '70 de Peter Chen si ramane in continuare principala abordare pentru modelarea datelor.a9i Prin aceasta reprezentare schematica sub forma unei diagrame se reprezinta entitatile, atributele si relatiile dintre entitati precum si tipul acestor relatii. In tabelul 3 sunt enumerate atributele, pentru fiecare dintre acestea am stabilit tipul de date pe care il vor avea la realizarea bazei de date, in vederea reprezentarii corecte si complete a informatiei. Coloana a 2-a reprezinta numele efectiv utilizat pentru implementare, astfel am dorit sa evit folosirea caracterului spatiu in structura bazei de date. ATRIBUT NUME UTILIZAT IN BD TIP DE DATE LUNGIME ENTITATEA DE CARE APARTINE denumire imobil denumire sir de caractere 50 imobil adresa imobil adresa sir de caractere 50 imobil localitate localitate sir de caractere 50 imobil judet judet sir de caractere 50 imobil nume administrator numeAdministrator sir de caractere 50 imobil numar apartament nrApartament numeric long integer apartament proprietar proprietar sir de caractere 50 apartament numar de camere nrCamere numeric long integer apartament numar de persoane nrPersoane numeric long integer apartament suprafata suprafata numeric long integer apartament denumire furnizor denumireFurnizor sir de caractere 50 furnizor cod fiscal CF sir de caractere 50 furnizor adresa furnizor adresa sir de caractere 50 furnizor numar

document nrDocument sir de caractere 50 factura consum consum numeric long integer factura suma suma numeric long integer factura numar chitanta nrChitanta sir de caractere 50 incasare data emiterii data data calendaristica incasare suma suma numeric double incasare luna luna numeric long integer luna anul anul numeric long integer luna tip calcul tipCalcul sir de caractere 50 tip calcul denumire consum denumireConsum sir de caractere 50 tip consum unitate de masura UM sir de caractere 50 tip consum valoare valoare sir de caractere 50 consum Tabel 3. Atributele cu tipurile de date corespunzatoare si entitatile de care apartin Pe langa aceste atribute, vom folosi si unele atribute aditionale, cum ar fi atributul observatii la entitatile apartament si furnizor, utile in cazul in care utilizatorul doreste sa isi noteze anumite observatii despre apartamentul sau furnizorul respectiv. Continuand analiza specificatiilor de definitie, extragem relatiile dintre entitati, care pot sa fie dintre urmatoarele tipuri: - 1:N (one to many) - la o instanta a unei entitati ii corespunde una sau mai multe din cea de-a doua entitate - 1:1 (one to one) - la o instanta a unei entitati ii corespunde o instanta a celei de-a doua entitatati - N:N (many to many) - la o instanta a unei entitati ii corespunde una sau mai multe din cea de-a doua entitate si reciproc, acesteia din urma ii corespund una sau mai multe instante ale primei entitati. In acest caz trebuie introdusa o entitate de legatura pentru implementarea relatiei. Astfel, relatiile pentru cazul de fata vor fi: TEXT SPECIFICATIE ENTITATE 1 ENTITATE 2 TIP DE RELATIE un imobil contine unul sau mai multe apartamente imobil apartament 1:N pentru o luna se pot emite una sau mai multe facturi luna factura 1:N unui tip de consum ii pot reveni astfel una sau mai multe facturi tip consum factura 1:N un tip de calcul poate fi determinant pentru unul sau mai multe tipuri de consum tip calcul tip consum 1:N pentru un apartament se pot efectua una sau mai multe incasari apartament incasare 1:N un apartament poate sa aiba unul sau mai multe consumuri apartament consum 1:N un tip de consum este determinant pentru unul sau mai multe consumuri tip consum consum 1:N* un furnizor poate fi determinant pentru unul sau mai multe tipuri de consum furnizor tip consum 1:N intr-o luna exista unul sau mai multe apartamente luna apartament 1:N* Tabel 4. Relatiile dintre entitati Relatiile notate cu * sunt obligatorii. 2.4 Etapa analiza. Evenimente si Functii Instantierea entitatilor se face numai in momentul aparitiei unor evenimente sau functii de business. Principala functie de business pe care trebuie sa o rezolve aceasta aplicatie ar fi calculul cheltuielilor lunare. Prezentam in continuare o lista a acestor functii. EVENIMENT FUNCTIE ATASATA EVENIMENTULUI EXPLICATIE CU DETALII Trecerea la o luna curenta noua Generarea unei luni de prelucrare noi - stabilirea noii luni de prelucrare - actualizarea datelor despre apartamente (in special numarul de persoane, proprietarul) Primirea facturilor lunare de la furnizorii de servicii Introducerea facturilor - stabilirea lunii curente de prelucrare - stabilirea unui furnizor de servicii, cu datele de identificare ale acestuia (denumire, cod fiscal, adresa) - stabilirea unui tip de consum, cu specificarea tipului de calcul aferent, denumirea tipului de consum si unitatea de masura utilizata - introducerea facturii, cu stabilirea tipului de consum, specificarea numarului de document, consumul pentru serviciul respectiv si contravaloarea acestuia

Citirea contoarelor din apartamente Introducerea consumurilor - stabilirea lunii curente de prelucrare - introducerea consumurilor citite de la contoarele de apartament cu specificarea tipului de consum si a numarului de apartament Atingerea datei de afisare a cheltuielilor Calculul cheltuielilor lunare - stabilirea lunii curente de prelucrare - verificare daca toate datele necesare pentru calculul cheltuielilor au fost introduse in sistem, inclusiv consumurile contorizate - calcularea cheltuielilor lunare - afisarea listei de cheltuieli Proprietarul unui apartament achita contravaloarea cheltuielilor lunare Incasare - stabilirea lunii curente de prelucrare - verificarea sumei datorate de proprietar, pe baza calculelor efectuate si a situatiei platilor pentru apartamentul respectiv pana in momentul dat - introducerea sumei incasate - emiterea unei chitante Tabel 5. Evenimente si functii 2.5 Etapa proiectare. Diagrama Entitate-Relatie In etapa de proiectare vom utiliza informatiile obtinute la faza de analiza pentru a realiza diagrama Entitate-Relatie, pe baza listelor cu entitati, atribute si relatii dintre acestea, precum si diagrama de functii, pe baza listei de evenimente si functii. Diagrama Entitate-Relatie este o forma generalizata si abstractizata a listei de entitati si atribute, si este utilizata apoi pentru realizarea schemei bazei de date. Aceasta diagrama este independenta de sistemul de gestiune a bazelor de date utilizat in etapa de implementare. Pentru generarea diagramei Entitate-Relatie, se pot utiliza unelte CASE, care permit editarea acesteia in mod vizual si care apoi pe baza diagramei astfel realizate pot sa genereze in mod automat structura bazei de date. Am utilizat in acest scop aplicatia AllFusion ERwin Data Modeler 4.1, dar pentru ca utiliza elemente de reprezentare a diagramei diferite de cele studiate, am decis sa realizez aceasta diagrama manual. Prezentam in continuare cateva elemente de notatie ale diagramei Entitate-Relatie. pentru entitati, exista urmatoarele notatii: Dreptunghiul cu colturile rotunjite reprezinta entitatea, in care cu litere mari se noteaza denumirea entitatii, si cu litere mici se noteaza atributele. Linia dintre entitati indica existenta unei relatii intre acestea. Astfel, linia continua indica o relatie obligatorie, linia intrerupta(punctata) reprezinta o relatie obligatorie iar furca reprezinta o relatie la N in partea respectiva, in cazul reprezentarii de mai sus relatia fiind de 1:N. pentru specificarea atributelor, exista 3 simboluri distincte: # (diez) indica faptul ca atributul respectiv este un element de identificare a entitatii, numit si cheie, sau ID. * (asterisc) indica faptul ca atributul este unul obligatoriu. ? (grad) indica faptul ca atributul este optional.

Citirea diagramei Entitate-Relatie: Cuvintele din apropierea liniilor sunt cuvinte cheie care definesc relatia si se citesc astfel: <ENTITATE 1> <cuvant cheie><ENTITATE 2> Cuvintele cheie care sunt deasupra liniei sunt pentru citirea in directia de la stanga la dreapta, iar cele care sunt sub linie pentru citirea in sens invers, de la dreapta la stanga. Exemplu: apartament are un consum consum pentru apartament luand in considerare si relatia de 1:N neobligatorie, vom citi: un apartament poate sa aiba unul sau mai multe consumuri un

consum trebuie sa fie pentru un apartament Aceasta metoda de citire a diagramei se foloseste pentru toate entitatile si toate relatiile dintre acestea. Se poate observa in diagrama Entitate-Relatie existenta unor atribute de identificare, , identificatori unici sau de tip cheie, acestea sunt necesare pentru stabilirea legaturilor dintre entitati in faza de implementare a schemei bazei de date. In continuare vom enumera aceste atribute: ATRIBUT ENTITATEA DE CARE APARTINE TIP ATRIBUT lunaID luna cheie primara apartamentID apartament cheie primara incasareID incasare cheie primara consumID consum cheie primara tipConsumID tipConsum cheie primara furnizorID furnizor cheie primara tipCalculID tipCalcul cheie primara facturaID factura cheie primara Tabel 6. Atribute de identificare Bara verticala perpendiculara pe o linie de legatura la capatul dinspre N ne indica faptul ca identificatorul unic(cheia) al entitatii respective se propaga, pe baza relatiei de legatura, si in entitatea care are aceasta bara. Acest fapt este utilizat la constructia structurii bazei de date pentru realizarea efectiva a relatiilor dintre entitati. Am exclus entitatea imobil din diagrama Entitate-Relatie pentru ca legatura acesteia cu alte entitati a fost ignorata din considerente bine intemeiate. Astfel, in loc sa consideram ca fiind utila relatia dintre entitatile imobil si apartament, am preferat sa cream o legatura artificiala intre entitatile luna si apartament, care va fi mult mai utila la realizarea acestei aplicatii, deoarece intre aceste doua entitati exista o relatie de 1:N, adica la fiecare instanta de tip luna ii vor corespunde toate apartamentele din imobil, cu specificatia ca acestea vor avea structura(din punct de vedere al numarului de persoane, al proprietarului, al suprafetei si a numarului de camere) valabila numai pentru luna curenta de prelucrare. Astfel obtinem o flexibilitate sporita la trecerea de la o luna la alta, pentru ca modificarea unei caracteristici a unui apartament nu va influenta situatia din lunile anterioare. 2.6 Etapa proiectare. Diagrama Functionala Figura 3. Diagrama functionala 2.7 Etapa proiectare. Arhitectura aplicatiei Pentru dezvoltarea aplicatiilor cu baze de date, in functie de necesitatile de utilizare ale aplicatiei, se pot utiliza 3 tipuri de arhitectura, pe care le vom prezenta in continuare. a. Arhitectura Desktop Arhitectura desktop este caracterizata de coexistenta aplicatiei si a bazei de date pe aceeasi masina fizica(pe acelasi calculator) Figura 4. Arhitectura Desktop Acest tip de arhitectura se utilizeaza in cazul aplicatiilor de complexitate redusa, cand baza de date este utilizata de o singura aplicatie si eventual de un singur utilizator. Accesul la baza de date se face fie direct de catre aplicatie(de exemplu in cazul unei aplicatii realizate in Visual Fox) sau prin intermediul unui motor de baze de date. b. Arhitectura Client-Server In cazul arhitecturii client-server, baza de date si aplicatia nu se gasesc neaparat pe acelasi calculator. Aplicatia ruleaza pe un sistem de calcul numit client, iar baza de date se gaseste pe un alt sistem de calcul, numit server, si este gestionata de un server de baze de date(de exemplu SQL Server, MySQL, etc.) Comunicarea dintre client si server se face prin intermediul unui canal de comunicatie, care este de obicei o retea locala LAN(Local Area Network) sau o retea WAN(Wide Area Network). Acest tip de arhitectura permite accesul la baza de date de la distanta prin conectarea directa a clientului la serverul de baze de date, de exemplu printr-o conexiune de tip peer-to-peer. Figura 5. Arhitectura Client-Server c. Arhitectura Multistrat

Arhitectura multistrat este cea mai moderna dintre cele 3, si este caracterizata prin existenta a cel putin 3 sisteme de calcul, in mod generic. Aplicatia ruleaza pe sistemul client, pe care eventual ruleaza si un browser de web, prin intermediul caruia aplicatia poate sa emita cereri serverului de aplicatii, care poate fi de asemenea si un server de web. Serverul de aplicatii contine regulile de business ale aplicatiei, si este controlat de un administrator care cunoaste foarte bine intregul sistem si se ocupa cu eventualele actualizari ale sistemului. Un al treilea sistem este serverul de baze de date, unde se gaseste si baza de date. Serverul de aplicatii functioneaza ca un intermediar(gestionar) intre client si serverul de baze de date. In aplicatiile prin intermediul internetului, de multe ori pe calculatorul client nu ruleaza o aplicatie specializata, ci doar serverul de web, iar utilizatorul are acces la baza de date prin accesarea unei pagini de internet. Figura 6. Arhitectura Multistrat Dintre cele trei arhitecturi prezentate, vom utiliza pentru dezvoltarea aplicatiei arhitectura desktop, pentru ca deocamdata nu se justifica utilizarea unei conexiuni la distanta sau prin intermediul internetului. Intr-o etapa de dezvoltare ulterioara a aplicatiei, se pot lua in considerare si celelalte tipuri de arhitectura. Aceasta problema este dezbatuta pe larg in capitolul Dezvoltari ulterioare. 2.8 Etapa implementare Pentru implementarea aplicatiei am ales mediul de programare Visual Basic 6. Mediul de programare Microsoft? Visual Basic este unul dintre cele mai utilizate medii de programare pentru realizarea aplicatiilor cu baze date, pentru ca acest mediu are o serie de facilitati pentru utilizarea bazelor de date. Visual Basic 6 contine un motor complet de baze de date, care reprezinta, in esenta, o aplicatie de baze de date cu autocontinere. Spre deosebire de un procesor de texte sau alte aplicatii dotate cu interfete utilizator, o baza de date lucreaza, de regula, in fundal. Orice interfata vizibila de catre utilizator este cel mai adesea construita pentru o anumita aplicatie. Functionalitatea bazei de date este asigurata de un program denumit motorul bazei de date. Visul Basic simplifica programarea conectivitatii la o baza de date sau utilizarea controalelor grafice pentru configurarea modului de afisare si transformare a datelor.a10i Prin notiunea de conectare la o baza de date intelegem stabilirea unui protocol de comunicatie intre aplicatie si motorul care gestioneaza baza de date. Am ales acest mediu de programare pentru ca este o unealta cu un suport puternic in ceea ce priveste lucrul cu baze de date. Visual Basic permite conectarea nativa la numeroase tipuri de baze de date, cum ar fi: Acces, DBASE III, dBASE IV, dBASE 5.0, FoxPro 2.0, 3.0, Paradox 3.x-5.x, ODBC, etc. De asemenea, acest mediu de programare contine elemente puternice de dezvoltare a interfetelor utilizator, precum si de utilizare a controalelor ActiveX. ActiveX este o tehnologie Microsoft care permite utilizarea in cadrul unei aplicatii sau a unor unelte de dezvoltare a unor obiecte dezvoltate de catre o alta aplicatie. Aceste aplicatii sau unelte de dezvoltare se numesc formal OLE Automation Servers.a11i Pentru conectarea la baza de date vom utiliza un control Microsoft ADO -; ActiveX Data Objects. ActiveX Data Objects este o tehnologie dezvoltata de Microsoft pentru accesul la baze de date care implementeaza obiecte de tip data connection, data command, recordset si colectii ale acestor obiecte. Aceasta tehnologie permite si realizarea de aplicatii de tip client-server, aplicatii cu baze de date avand la baza tehnologii web sau internet.a11i Pentru implementarea bazei de date am ales o tehnologia dezvoltata de Microsoft Acces, tehnologie care foloseste acelasi motor de baze de date ca si Visual Basic. Astfel, cu ajutorul Microsoft Acces, specializat pe lucrul cu baze de date, am creat structura bazei de date, iar ca rezultat fizic, baza de date este continuta intr-un singur fisier, cu extensia .mdb.

Aplicatia este centrata pe un formular(engleza form) de tip MDI, Multiple-Document Interface, care este un formular de tip container, mentine mai multe formulare in interiorul sau. Aceste formulare, numite si formulare child, pot sa fie deschise simultan in interiorul containerului, fiecare intr-o fereastra proprie si cu functionalitate proprie. De asemenea, am utilizat doua controale de tip ActiveX: VideoSoft VSFlexGrid, care este un control de tip grid, cu o functionalitate foarte bine pusa la punct, si care permite inclusiv legarea grid-ului de o sursa de date prin intermediul ADO, OLEDB sau DAO. Data Dynamics ActiveReports este un control specializat pe generarea de rapoarte dintr-o sursa de date. Acesta prezinta multiple facilitati, cum ar fi tiparirea raportului la imprimanta, functii de marire-micsorare, exportul raportului in diferite formate. Din punct de vedere al accesului la baza de date, acesta se face prin intermediul unor interogari SQL care au ca rezultat un recordset(set de inregistrari) sau prin comenzi directe ale instantei unui obiect de tip Connection. Implementarea efectiva a aplicatiei, este descrisa amanuntit in capitolul 3, Memoriu Justificativ. 3. MEMORIU JUSTIFICATIV 3.1 Proiectarea si implementarea bazei de date Proiectarea bazei de date am facut-o pe baza etapelor studiate in capitolul anterior, iar implementarea cu ajutorul produsului Microsoft Acces. Baza de date va fi sub forma unui fisier de tip mdb, si fiecare astfel de fisier va reprezenta un imobil(sau o asociatie de proprietari), la un moment dat pot sa existe mai multe baze de date ale mai multor imobile, iar la rularea aplicatiei utilizatorul va putea sa aleaga imobilul(asociatia de locatari), si implicit baza de date curenta. Am ales aceasta metoda pentru a obtine o mai buna portabilitate a bazei de date. In urma etapelor de analiza si de proiectare prezentate in capitolul anterior, am realizat structura bazei de date cu ajutorul produsului Microsoft Acces. Astfel, baza de date contine un numar de 11 tabele, 9 sunt cele corespunzatoare entitatilor prezentate in tabelul 1 din subcapitolul 2.3: - apartament - consum - factura - furnizor - imobil - incasare - luna - tipCalcul - tipConsum Celelalte 2 sunt tabele auxiliare, care nu rezulta in urma analizei, ci au fost introduse ca elemente ajutatoare pentru simplificarea codului. Acestea sunt: - deIncasat -; se memoreaza temporar rezultate ale calculelor efectuate - listaRap -; se stocheaza temporar diverse informatii necesare generarii de rapoarte In figura urmatoare, prezentam structura bazei de date, cu tabelele si legaturile dintre ele. Observam ca fata de atributele prezente in diagrama entitate-relatie, sunt prezente si atributele de identificare de tip chei straine, care se propaga in momentul realizarii legaturilor dintre tabele. De exemplu, in tabela apartament, atributul LunaID, este cheie straina propagata din tabela luna, pentru a se face legatura dintre cele 2 tabele. Figura 7. Structura bazei de date In general, am denumit atributele de identificare cu postfixul ID(de la identificator sau index). Mentionez ca in momentul implementarii bazei de date, prin definirea unei legaturi intre 2

tabele, am stabilit reguli de fortare a integritatii referentiale, adica motorul de baze de date nu va permite stergerea unei inregistrari din baza de date daca aceasta inregistrare are legatura cu o alta inregistrare din tabela cu care se afla in relatie. Aceasta regula se defineste in sensul de la 1 la N, adica nu pot sa sterg inregistrarea de la capatul 1 daca la capatul N exista cel putin o inregistrare care are referinta la aceasta. Stabilirea acestei reguli se face prin bifarea optiunii Enforce Referetial Integrity la editarea unei relatii. Fiecare fisier de tip mdb aflat in directorul aplicatiei va contine baza de date corespunzatoare unei asociatii de proprietari, exceptie face fisierul template.mdb, care se livreaza o data cu aplicatia, si care contine structura generica a bazei de date, fara a contine date despre o anumita asociatie. Acest fisier este folosit ca si model in momentul in care utilizatorul creeaza prima baza de date a unei asociatii de proprietari sau atunci cand creeaza o asociatie noua. Fiecare fisier nou creat va avea forma: mdb<nume_asociatie>.mdb exemplu: mdbCiortea7.mdb va contine baza de date pentru asociatia de proprietari denumita de catre utilizator Ciortea7 La initializarea aplicatiei, se apeleaza o functie care cauta toate fisierele care incep cu mdb si au extensia mdb din directorul curent si le pune la dispozitia utilizatorului, pentru ca acesta sa poata sa aleaga baza de date cu care va lucra. In acest mod am asigurat o buna portabilitate a informatiei, necesara de exemplu in cazul in care utilizatorul foloseste doua calculatoare pe care are instalata aplicatia, transportul informatiei intre cele 2 puncte de lucru se face prin simpla copiere a fisierului respectiv din directorul aplicatiei. Numele ultimei baze de date utilizate se memoreaza la iesirea din aplicatie intr-un fisier de configurare, astfel ca utilizatorul nu va trebui sa aleaga de fiecare data cand intra in aplicatie baza de date curenta. Acest fisier se numeste administrator.ini, se gaseste in directorul aplicatiei si are urmatoarul continut: Afiseaza Dialog Selectie Asociatie = False Ultima Asociatie Utilizata = Dorobantilor109 Prima optiune se refera la afisarea formularului de selectie a asociatiei curente la lansarea in executie a aplicatiei si poate sa aiba valorile True(adica afiseaza) sau False(adica nu afiseaza). 3.2 Proiectarea interfetei utilizator Meniul aplicatiei Meniul aplicatiei este implementat in formularul container MDI, care se numeste frmMDIPrincipal. si are urmatoarea structura arborescenta: Figura 8. Structura arborescenta a meniului Tabelul urmator contine categoriile, subcategoriile meniului precum si functionalitatea acestora. CATEGORIE SUBCATEGORIE FUNCTIONALITATE General Alege Luna Curenta Alegerea, schimbarea lunii curente de prelucrare Alege Asociatie Alegerea, schimbarea asociatiei de proprietari curente Optiuni Optiuni ale aplicatiei Iesire Iesire din aplicatie Actualizari Facturi Lunare Introducerea, modificarea si vizualizarea facturilor lunare de la furnizorii de servicii Consumuri pe Apartament Introducerea, modificarea si vizualizarea consumurilor lunare pe apartament(apartamentele contorizate) Incasari Locatari Introducerea, modificarea si vizualizarea incasarilor de la proprietarii de apartamente(locatari) Afisari Lista Cheltuieli Generarea, vizualizarea si tiparirea listei lunare de cheltuieli cu suma totala de plata si restante

Lista Cheltuieli Defalcate Generarea, vizualizarea si tiparirea listei lunare de cheltuieli cu suma totala de plata, restante si sumele defalcate pe consumuri. Situatie Apartament Vizualizarea situatiei incasarilor pentru un apartament Nomenclatoare Apartamente Introducerea, modificarea si vizualizarea datelor despre apartamente Date Asociatie Introducerea, modificarea si vizualizarea datelor despre asociatia de proprietari(imobil) Tip Consum Introducerea, modificarea si vizualizarea tipurilor de consum(tipuri de servicii) Furnizori Introducerea, modificarea si vizualizarea listei de furnizori de servicii Ajutor Asistenta Documentatia online(help-ul) a aplicatiei Despre Informatii despre aplicatie Tabel 7. Structura meniului In general, functionalitatea meniului, si implicit a aplicatiei, este legata de luna curenta de prelucrare, care se poate modifica din meniul General. Exceptie de la aceasta regula fac subcategoriile aflate in categoria General, subcategoria Situatie Apartament din categoria Afisari, precum si Date Asociatie din categoria Nomenclatoare. Luna curenta de prelucrare este afisata permanent pe bara de titlu a aplicatiei(Title Bar). Prin schimbarea lunii curente de prelucrare folosind subcategoria Alege Luna Curenta, se actualizeaza toate informatiile dependente de luna de prelucrare, inclusiv nomenclatorul de apartamente, furnizori sau tipuri de consum. In figura 9 este prezentata o mostra referitoare la organizarea meniului. Caracterele care sunt subliniate sunt shortcut-uri pentru utilizarea cu ajutorul tastaturii. Figura 9. Forma meniului Pe bara de titlu a aplicatiei este afisata permanent asociatia de proprietari curenta(in figura 9 este Dorobantilor 109), luna curenta si anul curent de prelucrare(in figura 9 este vorba de iunie 2004). Fiecare subcategorie din meniu, cu exceptia celei de Iesire, are atasat un formular, care se initializeaza si se afiseaza la activarea optiunii respective. Subcategoriile Lista Cheltuieli si Lista Cheltuieli Defalcate au atasat acelasi formular, dar la initializarea acestuia se stabileste intr-o variabila specifica care dintre optiuni a facut apelul. Toate formularele apartin containerului MDI, cu exceptia subcategoriei Asistenta, care se deschide separat fata de aplicatie. Mentionez ca am urmarit sa realizez interfata utilizator intr-un mod cat mai simplu si intuitiv, folosind elemente de interfata standard de Windows, astfel incat utilizatorul sa fie deja familiarizat cu o mare parte din aceste elemente. Formulare FORMULAR TIP FORMULAR SUBCATEGORIE sau FORMULAR FUNCTIONALITATE frmSelectieLuna dialog modal Alege Luna Curenta Alegerea, schimbarea lunii curente de prelucrare frmAlegeAsociatie dialog modal Alege Asociatie Alegerea, schimbarea asociatiei de proprietari curente frmOptiuni dialog Optiuni Optiuni ale aplicatiei frmMsgBoxRom dialog modal Utilizat pentru rezolvarea unor optiuni de tip DA/NU frmFacturi MDI child Facturi Lunare Introducerea, modificarea si vizualizarea facturilor lunare de la furnizorii de servicii frmConsum MDI child Consumuri pe Apartament Introducerea, modificarea si vizualizarea consumurilor lunare pe apartament(ap. contorizate) frmIncasare MDI child Incasari Locatari Introducerea, modificarea si vizualizarea incasarilor de la proprietarii de apartamente(locatari) frmListaCheltuieli MDI child Lista Cheltuieli Lista Cheltuieli Defalcate Generarea, vizualizarea si tiparirea listei lunare de cheltuieli cu suma totala de plata, restante si sumele defalcate pe consumuri. frmSituatieAp MDI child Situatie Apartament Vizualizarea situatiei incasarilor pentru un apartament frmApartamente MDI child Apartamente Introducerea, modificarea si vizualizarea datelor despre apartamente

frmDateAsociatie MDI child Date Asociatie Introducerea, modificarea si vizualizarea datelor despre asociatia de proprietari frmTipConsum MDI child Tip Consum Introducerea, modificarea si vizualizarea tipurilor de consum(tipuri de servicii) frmFurnizori MDI child Furnizori Introducerea, modificarea si vizualizarea listei de furnizori de servicii frmSelectieData dialog modal frmIncasare Selectarea datei frmRECSelection dialog modal frmSituatieAp Alegerea unui anumit apartament dintr-o lista frmDespre dialog Despre Informatii despre aplicatie Tabel 8. Lista Formularelor Formularele de tip dialog modal sunt formulare care odata afisate, vor ramane afisate peste toate formularele(ferestrele) deschise deja, interzicand accesul la acestea pana la rezolvarea dialogului, de cele mai multe ori apasarea pe un buton de pe formularul dialog. Observam in tabelul 8 ca unele formulare, cum ar fi frmSelectieData sau frmMsgBoxRom nu sunt direct afisabile dintr-o subcategorie a meniului. Aceste formulare sunt utilizate de catre alte formulare sau sunt afisate direct, fara a avea un formular parent. Formulare cu regim special sunt frmAlegeAsociatie, si frmSelectieLuna, ambele sunt de tipul dialog modal. Formularul frmAlegeAsociatie este afisat la prima intrare in aplicatie sau daca este bifata optiunea respectiva, se ocupa cu selectarea asociatiei de proprietari curente Figura 10. Formularul frmAlegeAsociatie Asa cum am precizat deja, acest formular cauta toate fisierele a caror denumire incepe cu mdb si au extensia mdb din directorul aplicatiei si le adauga in controlul de tip lista care se vede si in figura 9. Secventa de cod care face acest lucru este urmatoarea: fisier = Dir(appPath & "\" & "mdb*.mdb") If fisier <> "" Then comboAsociatie.AddItem (mid(fisier, 4, Len(fisier) - 7)) End If While fisier <> "" fisier = Dir If fisier <> "" Then comboAsociatie.AddItem (mid(fisier, 4, Len(fisier) - 7)) End If Wend Formularul frmSelectieLuna are de asemenea un regim special, acesta se afiseaza intotdeauna la pornirea aplicatiei precum si la apelarea subcategoriei Alege Luna din meniu. Din punct de vedere functional, acesta se ocupa cu selectarea lunii curente si a anului curent de prelucrare, prin interogarea bazei de date referitor la inregistrarile din tabelul luna. Figura 11. Formularul de selectie a lunii de prelucrare Dupa cum se observa in figura de mai sus, formularul incarca intr-un control de tip lista lunile de prelucrare gasite in tabela luna. Utilizatorul are posibilitatea de a selecta una din lunile de prelucrare existente deja sau poate sa creeze o luna de prelucrare noua. Secventa de cod care ruleaza in momentul adaugarii unei luni noi este urmatoarea: anul = Val(InputBox("Introduceti anul", "Anul", Year(Date))) If anul < 2000 Or anul > 2100 Then Exit Sub luna = Val(InputBox("Introduceti luna", "Luna", Month(Date))) If luna < 1 Or luna > 12 Then Exit Sub If GetFieldFromTable("lunaID", "luna", "anul=" & anul & " and luna=" & luna) = "" Then idLastLuna = GetMaxMinFieldTable("max", "lunaID", "luna") conexiune.Execute "INSERT INTO luna (anul,luna) VALUES ("&anul&","&luna& ")" If Not IsNull(idLastLuna) Then idLuna = GetDBIdentity OpenRS rs, "SELECT * FROM apartament WHERE lunaID=" & idLastLuna If rs.RecordCount <> 0 Then While Not rs.EOF conexiune.Execute "INSERT INTO apartament " _ &"(lunaID,NrApartament,Proprietar,NrPersoane,NrCamere,Suprafata) " _

&"VALUES("&idLuna&","&rs("NrApartament")&",'"&rs("Proprietar")&"'," _ &rs("NrPersoane")& "," & rs("NrCamere") & "," & rs("Suprafata") & ")" rs.MoveNext Wend End If End If Else MsgBox "Aceasta luna este deja existenta in baza de date", vbExclamation End If In aceasta secventa de cod, pentru creearea unei luni noi de prelucrare se adauga o inregistrare in tabela luna si apoi se copiaza structura apartamentelor din luna cea mai recenta gasita in aceasta tabela. Un alt formular cu regim special pe care il vom prezenta este frmRECSelection, care este afisat la apasarea butonului Cauta Ap(Cauta Apartament) din toolbar-ul formularului frmSituatieAp. Este un formular de tip dialog modal. Figura 12. Formularul frmRECSelection Acest formular cauta toate inregistrarile din tabela apartament chiar daca nu sunt pentru luna curenta de prelucrare. Dupa selectia unuia dintre apartamente, in formularul frmSituatieAp se vor afisa toate incasarile facute pentru apartamentul selectat. Proiectarea acestui formular este flexibila in sensul ca i se transmite printr-o variabila un sir care reprezinta o interogare SQL: frmRECSelection.lblQueryMaster = "SELECT apartamentID, nrApartament, " _ & "proprietar FROM apartament WHERE lunaID=" & ID_LUNA& " ORDER BY nrApartament" Un alt formular folosit de catre frmIncasare este frmSelectieData care este un dialog modal si contine un control de tip Microsoft Acces Calendar Control, utilizat pentru stabilirea datei la care s-a emis chitanta pentru o incasare. Nu vom discuta separat fiecare formular de tip MDI child, pentru ca din punct de vedere al interfetei utilizator sunt similare, diferentele sunt minore. De aceea, vom exemplifica functionalitatea unui astfel de formular, si anume frmApartamente care se ocupa de evidenta apartamentelor din imobil. Observam in figura 12 ca formularul este centrat pe un control de tip grid, care asa cum am specificat este implementat cu controlul VSFlexGrid. Editarea se face in interiorul grid-ului, prin scrierea informatiei direct de la tastatura sau in unele cazuri prin selectarea unei celule a gridului se deschide un combobox. In partea de deasupra gridului exista un toolbar, unde exista butoane pentru functiile de Salvare, Linie Noua si Stergere Linie. Figura 13. Formularul frmApartamente Controlul de grid este legat de baza de date direct, prin secventa: Dim rs As New ADODB.Recordset OpenRS rs,"SELECT * FROM apartament WHERE LunaID="&ID_LUNA&" ORDER BY nrApartament" Set grNom.DataSource = rs grNom.DataMode = flexDMBoundBatch unde OpenRS este o functie care deschide un recordset pe baza unei interogari SQL si grNom este instanta obiectului de grid Modificarile pe care utilizatorul le face in grid se actualizeaza efectiv in baza de date numai la apasarea butonului Salveaza prin apelarea functiei: Public Sub DocSave() rs.UpdateBatch adAffectAll trebuieSalvat = False End Sub 3.3 Implementare Din punct de vedere al codului, aplicatia este compusa dintr-un modul principal, aflat in fisierul principal.bas. In acest modul se afla declaratiile variabilelor globale, definitiile

functiilor publice utilizate precum si rutina Main(), care se executa la rularea aplicatiei. Functionalitatea fiecarui formular este definita in interiorul formularului, in functii care trateaza evenimentele de interfata ale obiectelor, cum ar fi initializarea formularului(eveniment de tip Form_Load) apasarea unei taste, editarea unei celule a gridului, apasarea unui buton din toolbar, selectarea unui element dintr-un combo, etc. Din punct de vedere al accesului la baza de date din cod, am utilizat 2 metode: a. operatii directe asupra bazei de date cu ajutorul metodei Execute a instantei numita conexiune a obiectului Connection. exemple: actualizarea unei inregistrari conexiune.Execute "UPDATE imobil SET" _ & " denumire='" & txtDenumire & "'" _ & " ,adresa='" & txtAdresa & "'" _ & " ,localitate='" & txtLocalitate & "'" _ & " ,Judet='" & txtJudet & "'" _ & " ,numeAdministrator='" & txtNumeAdministrator & "'" _ & " WHERE imobilid=" & imobilID & "" creearea unei tabele: conexiune.Execute "CREATE TABLE listaRap" adaugarea unor campuri intr-o tabela: conexiune.Execute "ALTER TABLE listaRap ADD COLUMN ID LONG" conexiune.Execute "ALTER TABLE listaRap ADD COLUMN Ap TEXT(5)" conexiune.Execute "ALTER TABLE listaRap ADD COLUMN Proprietar TEXT(100)" conexiune.Execute "ALTER TABLE listaRap ADD COLUMN NrPers TEXT(3)" conexiune.Execute "ALTER TABLE listaRap ADD COLUMN Suprafata LONG" b. interogari SQL ale bazei de date si obtinerea unui recordset cu rezultatul interogarii exemplu: OpenRS rs,"SELECT Sum(incasare.Suma) FROM apartament INNER JOIN incasare" _ & " ON apartament.apartamentID = incasare.ApartamentID where " _ & " (((apartament.LunaID) < " & idLuna & ")) GROUP BY" _ & " apartament.NrApartame

Visual Basic Romnesc

1/8/2013

Lista VB Ro Carti Surse Articole Programe Legaturi O problema des intilnita in programare (nu numai in Visual Basic) este posibilitatea de a folosi Pareri (caption-ul) butoanelor sau celorlalte controale modificate (in alta limba). Aceasta problema am rezolvat-o pentru Delphi (vezi p01805 ) mult mai usor pentru ca in Delp cind in Visual Basic acesta nu are evenimente. O solutie ar putea fi construirea unei forme utilizator care arata la fel si executa acelasi lucruri, destul de greu de facut. Solutia problemei consta in crearea dialogurilor utilizind functiile API Windows si subclasifica comdlg32.ocx si comdlg32.dll. Pt. construirea la run-time a dialogurilor se folosesc functiile API d GetSaveFileName, ChooseFont, ChooseColor, respectiv Print care nu mai au nevoie de comdlg3

Common Dialogs

Pentru fiecare din aceste dialoguri trebuie completata o structura (tip de date definit de utilizato elementele structurii este adresa unei functii pentru tratarea mesajelor corespunzatoare dialogului. I care se primeste evident la initializarea dialogului si in care putem schimba textul dorit. In mod nor totul decurge normal sau nenula daca a aparut o eroare (s-a apasat Cancel, s-a inchis pur si simplu d prin apelarea functiei CommDlgExtendedError. Sa analizam o problema care apare la toate dialogurile. Asa cum am mai spus, unul din elemen mesajele dialogului. Desi in Visual Basic exista AddressOf care returneaza adresa unei functii sau alte functii sau proceduri nu se poate folosi de sine statator. Deci, nu se poate scrie d.lpfnHook = AddressOf OProcedura si nici combinatii de acest gen. Pentru aceasta atribuire vom d.lpfnHook = pAddressOf(addressOf OProcedura) unde functia pAddressOf este ca mai jos:
Public Function pAddressOf(ByVal procaddr As Long) As Long pAddressOf = procaddr End Function

In mod normal toate aceste dialoguri nu au in coltul stinga sus nici un icon. Pentru a afisa un ic WM_SETICON care are wParam nul (0&), iar lParam este un pointer la un icon (la iconul ferestr Alta problema care apare este faptul ca functia care trateaza mesajele dialogului (functia 'Hook forma sau class-module). Sa luam pe rind fiecare dialog.

1. Open - acesta se foloseste pentru selectarea sau crearea unui fisier dintr-un folder care poate fi c asemanator cu dialogul open pt. Windows 3.x sau asemanator cu Windows Explorerul din Window vedem mai jos codul pt. crearea unui dialog open cu textul in romaneste folosind functia GetOpenf Intr-un modul scriem functia de tratarea mesajelor (care modifica textul) astfel:
Private Private (ByVal Private (ByVal Declare Declare hDlg As Declare hwnd As

Function GetParent Lib "user32" (ByVal hwnd As Long) As Long Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" _ Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Lon Function SendMessage Lib "user32" Alias "SendMessageA" _ Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As

Public Const OFN_EXPLORER = &H80000 Public Const OFN_ENABLEHOOK = &H20 Private Const WM_INITDIALOG = &H110 Private Const WM_SETICON = &H80 Private Private Private Private Private Private Private Const Const Const Const Const Const Const IDC_OK As Long = 1 IDC_CANCEL As Long = 2 IDC_HELP As Long = 1038 IDC_READONLY As Long = 1040 IDC_LOOKIN As Long = 1091 IDC_FILESTYPES As Long = 1089 IDC_FILENAME As Long = 1090

Public Function fDialogCallBack(ByVal lnghwnd As Long, ByVal lngMessage As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim l As Long If lngMessage = WM_INITDIALOG Then If Form1.FLAGS And OFN_EXPLORER Then l = GetParent(lnghwnd) Else l = lnghwnd End If SetDlgItemText l, IDC_OK, "&Deschide" SetDlgItemText l, IDC_CANCEL, "Renunta" SetDlgItemText l, IDC_LOOKIN, "Deschide &in"

SetDlgItemText SetDlgItemText SetDlgItemText SendMessage l, End If End Function

l, IDC_FILENAME, "&Nume fisier" l, IDC_FILESTYPES, "&Tip fisier" l, IDC_READONLY, "Deschide &read-only" WM_SETICON, 0&, CLng(Form1.Icon)

Pun pe o forma un buton (command1) si un text-box (text1) apoi se scrie:

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNa (pOpenfilename As OPENFILENAME) As Long Private Type OPENFILENAME lStructSize As Long hwndowner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String FLAGS As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Dim d As OPENFILENAME Dim nf As String * 260 Public FLAGS As Long Private Sub Command1_Click() d.lStructSize = Len(d) d.hwndowner = hwnd 'HWND-ul parintelui dialogului d.lpstrFilter = "Toate fisierele (*.*)" & Chr(0) & "*.*" & Chr(0) & _ "Fisiere text (*.txt)" & Chr(0) & "*.*" & Chr(0) & Chr(0) d.lpstrCustomFilter = vbNullString d.nFilterIndex = 1 d.lpstrFile = nf d.nMaxFile = 260 d.lpstrTitle = "Un titlu" 'titlul dialogului d.FLAGS = OFN_ENABLEHOOK Or OFN_EXPLORER FLAGS = d.FLAGS 'adresa functiei de tratarea mesajelor dialogului d.lpfnHook = pAddressOf(AddressOf fDialogCallBack) GetOpenFileName d 'afiseaza dialogul Text1 = d.lpstrFile 'foloseste numele selectat in dialog End Sub 'numele de fisier selectat

Felul in care arata dialogul este dat de valoarea continuta in cimpul FLAGS din tipul OPENFIL forma). Printre altele aceasta poate fi OFN_ENABLEHOOK pt. a activa utilizarea unei functii de tr stil gen Windows Explorer. In cazul in care stilul nu este OFN_EXPLORER atunci HWND-ul pasa HWND-ul dialogului, altfel, daca stilul este OFN_EXPLORER atunci HWND-ul dialogului este G Filter-ul dialogului este despartit prin chr(0), iar finalul este marcat prin chr(0) & chr(0).

Textul butoanelor si controalelor se poate schimba cu SetDlgItemText. Pt. asta trebuie sa stim i identificatorii controalelor din dialog se poate folosi:
Dim l As Long Dim sx As String * 260

Public Function fDialogCallBack(ByVal lnghwnd As Long, ByVal lngMessage As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If lngMessage = WM_INITDIALOG Then For i = 1 To 10000 sx = Space$(260) l = GetDlgItemText(GetParent(lnghwnd), i, sx, 260) 'l = GetDlgItemText(lnghwnd, i, sx, 260) 'daca stilul nu este OFN_EXPLORER If l <> 0 Then Debug.Print i & "--" & sx Next End If End Function

Am presupus ca acesti identificatori sint intre 1 si 10000 ceea ce a fost adevarat. Acesti identifi valorile constantelor IDC_. In final fisierul selectat este in d.lpstrFile care este vid daca nu s-a selectat nimic. Acesta este cel mai simplist mod de a folosi dialogul open subclasificat dar evident se pot face La toate aceste schimbari de texte din dialog puteti observa ca desi initial butonul Open are lite &Deschide atunci litera "D" va fi subliniata si functioneaza in continuare cu ALT+D asemanator c

2. Save, Save As... - aceste 2 dialoguri arata aproape la fel si au aproape acelasi comportament cu d afisate dialogurile. Singurele diferente constau in functia care trebuie apelata, de aceasta data apelin scrie Save nu Open. Insa, la fel trebuie completata o structura (tip) OPENFILENAME cu acelasi f chiar pentru ca este la fel ca la dialogul open.

3. Color - pentru afisarea acestui dialog la fel ca mai sus, se completeaza o structura (tip) CHOOS ChooseColor. Simplu! Sa vedem mai intii codul dupa care o sa-l analizam. Punem intr-un modul:

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hw ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Lo Private Const GW_CHILD = 5 Private Const GW_HWNDNEXT = 2 Private Const WM_INITDIALOG = &H110 Private Const WM_SETICON = &H80 Private Const WM_SETTEXT = &HC Private Private Private Private Private Private Private Private Const Const Const Const Const Const Const Const IDC_CANCEL As Long = 2 IDC_ADDCUSTOMCOLORS As Long = 712 IDC_DEFINECUSTOMCOLORS As Long = 719 IDC_RED As Long = 726 IDC_GREEN As Long = 727 IDC_BLUE As Long = 728 IDC_HELP As Long = 1038 IDC_BASICCOLORS As Long = 65535

Public Function fColorCallBack(ByVal lnghwnd As Long, ByVal lngMessage As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim l as Long

If lngMessage = WM_INITDIALOG Then SendMessage lnghwnd, WM_SETTEXT, 0&, "Selectie culori..." SendMessage lnghwnd, WM_SETICON, 0&, CLng(frmColor.Icon) SetDlgItemText lnghwnd, IDC_CANCEL, "Renunta" SetDlgItemText lnghwnd, IDC_DEFINECUSTOMCOLORS, "&Defineste culori utilizato SetDlgItemText lnghwnd, IDC_ADDCUSTOMCOLORS, "&Adauga culori utilizator" SetDlgItemText lnghwnd, IDC_RED, "&Rosu" SetDlgItemText lnghwnd, IDC_GREEN, "&Verde" SetDlgItemText lnghwnd, IDC_BLUE, "Albastr&u" SetDlgItemText lnghwnd, IDC_HELP, "A&jutor" SetDlgItemText lnghwnd, IDC_BASICCOLORS, "Culori de &baza" l = GetWindow(lnghwnd, GW_CHILD) l = GetWindow(l, GW_HWNDNEXT) l = GetWindow(l, GW_HWNDNEXT) SendMessage l, WM_SETTEXT, 0&, "&Culori utilizator" End If End Function

iar la forma cu un buton (command1) scriem:

Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" _ (pChoosecolor As ChooseColor) As Long Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _ ByVal dwBytes As Long) As Long Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Lon Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Private Const GMEM_MOVEABLE = &H2 Private Const GMEM_ZEROINIT = &H40 Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT) Private Const CC_ENABLEHOOK = &H10 Private Type ChooseColor lStructSize As Long hwndowner As Long hInstance As Long rgbResult As Long lpCustColors As Long FLAGS As Long lCustData As Long lpfnHook As Long lpTemplateName As Long End Type Dim c As ChooseColor Dim alCustomColors(15) As Long Private Sub Command1_Click() Dim l as Long Dim lCustomColorSize As Long Dim lCustomColorAddress As Long Dim lMemHandle As Long c.lStructSize = Len(c) c.hwndowner = hwnd lCustomColorSize = Len(alCustomColors(0)) * 16 lMemHandle = GlobalAlloc(GHND, lCustomColorSize) If lMemHandle = 0 Then '16 elemente de la 0 la 15

Exit Sub End If lCustomColorAddress = GlobalLock(lMemHandle) If lCustomColorAddress = 0 Then Exit Sub End If Call CopyMemory(ByVal lCustomColorAddress, alCustomColors(0), lCustomColorSize)

c.lpCustColors = lCustomColorAddress c.FLAGS = CC_ENABLEHOOK c.lpfnHook = pAddressOf(AddressOf fColorCallBack) l = ChooseColor(c) if l<>0 then 'daca s-a selectat 'Cancel' sau nu a fost selectata o culoare atu Call CopyMemory(alCustomColors(0), ByVal lCustomColorAddress, lCustomCol BackColor = c.rgbResult End If End Sub

Ceea ce difera la acest dialog fata de precedentele este faptul ca unul din elementele tipului CH in care vor fi returnate culorile utilizator alese, altele decit cele de baza. Dupa cum stiti Visual Basi subterfugii. Acestea sint functiile API GlobalAlloc, GlobalLock, GlobalFree si CopyMemory (ca pointerii. Codul programului cred ca este destul de lamuritor privind utilizarea acestor functii. Pentru a activa subclasificarea dialogului in membrul FLAGS al structurii CHOOSECOLOR tr Dupa apelul functiei ChooseColor copiem valorile culorilor definite de utilizator inapoi in siru viitoare cind va fi afisat dialogul. La acest dialog (ca si la urmatorul font) structura (tipul) cu care se apeleaza functia API coresp numele dialogului. Pentru a modifica numele dialogului se apeleaza SendMessage cu mesajul WM wParam nul (0&) si lParam avind noul nume al dialogului. In final, rezultatul alegerii dvs. se regaseste in rgbColor.

4. Font - acest dialog este foarte asemanator cu dialogul color si asa cum banuiti se apeleaza pentru structura de tip CHOOSEFONT. Sa vedem mai intii codul din modul:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As Any) As Long Private Declare Function SetDlgItemText Lib "user32" Alias "SetDlgItemTextA" _ (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String) As Lo Private Const WM_INITDIALOG = &H110 Private Const WM_SETTEXT = &HC Private Const WM_SETICON = &H80 Private Private Private Private Private Private Private Private Private Private Private Private Const Const Const Const Const Const Const Const Const Const Const Const IDC_OK As Long = 1 IDC_CANCEL As Long = 2 IDC_HELP As Long = 1038 IDC_APPLY As Long = 1026 IDC_STRIKEOUT As Long = 1040 IDC_UNDERLINE As Long = 1041 IDC_EFFECTS As Long = 1072 IDC_SAMPLE As Long = 1073 IDC_FONT As Long = 1088 IDC_FONTSTYLE As Long = 1089 IDC_SIZE As Long = 1090 IDC_COLOR As Long = 1091

Public Function pAddressOf(ByVal procaddr As Long) As Long

pAddressOf = procaddr End Function

Public Function fFontCallBack(ByVal lnghwnd As Long, ByVal lngMessage As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Dim l As Long If lngMessage = WM_INITDIALOG Then SendMessage lnghwnd, WM_SETTEXT, 0&, "Selectie fonturi" SendMessage lnghwnd, WM_SETICON, 0&, CLng(Form2.Icon) SetDlgItemText lnghwnd, IDC_CANCEL, "Renunta" SetDlgItemText lnghwnd, IDC_STRIKEOUT, "&Taiat" SetDlgItemText lnghwnd, IDC_UNDERLINE, "S&ubliniat" SetDlgItemText lnghwnd, IDC_EFFECTS, "Efecte" SetDlgItemText lnghwnd, IDC_FONTSTYLE, "&Stilul fontului" SetDlgItemText lnghwnd, IDC_SIZE, "&Marime" SetDlgItemText lnghwnd, IDC_SAMPLE, "Exemplu" End If End Function

iar intr-o forma cu un buton (command1) si un text-box (text1) scriem:


Private Declare Function CHOOSEFONT Lib "comdlg32.dll" Alias "ChooseFontA" _ (pChoosefont As CHOOSEFONT) As Long Private ByVal Private Private Private Declare dwBytes Declare Declare Declare Function As Long) Function Function Function

GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _ As Long GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Lon

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Private Declare Function GetDeviceCaps& Lib "gdi32" (ByVal hdc&, ByVal nIndex&) 'constants for API memory functions Private Const GMEM_MOVEABLE = &H2 Private Const GMEM_ZEROINIT = &H40 Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT) Private Private Private Private Const Const Const Const cdlCFBoth = &H3& cdlCFScreenFonts = &H1& cdlCFTTOnly = &H40000 cdlCFEnableHook = &H8&

Private Const LF_FACESIZE = 32 Private Const FW_BOLD = 700 Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte

'lfFaceName(LF_FACESIZE) As Byte lfFaceName As String * LF_FACESIZE End Type Private Type CHOOSEFONT lStructSize As Long hwndowner As Long hdc As Long lpLogFont As Long iPointSize As Long FLAGS As Long rgbColors As Long lCustData As Long lpfnHook As Long lpTemplateName As String hInstance As Long lpszStyle As String nFontType As Integer MISSING_ALIGNMENT As Integer nSizeMin As Long nSizeMax As Long End Type

Private Sub Command1_Click() Dim df As CHOOSEFONT Dim f As LOGFONT Dim l As Long Dim lLogFontSize As Long Dim lMemHandle As Long Dim lLogFontAddress As Long f.lfHeight = Text1.Font.Size / (72 / GetDeviceCaps(hdc, 90)) * -1 f.lfFaceName = Text1.FontName & Chr(0) f.lfItalic = IIf(Text1.FontItalic, 1, 0) f.lfUnderline = IIf(Text1.FontUnderline, 1, 0) f.lfStrikeOut = IIf(Text1.FontStrikethru, 1, 0) f.lfWeight = IIf(Text1.FontBold, FW_BOLD, 0) lLogFontSize = Len(f) lMemHandle = GlobalAlloc(GHND, lLogFontSize) If lMemHandle = 0 Then Exit Sub End If lLogFontAddress = GlobalLock(lMemHandle) If lLogFontAddress = 0 Then Exit Sub End If Call CopyMemory(ByVal lLogFontAddress, f, lLogFontSize) df.rgbColors = Text1.ForeColor df.lpLogFont = lLogFontAddress df.FLAGS = cdlCFScreenFonts Or &H100& Or &H40& Or cdlCFEnableHook 'Or cdlCFTTOnl df.lpfnHook = pAddressOf(AddressOf fFontCallBack) df.lStructSize = Len(df) df.hwndowner = hwnd l = CHOOSEFONT(df) If l <> 0 Then Call CopyMemory(f, ByVal lLogFontAddress, lLogFontSize) Text1.FontName = f.lfFaceName Text1.FontSize = CLng(df.iPointSize / 10) Text1.FontBold = (f.lfWeight >= FW_BOLD) Text1.FontItalic = (f.lfItalic = 1) Text1.FontStrikethru = (f.lfStrikeOut = 1)

Text1.FontUnderline = (f.lfUnderline = 1) Text1.ForeColor = df.rgbColors End If End Sub

Si la acest dialog se folosesc pointerii pt. ca unul din elemetele structurii CHOOSEFONT este nevoie de functiile API GlobalAlloc, GlobalLock, GlobalFree si CopyMemory. Mai intii comple selectat la aparitia dialogului iar apoi completam elemetele structurii CHOOSEFONT. De asemenea, pentru a activa subclasificarea dialogului in membrul FLAGS al structurii CHOO CF_ENABLEHOOK (cdlCFEnableHook). In acelasi loc se poate specifica si alte setari, de ex. da (cdlCFTTOnly). Dupa apelul functiei ChooseFont valorile selectate sint copiate inapoi in structura (tipul) LOG gasesc la structura CHOOSEFONT nu la LOGFONT.

5. Print, Print Setup - pentru a utiliza aceste dialoguri folosind functiile API PrintDlg se poate co acest exemplu nu subclasifica dialogul. Toate incercarile mele de a subclasifica acest dialog au fost trimite-ti si mie un exemplu de subclasificare al acestui dialog (tratind mesajul WM_INITDIALOG

6. Help - desi la CommonDialog este metoda ShowHelp cu ajutorul caruia se poate afisa un fisier zis si nu avem de ce sa-l subclasificam pentru a schimba caption-ul controalelor pentru ca nu are co API WinHelp fara utilizarea controlului dialog (si fara comdlg32.ocx) ca mai jos (nu avem nevoie

Private Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Lo ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As L Private Private Private Private Private Private Private Private Private Private Private Private Private Private Const Const Const Const Const Const Const Const Const Const Const Const Const Const HELP_COMMAND = &H102& HELP_CONTENTS = &H3& HELP_CONTEXT = &H1 HELP_CONTEXTPOPUP = &H8& HELP_FORCEFILE = &H9& HELP_HELPONHELP = &H4 HELP_INDEX = &H3 HELP_KEY = &H101 HELP_MULTIKEY = &H201& HELP_PARTIALKEY = &H105& HELP_QUIT = &H2 HELP_SETCONTENTS = &H5& HELP_SETINDEX = &H5 HELP_SETWINPOS = &H203&

' ' ' ' ' '

Display topic in ulTopic

Display help on using help Display index Display topic for keyword in offabD Terminate help

Set current Index for multi index h

Private Sub Command1_Click() WinHelp hwnd, "c:\cale\help.hlp", HELP_CONTENTS, 0& End Sub

Acelasi lucru se obtinea punind un CommonDialog pe o forma si scriind:


Private Sub Command1_Click() CommonDialog1.HelpFile = "c:\cale\help.hlp" CommonDialog1.HelpCommand = cdlHelpContents CommonDialog1.ShowHelp End Sub

ai multe fiiere surs. Un fiier surs prevede definirea i implementarea de clase, structuri, module si interfete, care conin n cele din urm tot codul.

Elemente de programare la nivel de fiier Cnd ncepe un proiect sau fiier i deschidei editorul de cod, vei vedea un cod deja n vigoare i, n ordinea corect. Orice cod care scrie ar trebui s urmeze urmtoarea secven: 1. Declaraii Opiunea 2. Declaraii Importuri 3. Declaraiile de spaiu de nume i elemente de spaiu de nume la nivel Dac introducei declaraii ntr-o ordine diferit, erori de compilare poate avea ca rezultat. Un program poate conine, de asemenea, declaraii compilare condiionat. Putei amesteca acestea, n fiierul surs, printre declaraiile secvena precedent.

Declaraii Opiunea
Declaraii Opiunea s stabileasc reguli de baz de cod ulterioare, ajutnd la prevenirea sintaxa i erori logice. Declaraie explicit Opiunea (Visual Basic) se asigur c toate variabilele sunt declarate i scrise corect, ceea ce reduce timpul de depanare. Declaraia strict Opiunea ajut pentru a minimiza erorile de logic i pierderea de date care poate aprea atunci cnd lucrai ntre variabile de diferite tipuri de date. Opiunea Compara Declaratie specific modul n care siruri de caractere sunt comparate ntre ele, fie pe baza binare sau valori text.

Importuri Declaraii
Putei include o declaraie Importurile de a importa nume definite n afara proiectului. O declaraie Importurile permite codul de clase i alte tipuri definite n spaiul de nume importate, fr a le califica. Putei folosi ct mai multe declaraii Import, dup caz. Pentru mai multe informaii, consultai Referine i declaraia Importuri .

Declaraii de spaiu de nume


Spaii de nume ajuta s v organizai i clasifica elementele de programare pentru uurina de grupare i accesarea. Putei utiliza Declaraia Spaiul s clasifice urmtoarele afirmaii ntr-un anumit spaiu de nume. Pentru mai multe informaii, consultai Spaii de nume n Visual Basic .

Declaraii compilare condiionat


Declaraii compilare condiionat pot aprea aproape oriunde n fiierul surs. Acestea provoac pri de cod pentru a fi incluse sau excluse n momentul compilrii, n funcie de anumite condiii. Putei, de asemenea, s le utilizeze pentru depanarea cererea dumneavoastr, deoarece codul condiionat ruleaz n modul depanare numai. Pentru mai multe informaii, consultai condiionat elaborare general . Elemente de programare spaiu de nume-Level

Clase, structuri, i module conin toate codul n fiierul surs. Acestea sunt elemente de spaiu de nume de nivel, care pot aprea ntr-un spaiu de nume sau la nivel fiierul surs. Ei susin declaraiile de toate celelalte elemente de programare. Interfee, care definesc semnturi de elemente, dar nu ofer implementare, apar, de asemenea, la nivel de modul. Pentru mai multe informaii cu privire la elementele la nivel de modul, consultai urmtoarele:

Declaraie de clas (Visual Basic) Declaraia structura Declaraia Modulul Declaraie de interfa (Visual Basic)

Elementele de date la nivel de spaiu de nume sunt enumerrile i delegai. Elemente de programare la nivel de modul Proceduri, operatori, proprieti, i evenimente sunt singurele elemente de programare, care poate stoca cod executabil (declaraii care efectueaz aciuni de la momentul execuiei). Acestea sunt elemente la nivel de modul de program. Pentru mai multe informaii cu privire la elementele de procedura de nivel, consultai urmtoarele:

Declaraia funcie (Visual Basic) Declaraia Sub (Visual Basic) Declara Declaraie Declaraia operatorul Declaraie de proprietate Declaraia eveniment

Elementele de date la nivel de modul sunt variabile, constante, enumerrile, i delegai. Elemente de programare procedura de nivel Cele mai multe dintre coninutul de elemente procedurii de nivel sunt declaratii executabile, care constituie codul de run-time a programului. Toate cod executabil trebuie s fie ntr-o procedur (Function, sub, Operator, te, Set, AddHandler, RemoveHandler, RaiseEvent). Pentru mai multe informaii, consultai instruciunile executabile . Elementele de date la nivel de proceduri sunt limitate la variabile locale i constante. Procedura principal Procedura principal este primul cod pentru a rula atunci cnd cererea a fost ncrcat principal servete ca punct de plecare i de control general pentru aplicaia dumneavoastr.. Exist patru tipuri de principal:
Sub Main () Sub Main (ByVal cmdArgs () Ca String) Funcia principal () ca integer

Funcia principal (ByVal cmdArgs () Ca String) ca integer

Cea mai frecvent varietate a acestei proceduri este Sub Main (). Pentru mai multe informaii, consultai Procedura principal n Visual Basic . A se vedea de asemenea

Concepte Visual Basic Versiunea de Hello, World Procedura principal n Visual Basic Visual Basic Conveniile de denumire Limitri Visual Basic

Opiunea declaraie explicit (Visual Basic)


Visual Studio 2005 Alte versiuni

51 din 79 evaluat acest ajutor - Voteaza acest subiect Foreaz declaraie explicit a tuturor variabilelor ntr-un fiier.
Opiunea explicit {On | Off}

Piese de schimb Pe Opional. Foloseste optiunea verificarea explicit. Dac On sau Off nu este specificat, implicit este On. De pe Opional. Dezactiveaz opiunea de verificare explicit. Observaii Dac este utilizat, declaraie explicit opiune trebuie s apar ntr-un fiier nainte de orice alte declaraii de cod surs. Cnd Opiunea explicit apare ntr-un fiier, trebuie s declare n mod explicit toate variabilele folosind declaraiile Dim sau ReDim. Dac ncercai s utilizai un nume de variabil nedeclarate, apare o eroare n timpul compilrii.

Utilizai opiunea explicit a evita tastarea incorect numele unei variabile existente sau pentru a evita confuzia n cod n cazul n care domeniul de aplicare al variabilei nu este clar. Dac nu folosii declaraie explicit opiune, toate variabilele nedeclarate sunt de tip obiect. Nota Implicit compilator este o opiune explicit, dac nu se specific Opiunea explicit n codul. Putei seta, de asemenea, opiunea explicit n mediul Visual Studio integrat de dezvoltare (IDE), sau pe o linie de comand.

Pentru a seta opiunea explicit n mediul de dezvoltare integrat (IDE)


1. 2. 3. 4. n meniul Instrumente, selectai Opiuni. Deschide proiecte i nod Solutions. Alegei Defaults VB. Modifica setarea explicit Option.

Pentru a seta opiunea explicit cu privire la linia de comand

Includei / optionexplicit opiunea compilator n comanda VBC.

Exemplu Urmtorul exemplu utilizeaz declaraie explicit Opiunea de a fora declaraie explicit a tuturor variabilelor. ncercarea de a folosi o variabil nedeclarate produce o eroare n timpul compilrii. VB
"Fora declaraie variabil explicit. Opiunea explicite privind

VB
ThisVar Dim Ca Integer thisVar = 10 "Urmtoarea misiune produce o eroare de compilare, deoarece "Variabila nu este declarat i opiunea explicit este On. thisInt = 10 'face EROARE

A se vedea de asemenea

Trimitere Declaraia Dim (Visual Basic) ReDim Declaraie (Visual Basic) Opiunea Compara Declaratie Opiunea Declaraie Strict / Optioncompare / Optionexplicit

/ Optionstrict Implicite Visual Basic, Proiecte, Opiuni caseta de dialog

Intrri comunitare
ADD

Opiunea Declaraie Strict


Visual Studio 2005 Alte versiuni

23 din 37 evaluat acest ajutor - Voteaza acest subiect Restricioneaz implicite conversiile de tipuri de date la conversii doar lrgirea.
Opiunea strict {On | Off}

Piese de schimb Pe Opional. Foloseste optiunea verificarea strict. De pe Opional. Dezactiveaz Opiunea verificarea strict. Dac On sau Off nu este specificat, implicit este Off. Observaii Dac este utilizat, declaraia Strict opiune trebuie s apar ntr-un fiier nainte de orice alte declaraii de cod surs. Visual Basic permite conversia de mai multe tipuri de date la alte tipuri de date. Pierderea de date pot aprea atunci cnd valoarea de un tip de date este convertit la un tip de date cu mai puin de precizie sau de capacitate mai mic. O eroare de run-time apare n cazul n care o astfel de conversie prin trunchiere nu Option Strict asigur notificare de compilare a acestor conversii ingustarea astfel nct s poat fi evitate.. n plus fa de refuzare conversii implicite ingustarea, Option Strict genereaz o eroare pentru sfritul obligatoriu. Un obiect este trziu legat atunci cnd este atribuit unei variabile care este declarat a fi de tip obiect.

Deoarece Opiunea stricte cu privire asigur tastarea puternic, previne conversii de tip nedorite cu pierderea de date, nu permite tarziu obligatorii, i mbuntete performanele, utilizarea sa este foarte recomandat. Nota Implicit compilator este opiunea Off strict, dac nu se specific Opiunea stricte n codul. Putei seta, de asemenea, opiunea strict n mediul Visual Studio integrat de dezvoltare (IDE), sau pe o linie de comand.

Pentru a seta opiunea strict n mediul de dezvoltare integrat (IDE)


1. 2. 3. 4. n meniul Instrumente, selectai Opiuni. Deschide proiecte i nod Solutions. Alegei Defaults VB. Modifica setarea Strict Option.

Pentru a seta opiunea stricte cu privire la linia de comand

Includei / optionstrict opiunea compilator n comanda VBC.

Exemplu Urmtorul exemplu demonstreaz modul n care opiunea nu permite Declaraie de stricte trziu caracter obligatoriu i conversii n care datele vor fi pierdute. VB
Opiunea stricte cu privire la

VB
ThisVar Dim Ca Integer ThisObj Dim ca obiect = New widget variabila declarat thisVar = 1000 "nu genereaz eroare. "ncercarea de a converti Double la ntreg genereaza o eroare de compilare. thisVar = 1234567890.9876542 "Cauzele Eroare "Apel Late-legat genereaz o eroare de compilare. Call thisObj.Method1 () "Cauzele Eroare

A se vedea de asemenea

Trimitere Opiunea Compara Declaratie Opiunea declaraie explicit (Visual Basic) / Optioncompare / Optionexplicit / Optionstrict Implicite Visual Basic, Proiecte, Opiuni caseta de dialog

Concepte Lrgirea i ngustarea Conversii

Crearea unei macrocomenzi


Ascundere total Crearea unei macrocomenzi se face prin utilizarea nregistratorului de macrocomenzi pentru a nregistra o secven de aciuni, sau prin introducerea de cod Visual Basic pentru Aplicaii n Editor Visual Basic. Avei posibilitatea de a utiliza ambele metode. Avei posibilitatea de a nregistra anumii pai i de a i mbunti prin cod suplimentar. Prin nregistrarea pailor 1. Din meniul Instrumente, poziionai-v pe Macrocomand i apoi facei clic pe nregistrare macrocomand nou. 2. n caseta Nume macrocomand, tastai un nume pentru macrocomand. 3. n caseta Memorare macrocomand n, facei clic pe ablonul sau pe documentul n care dorii s memorai macrocomanda. 4. n caseta Descriere, tastai descrierea macrocomenzii. 5. Dac nu dorii s asociai macrocomanda unei bare de instrumente, unui meniu sau unor taste de comenzi rapide, facei clic pe OK pentru a ncepe nregistrarea macrocomenzii. Pentru a asocia macrocomanda unei bare de instrumente sau unui meniu, facei clic pe Bare de instrumente, apoi facei clic pe fila Comenzi. n caseta Comenzi, facei clic pe macrocomanda pe care o nregistrai i glisai-o pe bara de instrumente, sau pe meniul cu care dorii s o asociai. Facei clic pe nchidere pentru a ncepe nregistrarea macrocomenzii. Pentru a asocia macrocomanda unei taste de comenzi rapide, facei clic pe Tastatur. n caseta Comenzi, facei clic pe macrocomanda pe care o nregistrai. n caseta Se apas noua tast de comenzi rapide, tastai secvena de taste apoi facei clic pe Asociere. Facei clic pe nchidere pentru a ncepe nregistrarea macrocomenzii. 6. Realizai aciunile pe care dorii s le includei n macrocomand. Cnd nregistrai o macrocomand, utilizai mausul pentru a face clic pe comenzi i opiuni, dar nu pentru a selecta text. Trebuie s utilizai tastatura pentru a nregistra aceste aciuni. De exemplu, utilizai F8 pentru a selecta text i apsai END pentru a muta cursorul la sfritul liniei. 7. Pentru a ntrerupe nregistrarea macrocomenzii, facei clic pe Oprire nregistrare Utiliznd Visual Basic pentru Aplicaii 1. Din meniul Instrumente, selectai Macrocomand i apoi facei clic pe Macrocomenzi. .

2. n lista Macrocomenzi n, facei clic pe ablonul sau pe documentul n care dorii s memorai macrocomanda. 3. n caseta Nume macrocomand, tastai un nume pentru macrocomand. 4. Facei clic pe Creare pentru a deschide editorul Visual Basic. Not Dac dai unei macrocomenzi noi acelai nume cu o comand predefinit din Microsoft Word, noua aciune a macrocomenzii va nlocui aciunile existente. Pentru a vizualiza o list a macrocomenzilor predefinite din Word, selectai Macrocomand din meniul Instrumente i apoi facei clic pe Macrocomenzi. n lista Macrocomenzi n, facei clic pe Comenzi Word.

Mecanisme de transfer a argumentelor unei proceduri in VB.NET


No comments O procedura [...] este invocata, apelata, intr-un context dat. Procedura executa secventa de cod sursa in mod repetat, utilizand date diferite la fiecare invocare a sa. Datele utilizate sunt reprezentate de variabile [...], constante si expresii transferate in procedura. Parametrul reprezinta o valoare pe care procedura o asteapta la momentul invocarii. Definirea unei proceduri presupune si eventuala definire a listei de parametri. Argumentul reprezinta valoarea furnizata parametrului procedurii la momentul invocarii acesteia. Argumentele reprezinta elemente cu valori diferite pentru invocari diferite ale procedurii.

Transferul argumentelor unei proceduri VB.NET se realizeaza prin doua mecanisme:


prin valoare; prin referinta.

Prin mecanismul de transfer, se stabileste daca procedura modifica elementul reprezentat de argumentul transferat procedurii. Definirea listei de parametri stabileste mecanismul de transfer al argumentelor la momentul invocarii procedurii. Astfel, transferul prin valoare presupune declararea parametrului cu specificatia ByVal, iar transferul prin referinta consta in definirea parametrului cu ByRef. La transferul unui argument intr-o procedura, trebuie sa aiba in vedere urmatoarele aspecte:

elementul reprezentat de argumentul transferat poate fi sau nu modificat; argumentul insusi este sau nu modificat; argumentul este transferat prin valoare sau referinta; tipul de date al argumentului este un tip valoare sau tip referinta.

Criterii de selectie a mecanismului de transfer a argumentelor unei proceduri:

protectie: se considera expunerea la schimbare a variabilei de apel; transferul prin referinta ByRef consta in returnarea unei valori catre codul apelator prin argument;

avantajul transferului ByVal consta in protectia variabilei transferate la modificarile din secventa executabila a procedurii; performanta: transferul prin valoare presupune copierea argumentului; astfel, pentru valori mari ale datelor transferate este mai eficient mecanismul de transfer prin referinta.

Situatii de utilizare a argumentelor transferate prin valoare:


elementul de programare transferat catre procedura nu este modificabil; elementul transferat este modificabil, dar procedura nu trebuie sa modifice valoarea acestuia; doar codul apelator poate schimba valoarea elementului transferat.

Situatii de utilizare a argumentelor transferate prin referinta:


procedura necesita modificarea elementului reprezentat de argument; executia corecta a aplicatiei depinde de valorile modificate de procedurile invocate.

Cele doua proceduri incluse in aplicatia Console Application de mai jos exemplifica mecanismele de transfer prin valoare si referinta a argumentelor unei proceduri.
Module Module1 Function SumaFct(ByVal x As Integer, ByVal y As Integer) As Long Dim z As Long z = x + y Return z End Function Sub SumaProc(ByVal x As Integer, ByVal y As Integer, ByRef z As Long) z = x + y End Sub Sub Main() Dim c As Long c = SumaFct(10, 11) MsgBox("c = " & c) MsgBox("Suma este: " & SumaFct(12, 13)) SumaProc(14, 15, c) MsgBox("Noul c = " & c) End Sub End Module

Cele doua mecanisme de transfer coexista in aceeasi procedura. In cazul procedurii Function, se observa ca cei doi parametri sunt transferati prin valoare. Rezultatul prelucrarilor este transferat inapoi in codul apelator cu ajutorul specificatiei Return, intrucat variabila locala nu mai exista la revenirea in codul apelator. Valoarea acesteia este salvata intr-o noua locatie sau este utilizata direct in alte expresii de calcul. In cazul procedurii Sub, lista parametrilor este suplimentat cu unul transferat prin referinta. La invocare, acesta este reprezentat de un argument de tip variabila care va surprinde modificarea efectuata in cadrul procedurii. Astfel, rezultatul prelucrarilor este referit direct prin denumirea variabilei c.

Definirea procedurilor de tip proprietate in VB.NET


1 comment -

In VB.NET, procedura proprietate reprezinta secventa de cod sursa de manipulare a unei caracteristici intr-un modul [...], clasa de obiecte [...] sau structura [...]. VB.NET pune la dispozitie urmatoarele proceduri de tip proprietate:

Get: returneaza valoarea caracteristicii; caracteristica este accesata printr-o expresie; Set: stabileste valoarea caracteristicii, incluzand referinta de obiect; este invocata pentru atribuirea unei valori pentru o proprietate.

Proprietatile sunt definite in perechi de proceduri Get si Set, dar nu obligatoriu. Pot exista definite doar proprietati Get sau proprietati Set. Implicit, proprietatile au asociat modificatorul de acces Public [...], ceea ce inseamna ca pot fi apelate din orice punct al aplicatiei. Mecanismul de transfer al parametrilor este cel prin valoare implementat prin specificatia ByVal. Implementarea proprietatilor se realizeaza prin specificatiile Property si End Property. Get si Set se definesc in mod similar procedurilor [...].
Dim a As Integer Property aProp() Get Return a End Get Set(ByVal value) If value < 0 Then a = 0 Else a = value End If End Set End Property

Exemplul de mai sus creeaza o proprietate read/write. Proprietatea Get extrage valoarea variabilei a, iar proprietatea Set asociaza variabilei a o valoarea stocata de parametrul value, in functie de valoarea acestui parametru. O proprietate este invocata atunci cand denumirea acesteia apare intr-o expresie, in mod similar utilizarii unei variabile. De exemplu, procedura Get este invocata astfel:
... a = 10 Dim x As Integer x = aProp MsgBox("x=" & x) ...

Se observa ca viaribila a este referita direct prin atribuirea:


a = 10

Valoarea lui a poate fi schimbata si prin intermediul urmatoarei secvente de cod sursa:
... x = x + 13 aProp = x MsgBox("a=" & aProp) MsgBox("a=" & a)

...

Efectul executiei codului sursa de mai sus consta in modificarea valorii variabilei a prin invocarea implicita a proprietatii Set. Cele doua apeluri ale MsgBox au acelasi efect, respectiv afisarea noii valori a variabilei a prin invocarea proprietatii Get, respectiv prin referirea directa a variabilei a. Solutions and tutorials for IT&C development

Home Posts list About

JavaScript Injection How to: Create a Table Object in a Database Microsoft Access 2003

Definirea modulelor in VB.NET


7 comments Un modul reprezinta unul dintre elementele de programare care contin cod sursa ce urmeaza a fi compilat si executat. Un element similar de programare este clasa de obiecte [...]. Spre deosebire de modul, clasa de obiecte poate fi adaptata cerintelor particulare ale dezvoltatorilor prin implementarea mostenirii. Modulul este implementat cu ajutorul specificatiilor Module si End Module.
Module Module1 Structure Persoana Dim CNP As String Dim Nume As String Dim Adresa As String End Structure Sub Main() Dim p As Persoana p = New Persoana p.CNP = "1801010433012" p.Nume = "Popescu Gigel" p.Adresa = "Bld. Victoriei nr. 13" MsgBox(p.Nume & " are domiciliul " & p.Adresa) End Sub End Module

In exemplul anterior, modulul Module1 include procedura Main ce reprezinta punctul de intrare in aplicatie. Mediul Visual Studio include automat un modul cu procedura Main atunci cand se creeaza o aplicatie de tip Console Application. De asemenea, modulul include definirea unei structuri denumita Persoana.

Compilatorul genereaza eroare in cazul aplicatia Console Application nu gaseste procedura Main definita intr-un modul sau clasa de obiecte. In cazul in care procedura Main este definita in clasa de obiecte si nu intr-un modul, atunci Main se defineste ca metoda Shared, ceea ce inseamna ca respectiva clasa nu trebuie sa fie instantiata. Solutions and tutorials for IT&C development

Home Posts list About

Definirea unui ansamblu in VB.NET Solution for A potentially dangerous Request.Form value was detected from the client

Definirea procedurilor in VB.NET


2 comments Procedura reprezinta un bloc de specificatii VB.NET incluse intr-o declaratie precum: Function, Sub, Operator, Get si Set. Toate specificatiile executabile VB.NET sunt incluse intr-o procedura. Invocarea unei proceduri este cunoscuta si sub denumirea de apel de procedura si reprezinta momentul lansarii in executie a specificatiilor incluse in respectiva procedura. La sfarsitul executiei codului din procedura, controlul executiei se preda codului in punctul in care procedura a fost invocata. Predarea controlului catre codul apelator se efectueaza astfel:

specificatia Return: controlul este predat imediat codului apelator; pot exista mai multe specificatii return intr-o procedura; specificatia Exit Sub sau Exit Function: predarea imediata a controlului catre codul apelator; pot exista mai multe astfel de specificatii si pot fi combinate cu specificatii de Return; daca Return sau Exit Sub/Exit Function lipsesc din codul unei proceduri, atunci specificatiile End Sub, End Function, End Get sau End Set inchid executia procedurii, apelul fiind predat imediat catre codul sursa apelator.

O procedura este definita cu zero, unul sau mai multi parametri ce reprezinta valori asteptate a fi transferate in procedura. La invocare, lista de parametri este pusa in corespondenta cu lista de argumente. Argumentul reprezinta valoarea transferata corespunzator parametrului, la invocarea unei proceduri. Tipuri de proceduri definite in VB.NET:

Sub: executa actiuni, dar nu returneaza nici o valoarea codului apelator;


Sub Integer, ByVal y As Integer, ByRef z As Long)

'definire procedura Sub Adun(ByVal x As z = x + y End Sub ... 'invocare procedura Dim a, b As Integer Dim c As Long a = 11 b = 13 Adun(a, b, c) MsgBox("Suma este:" ...

Sub

& c)

handler de eveniment [...]: procedura Sub executa la transmiterea mesajului asociat producerii unui eveniment [...];

'definire handler de eveniment Public Sub OpDiferenta(ByVal a As Integer, ByVal b As Integer) Dim dif As Integer dif = a - b MsgBox("Diferenta este: " & CStr(dif)) End Sub 'definirea unui eveniment Public Event Calcul(ByVal x As Integer, ByVal y As Integer) 'definire procedura de asociere eveniment-handler eveniment Public Sub SetUpEventHandlerDif(ByVal a As Integer, ByVal b As Integer) AddHandler Calcul, AddressOf OpDiferenta End Sub ... 'prima invocare a handler-ului de eveniment RaiseEvent Calcul(x, y) 'a doua invocare a handler-ului de eveniment RaiseEvent Calcul(x, y) ...

Function: executa actiuni si returneaza o valoare catre codul apelator;

'definire procedura Function Function Dif(ByVal x As Integer, ByVal y As Integer) As Long Return x - y End Function ... 'invocare procedura Function Dim a, b As Integer Dim c As Long a = 11 b = 13 c = Dif(a, b) MsgBox("Diferenta este:" & c) ...

Property: returneaza si asociaza valori proprietatilor obiectelor sau modulelor [...];

'definire clasa de obiecte Sir

Public Class Sir Private s As String Public Sub New(ByVal x As String) s = x End Sub Public Property sirChar() Get Return s End Get Set(ByVal value) s = value End Set End Property End Class ... 'invocare procedura Property Dim obA, obB As Sir obA = New Sir("Primul sir.") obB = New Sir("Al doilea sir.") MsgBox(obA.sirChar) obB.sirChar = obA.sirChar MsgBox(obB.sirChar) ...

Operator: defineste comportamentul standard al unui operator atunci cand operandul sau operanzii sunt clase de obiecte [...] sau structuri [...] definite de utilizator;

'definire clasa de obiecte Sir Public Class Sir Public s As String Public Sub New(ByVal x As String) s = x End Sub Public Shared Operator +(ByVal x As Sir, ByVal y As Sir) As Sir Dim rez As New Sir("") rez.s = x.s & y.s Return rez End Operator End Class ... 'invocare procedura Operator Dim obA, obB As Sir obA = New Sir("Primul sir.") obB = New Sir("Al doilea sir.") Dim ObRez As Sir ObRez = obA + obB MsgBox(ObRez.s) ...

generice: definesc unul sau mai multi parametri de tip in plus fata de lista de parametri; la invocare sunt transferate tipuri de date specifice.

'definire procedura generica Public Sub Proc(Of t)(ByVal x As t) End Sub ...

'invocare procedura generica Proc(15) 'Tipul argumentului transferat se determina la momentul executiei ...

Avantaje ale structurarii codului in proceduri:


impartirea aplicatiei in componente logice: usurinta de dezvoltare si depanare; reutilizarea procedurilor: mai multe aplicatii pot utiliza aceleasi proceduri cu eventuale modificari minime ale codului acestora.

Solutions and tutorials for IT&C development

Home Posts list About

Definirea interfetelor in VB.NET Definirea si referirea unei structuri in VB.NET

Implementarea interfetelor in VB.NET


1 comment - This post in english Implementarea unei interfete in limbajul VB.NET se realizeaza prin cuvantul rezervat Implements. Interfetele pot fi implementate de catre clase de obiecte [...] si structuri [...]. O clasa de obiecte sau o structura pot implementa una sau mai multe interfete, separate prin operatorul , in VB.NET. Lista de interfete implementate de clasa de obiecte/structura este data prin denumirile asociate acestora la definire [...]. In secventa de cod sursa VB.NET de mai jos, este exemplificata implementarea unei interfete in VB.NET:
Module Module1 Interface IOperatii Event Calcul(ByVal x As Integer, ByVal y As Integer) Function OpDiferenta(ByVal a As Integer, ByVal b As Integer)_ As Integer Function OpProdus(ByVal a As Integer, ByVal b As Integer) As Long End Interface Class COperatiiBin Implements IOperatii Public Event CalculOp(ByVal x As Integer, ByVal y As Integer)_

Implements IOperatii.Calcul Public Function Dif(ByVal a As Integer, ByVal b As Integer)_ As Integer Implements IOperatii.OpDiferenta Return a - b End Function Public Function Prod(ByVal a As Integer, ByVal b As Integer)_ As Long Implements IOperatii.OpProdus Return a * b End Function End Class Sub Main() Dim x, y, w As Integer x = 10 y = 8 Dim z As Long Dim OCalcul As New COperatiiBin z = OCalcul.Prod(x, y) w = OCalcul.Dif(x, y) MsgBox("Diferenta este: " &amp; w &amp; " Produsul este: " &amp; z) End Sub End Module

In exemplul de mai sus, se observa urmatoarele:


definirea interfetei IOperatii; declararea implementarii interfetei de catre clasa de obiecte COperatiiBin prin specificatia Implements IOperatii; implementarea evenimentului prin CalculOp si a celor doua functii prin metodele Dif, respectiv Prod; se observa ca la declararea acestora trebuie precizat elementul implementat din interfata prin specificatiile Implements IOperatii.Calcul, Implements IOperatii.OpDiferenta si Implements IOperatii.OpProdus; evenimentul si cele doua metode respecta intocmai prototipurile definite in interfata IOperatii; clasa de obiecte nu contine alte elemente definite aditional interfetei implementate IOperatii.

Aplicatia contine procedura Main, fiind una de tipul Console Application. Solutions and tutorials for IT&C development

Home Posts list About

Transmiterea mesajului asociat unui eveniment definit in VB.NET Implementarea interfetelor in VB.NET

Definirea interfetelor in VB.NET


2 comments - This post in english Interfata reprezinta o multime de definitii privind proprietati, metode si evenimente. Spre deosebire de clasele de obiecte [...], interfetele nu contin partea de implementare. Interfetele sunt implementate [...] de catre clasele de obiecte, dar se definesc ca entitati separate de acestea. O clasa de obiecte care implementeaza o interfata trebuie sa implementeze toate elementele definite in acea interfata. Definirea unei interfete VB.NET se realizeaza cu ajutorul cuvantului rezervat Interface, iar implementarea interfetei cu ajutorul cuvantului rezervat Implements. La definirea unei interfete se pot prelua specificatii definite in alte interfete. Mostenirea elementelor definite in alte componente se implementeaza in limbajul VB.NET cu specificatia Inherits. Intr-un namespace [...], interfetele au asociat implicit modificatorul de acces Friend [...], iar cele definite in clase de obiecte, module, interfete si structuri au asociat implicit modificatorul de acces Public. Interfata reprezinta un instrument puternic de programare, intrucat separa definitia obiectelor de partea de implementare. Situatii in care se recomanda definirea de interfete:

clase de obiecte cu nivel de ortogonalitate ridicat: implementare pe scara redusa a mostenirii la definirea claselor de obiecte; flexibilitate ridicata: o clasa de obiecte poate implementa mai multe interfete; nu se doreste mostenirea implementarii dintr-o clasa de baza; nu se poate utiliza mostenirea in cazul claselor de obiecte: structurile [...] nu pot mosteni clase de obiecte, dat pot implementa interfete.

Exemplu de implementare in cod sursa VB.NET a definirii unei interfete:


Interface IOperatii Event Calcul(ByVal x As Integer, ByVal y As Integer) Function OpDiferenta(ByVal a As Integer, ByVal b As Integer) As Integer Function OpProdus(ByVal a As Integer, ByVal b As Integer) As Long End Interface

In exemplul anterior, definirea interfetei IOperatii s-a realizat cu ajutorul cuvantului rezervat Interface si s-a incheiat cu specificatia End Interface. Interfata IOperatii defineste un eveniment denumit Calcul si doua proceduri de tip Function denumite OpDiferenta, respectiv OpProdus. Aplicatia creata cu Visual Studio este de tip Console Application. Acces, Clasa de obiecte, Cod sursa, Definire, Interfata, Mostenire, Namespace, Procedura, Structura, VB.NET

Вам также может понравиться