Documente Academic
Documente Profesional
Documente Cultură
Interfee grafice
1 Microsoft Corporation, The Windows Interface Guidelines for Software Design, Microsoft Press, 1995
Multe dintre interfeele grafice pe care le utilizm, ntre care i Windows, ntrunesc
doar o parte din aceste caracteristici sau pe toate.
La modul cel mai simplu, o interfa grafic este definit prin WIMP - Windows,
Icons, Menus and Pointing device acel tip de interfa-utilizator inventat i
popularizat cu succes de Macintosh n 1970 i imitat ulterior de sistemele Windows ).
Acest gen de interfa grafic se distinge prin faptul c pe ecran apar ferestre, icon-uri
i meniuri i exist un mouse pentru exploatarea acestora. n proiectarea unei GUI,
este esenial ca utilizatorul s vad pe ecran obiectele pe care le-a definit exact aa
cum arat ele i cum se vor obine pe hrtie dac sunt tiprite.
O alt caracteristic fundamental a IGU este asigurat de manipularea direct de
ctre utilizator a obiectelor i informaiilor de pe ecran. Prezentarea grafic a
componentelor nu este suficient ca s dispunem de o interfa grafic. Un icon
constituie o reprezentare grafic pentru un obiect, dar dac utilizatorul nu poate
dect s se uite la el, atunci nu avem n fa o interfa grafic. Manipularea direct
mbrac mai multe forme, n majoritatea cazurilor fiind vorba de un click de mouse
(apsarea unui buton, selecia unei opiuni dintr-o list sau bifarea unui
checkbox), i constituie unul dintre aspectele cheie ale GUI.
Am menionat ntre caracteristicile GUI i utilizarea controalelor grafice. Este vorba
despre acele componente ale interfeei prin care utilizatorul alege, introduce date,
iniiaz aciuni sau navigheaz prin interfaa aplicaiei. Se ncadreaz aici controale
simple, precum casete de validare (checkbox), casete de text (textbox), butoane de
comand sau liste, dar i containere sau casete de dialog(forms) care reunesc mai
multe controale simple. Includerea acestor controale n interfa ine seama de
modelul utilizatorului i de metaforele comune, cunoscute acestuia. Se urmrete de
asemenea utilizarea similar a acestor controale cu alte aplicaii sau medii de lucru
familiare utilizatorilor sau recomandate de standarde. De fapt, standardele
recomand utilizarea acelor controale care valorific experiena utilizatorilor i
folosete memoria asociativ a acestora.Principii de urmat n dezvoltarea
interfeelor grafice
O interfa grafic bine proiectat trebuie s respecte urmtoarele principii :
2
consisten;
estetic;
claritate;
simplitate.
aplicaiile
precedente
(majoritatea
utilizatorii de
aplicaiilor
la
folosesc
elemente de
anterior adoptat.
-
cu
conveniile de interaciune i
fiind
deja
familiarizat cu
acestea.
interfa
furnizate de
nou
aplica ie
consistena cu
metaforele
utilizate.
Se recomand meninerea
cnd utilizatorul apas tasta Enter i pentru fiecare buton de aciune exist i o
combinaie de taste ce poate fi utilizat n lolocul mouse-ului. Riscul este ca
utilizatorul s apese involuntar tasta Enter, lansnd astfel comanda ataat butonului
implicit, sau o combinaie de taste valid care dfeclaneaz comanda asociat unui
anumit buton. n aceste cazuri este esenial un mesaj de avertizare (n special pentru
operaiile distructive).
n plus, utilizatorii sunt adesea tentai s exp loreze o interfa, prin selectarea
"oarb" i "la ntmplare" a comenzilor i opiunilor unei aplicaii , n acest fel
utilizatorii i nsuesc modul de exploatare al unei aplicaii - este metoda numit
"ncercare i eroare" sau nvarea prin descoperire. O interfa bine proiectat
permite descoperirea interactiv a modului de exploatare a! unei aplicaii.
Prevenirea distrugerii datelor sau a blocrii sistemului trebuie asigurat prin mesaje
de avertizare n situaiile n care starea aplicaiei sau datele cu care opereaz aceasta
se pot deteriora i prin reversibilitatea unor aciuni (posibiliti de anulare sau de
recuperare a datelor )
Dac la un moment dat, ntr-un anume context, o opiune sau un submeniu nu se
pot utiliza, cel mai bine este s indicm cumva indisponibilitatea, ntr-un mod distinct
fa de opiunile disponibile (printr-o proprietate de tip Grayed, care las opiunea
vizibil, dar nu permite selectarea ei) i nu s le ascundem. Ascunderea componentelor
l poate bulversa pe utilizator, care ncearc s-i construiasc un model menta! al
funcionrii aplicaiei.
Asocierea de "replici" pentru comenzile unei aplicaii
Conform acestui principiu, o interfa este bine s transmit cte o replic sau un
rspuns pentru fiecare aciune a utilizatorului. Aceast cerin contribuie i ea la
sporirea confortului utilizatorului i ea impune ca aplicaia s confirme (prin replici)
c a preluat cererea utilizatorului i c este n curs execuia aciunii aferente cererii.
Replicile pot fi vizuale sau auditive i trebuie s confirme utilizatorului c aplicaia
rspunde ntr-adevr la aciunile sale. Aceste replici trebuie s apar n timp real,
adic concomitent cu desfurarea operaiei cerute. Puini utilizatori (n fapt, cei
avizai i experimentai) rmn indifereni n faa unui ecran care nu afieaz nici un
mesaj i care nu reacioneaz n nici un fel dac prelucrarea ce se execut la
momentul respectiv dureaz ceva mai mult timp. Cnd este vorba de aciuni de
durat mai mare, replica ce trebuie afiat trebuie s precizeze: starea (derularea)
aciunii n curs (de obicei
precum i modul n care aciunea poate fi suspendat sau anulat. Exist dou
posibiliti de informare a utilizatorului asupra aciunii pe care aplicaia o execut la
un moment dat:
-
Atunci cnd informaia ce trebuie afiat este redus ca dimensiuni, linia de stare a
aplicaiei este suficient pentru afiarea de mesaje. Dac ns este nevoie de afiarea
unui mesaj mai amplu i dac particularitile aciunii n curs permit ntreruperea
i/sau abandonarea acesteia, atunci se recomand s se recurg la o caset de dialog
non-modal care s cuprind att informaiile, ct i butoanele corespunztoare
aciunilor de ntrerupere sau terminare a aciunii n curs.
Estetica
Principiul acesta se refer la proiectarea elementelor vizuale. Interfaa trebuie s
atrag utilizatorul; un mediu de lucru plcut, prietenos contribuie la confortul
utilizatorului i la o mai bun nelegere a informaiei prezentate. Atributele vizuale
furnizeaz
date
preioase
comunic
informaii
importante
cu
privire
la
folosirea de fonturi adecvate - este vorba aici de fontur i uor de citit (spre
xemplu, Times New Roman n loc de Comic Sans MS). De asemenea, atenie
la numrul de fonturi ce se folosesc pe acelai ecran - n nici un caz mai
mult de trei. Se pot obine efecte diferite prin folosirea de atribute (bold,
italic, umbrit) pentru acelai font.
Claritatea
Principiul claritii poate fi discutat din 3 puncte de vedere: vizua l, conceptual,
lingvistic.
Claritatea vizual este asigurat de elementele vizuale (obiectele) care o compun.
Acestea trebuie s fie sugestive, uor de neles, ele reprezentnd n fapt o
transpunere simplificat a unor obiecte reale. De asemenea, este important i
aranjarea obiectelor pe ecran. Opiunile sau comenzile care se grupeaz din punct de
vedere logic trebuie reunite i delimitate de celelalte prin chenare sau cadre, n mod
simiiar, trebuie plasate separat i delimitate ntre ele opiunile ntre care nu exist
legtur.
Claritatea conceptual se caracterizeaz prin dou atribute: simplu i realist'
Simplitatea interfeei nseamn afiarea unui numr rezonabil de obiecte pe ecran
(ntr-o fereastr), iar caracterul realist este asigurat prin similitudinea cu obiectele
reale (de exemplu, dac o fereastr prezint o factur, este de dorit ca obiectele care
o descriu s reproduc ct se poate de exact aspectul acesteia).
Claritatea lingvistic se refer la textul ce apare n interfa. Denumirile opiunilor
de meniu, mesajele, opiunile, etc. trebuie s fie clare, neambigue. Textul pe care l
afim pe ecran este o surs principal de informare a utilizatorilor, de aceea ar trebui
s se utilizeze cuvinte sau propoziii ntregi, nu prescurtri. Mesajele trebuie s fie
formulate categoric i fr ambiguiti. Spre exemplu, la operaiunea de introducere a
codului clientului, dintre urmtoarele dou mesaje "Lungimea codului de client este de 5
caractere!", "Ai introdus o valoare eronat!" ar trebui utilizat primul, altfel utilizatorul va
fi derutat, pentru c nu are cum s intuiasc ce anume se dorete de la el.
Simplitate
O interfa trebuie s fie simpl, uor de nvat i exploatat. Ea trebuie s permit
accesul facil la toate funcionalitile oferite de aplicaie. Este recomandat reducerea
informaiilor prezentate n interfa la strictul necesar unei comunicri eficiente
(trebuie evitate descrierile detaliate, frazele stufoase sau irelevante). Important este
i aranjarea i prezentarea elementelor interfeei (se vor folosi semantici i ordini de
reprezentare naturale).
Maximizarea funcionalitii unei aplicaii intr n contradicie cu simplitatea cerut,
dar cele dou aspecte pot fi echilibrate printr-o proiectare corespunztoare.
O metod recomandat, mai ales pentru aplicaiile cu grad mare de complexitate,
este metoda descoperirii progresive. Aceast metod se bazeaz pe dou aspecte:
-
determinarea cerinelor;
testare
4.2.1.
meniu,
tere persoane, clase pe care le utilizm (de obicei prin intermediul unei alte interfee
grafice) n crearea propriilor clase ce vor reprezenta interfea grafic a aplicaiei.
Un formular (forma grafic) nu este altceva dect o clas ale crei atribute
(proprieti) sunt date de componentele grafice ataate. Aceast cals poate fi
definit n mod vizual (de regul) sau direct prin scrierea secvenelor de cod specifice
pentru
definirea
oricrei
clase
(o
form
mai
rar
de
abordare).
Atributele
(proprietile) unei clase de tip Windows Form (clasa de baz Visual Basic .NET) vor
10
stoca referine ctre obiecte aparinnd altor clase definite de productorii limbajului
(Form, TextBox, ListBox, etc.). La momentul lansrii n execuie, se instaniaz clasa
respectiv i se obine obiectul complex reprezentat vizual pe ecran.
n acest material nu ne propunem s detaliem proprietile i metodele de care
dispune fiecare component grafic n parte, aceste aspecte fiind disponibile att n
bibliografia furnizat la nceputul semestrului ct i n documentaia standard .NET.
Figura 4-1 Construirea unui formular n manier vizual (Projectadd Windows Form)
radDescendent,
cmdAdd,cmdUpdate
cmdRemove,
txtValoare
4.2.2.
Implementarea
evenimente
comportamentului
Programarea
bazat
pe
interfeelor
grafice
permis
introducerea
unei
noi
concepii
in
11
sau inchiderea unei ferestre, efectuarea unui clic de mouse pe un obiect de control
(buton, caseta de validare, bara de defilare etc. ), intrarea cursorului mouse-ului n
campul activ al unui obiect grafic sau prsirea acestuia etc. Trebuie menionat c pot
exista i alte tipuri de evenimente, fr legtur cu interfaa grafic (vezi noiunea de
declanator (trigger) pentru baze de date), dar aici ne intereseaza numai cele legate
de interfaa grafic a aplicaiei.
In cazul modelului de programare orientat pe evenimente, iniiativa execuiei unei
anumite secvene de cod aparine ntotdeauna utilizatorului. Acesta acioneaza asupra
dispozitivelor de intrare (tastatura, mouse si altele), generand astfel evenimente la
care trebuie sa raspund programul.
Interactiunea dintre operator si aplicatie intr-un sistem bazat pe evenimente
decurge astffel:
1. operatorul provoaca generarea unui eveniment, acionand asupra tastaturii,
mouse-ului sau a altui dispozitiv de intrare. In cazul tastaturii, evenimentul
este generat prin apasarea sau eliberarea oricarei taste. In cazul mouse-ului
generarea se face fie direct de catre acesta, ca urmare a deplasarii mouseului sau apasarii /eliberarii unui buton, fie de catre un obiect grafic de pe
ecran, ca urmare a interaciunii dintre acesta i cursorul de mouse.
2. n urma unei asemenea aciuni, limbajul n care a fost scris aplicaia
genereaz un obiect specific, numit obiect eveniment, obiect ce poart i
informaia referitoare la controlul grafic pentru care s-a declanat .
3. Obiectul-eveniment este preluat de mediul run-time n care se execut
aplicaia i, n funcie de tipul de eveniment i obiectul grafic pentru care a
fost declanat, este furnizat unei metode (operaii) specifice, dac aceast
operaie exist (a fost scris de programator n faza design-time.
Aadar, problema const n identificarea modului de construire a unui program
astfel nct el s reacioneze la evenimente. Arhitectura sistemului de operare
Windows este destul de complicat i nu ne vom ocupa aici de explicarea modului
cum se nasc evenimentele; e suficient s tim care sunt acestea i c mediile de
dezvoltare ofer mecanisme pentru captarea i interpretarea acestor evenimente. n
varianta Visual Basic .NET i a produselor similare, o aplicaie const din:
1. un ansamblu de subrutine ce implementeaza logica de baz
2. subrutine (proceduri sau subprograme)
evenimentelor
12
cazul
VB
.NET,
metodele
de
tratare
evenimentelor
sunt
similare
la
finalul
semnturii
secvena
Handles
s declaneze
13
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles CheckBox1.CheckedChanged
MsgBox("noua valoare a checkboxului este:" & Me.CheckBox1.Checked)
If Me.CheckBox1.Checked Then
Me.CheckBox1.Font = New Font(New FontFamily("Arial"), 14, FontStyle.Bold)
Else
Me.CheckBox1.Font = New Font(New FontFamily("Arial"), 10,
FontStyle.Regular)
End If
End Sub
End Class
Lista de obiecte
Lista
evenimentelor
Exemplul formular
2
posibil
a
fi
generate
detrebui s-i ofere
Revenind la formularul din figura 4.1, comportamentul
acestuia ar
obiectul selectat
utilizatorului posibilitatea de a introduce valori ce vor fi in
apoi
n
listaascendent/descendent,
din stanga
grafice plasate pe
14
faptul c, dei fiecare component grafic poate genera mai multe tipuri de
evenimente (click, change, gotfocus,lostfocus,valid, etc.), trebuie identificate
doar acelea care au relevan din perspectiva funcionalitii ce trebuie implementat.
Astfel:
-
15
lstStanga.Items.RemoveAt(index)
Else
16
lstStanga.Items.RemoveAt(index)
lstStanga.Items.Insert(index, Me.txtValoare.Text)
End Sub
End Class
4.2.3.
Validarea datelor
nr = txtValoare.Text
Catch ex As Exception
MsgBox("Doar valori numerice!!!", MsgBoxStyle.Critical, "eroare validare date")
'modifica proprietatea "cancel" a evenimentului pentru a bloca
e.Cancel = True
End Try
End Sub
Iat i o variant mai interesant care utilizeaz funcia general CType pentru
conversia tipurilor i convertete parametrul sender (care nu este altceva dect
csua de text txtValoare) n tipul original (TextBox)
Private Sub txtValoare_Validating(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles txtValoare.Validating
Dim t As TextBox
Dim nr As Double
t = CType(sender, TextBox)
17
Try
nr = CType(t.Text, Double)
Catch ex As Exception
MsgBox("Doar valori numerice!!!", MsgBoxStyle.Critical, "eroare validare date")
'modifica proprietatea "cancel" a evenimentului pentru a bloca
e.Cancel = True
End Try
End Sub
4.2.4.
Spuneam mai devreme c prin definirea unui formular VB nu facem altceva dect
s definim, n mod vizual, o clas ale crei atribute (proprieti) sunt obiecte grafice.
Denumirile atributelor sunt valorile pe care le introducem n mod vizual pentru
proprietatea name a fiecrui obiect. Atunci cnd este lansat n execuie formularul, se
instaniaz clasa i se invoc n mod implicit metoda show(). Ne reamintim c a
instania o clas nseamn a obine un obiect care are anumite valori pentru fiecare
atribut definit de clas (ceea ce se numea starea obiectului). De asemenea, o clas
poate fi instaniat de mai multe ori, obinndu-se mai multe obiecte din acea clas,
fiecare cu o stare distinct de celelalte obiecte. Aceste afirmaii pot fi uor
demonstrate dac definim un formular cu un singur buton i secvena de cod
prezentat mai jos. Vom observa c obinem dou instane diferite ale aceluiai
formular i c putem foarte simplu manipula obiectele formularului n maniera clasic
prezentat n seciunea dedicat claselor i obiectelor (Partea 1 a cursului)
Public Class Form3
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim frm1, frm2, frm3 As Form1
Dim i As Integer
frm1 = New Form1()
frm2 = New Form1()
frm1.Show()
frm2.Show()
frm1.Top = 10
frm2.Top = frm1.Height + 30
MsgBox("next")
For i = 0 To 5
frm1.txtValoare.Text = Math.Round(Rnd() * 1000)
MsgBox("next")
frm1.cmdAdd_Click(frm1.cmdAdd, New EventArgs())
MsgBox("next")
Next
For i = 0 To 5
18
frm1.lstStanga.SelectedIndex = 0
MsgBox("next")
frm1.cmdSelect_Click(frm1.cmdSelect, New EventArgs())
MsgBox("next")
Next
'form 2
frm2.Activate()
For i = 0 To 5
frm2.txtValoare.Text = Math.Round(Rnd() * 1000)
MsgBox("next")
frm2.cmdAdd_Click(frm2.cmdAdd, New EventArgs())
MsgBox("next")
Next
For i = 0 To 5
frm2.lstStanga.SelectedIndex = 0
MsgBox("next")
frm2.cmdSelect_Click(frm2.cmdSelect, New EventArgs())
MsgBox("next")
Next
'sortare:
MsgBox("next")
frm2.radAscendent.Checked = True
MsgBox("next")
frm2.cmdSort_Click(frm2.cmdSort, New EventArgs())
MsgBox("next")
frm1.Activate()
MsgBox("next")
frm1.radDescendent.Checked = True
MsgBox("next")
frm1.cmdSort_Click(frm2.cmdSort, New EventArgs())
End Sub
End Class
Not. Pentru mai multe detalii legate de construirea interfeelor grafice, vezi
bibliografia furnizat la curs
19
n ultima vreme, un nou standard a fost impus ca fiind cea mai eficient modalitate
de acces la orice tip de surs de date extern (relaional i non-relaional):
Universal Data Access (UDA). Prin aceast nou abordare, dezvoltatorul de aplicaii
are la dispoziie un set predefinit de funcii specifice pe care le utilizeaz indiferent de
tipul sursei de date pe care dorete s o acceseze (FoxPro, Oracle, Access, Excel,
etc). Mai mult, UDA este un ansamblu de instrumente software independent de
limbaj, astfel c aceleai funcii specifice vor fi utilizate att de programatorii VB ct i
C#, .NET, etc.
n prezent standardul UDA este implementat de urmtoarele tehnologii (acestea
mpreun formeaz UDA) (vezi i figura 4-2):
- ultima generaie de
4.3.1.
ODBC
Open DataBase Connectivity constituie o interfa software al crei scop este acela
de a furniza o modalitate standardizat de acces la orice surs de date ce se
conformeaz modelului relaional, indiferent de furnizorul SGBD-ului (IBM-DB2, Oracle,
SQL-Server, FoxPro, Access, etc.). ODBC este un standard neutru (independent de un
anumit productor).
Pentru a furniza o modalitate standardizat de acces la date n diverse formate,
ODBC introduce un nivel-aplicaie intermediar, numit driver al bazei de date, ntre
aplicaia client i motorul bazei de date. Un driver este n esen un set de programe
dezvoltat de un furnizor de SGBD, set de programe care se conformeaz unui standard
(n cazul de fa ODBC) i al crui scop este:
20
eficien sporit;
nchiderea conexiunii
21
s nvee comenzi SQL specifice fiecrui SGBD (dei SQL este n sine un standard,
majoritatea productorilor de SGBD-uri implementeaz i extensii proprii), funciunea
de translaie SQL standardSQL proprietar fiind asigurat de driver.
OLEDB
Din capul locului ODBC nu a fost conceput pentru a oferi un mecanism de conectare
la surse de date non-RDMBS (Relational Database management Systems), dei exist
drivere non-relaionale. Tocmai din acest motiv s-a simit nevoia dezvoltrii unui alt
mecanism.
OLE
DB este
tehnologia
actual
recomandat
de Microsoft
pentru
conectarea unei aplicaii la diverse surse de date (fiieree text, Excel, baze de
date relaionale, etc.) prin intermediul unei interfee software standard denumit
generic COM (Component Object Model)
OLE DB utilizeaz termenul providers pentru a defini acel middleware (setul de
programe ce gestioneaz specificul comunicaiei ntre dou sisteme eterogene)
corespunztor diverelor ODBC i care conine instruciunile necesare pentru a
comunica cu un anumit de depozit de date. Programatorii aplicaiilor front-end trebuie
s-i procure acest pachet software nainte de a putea realiza o conexiune la sursa de
date.
Figura: OLE DB ofer o interfa standard pentru conectare la surse de date diverse (nu doar la baze de date
relaionale)
22
Eliberarea
conexiunii
(dealocarea
frazei
SQL)
aplicaia-client
distruge
4.3.2.
Dup cum precizam i ceva mai devreme, ADO reprezint o interfa de nivel nalt
destinat utilizrii directe de ctre dezvoltatorii de aplicaii ce implic acces la date
stocate n surse externe.
ADO furnizeaz un model logic obiectual suficient de flexibil pentru a interoga i
actualiza datele rezidente n surse externe. Accesul la date se realizeaz prin
intermediul interfeei software OLE DB dar acest nivel de mijloc este total transparent
pentru programator. Ca urmare, programatorii nu trebuie dect s neleag filozofia i
funcionalitatea interfeei ADO pentru a dezvolta aplicaii robuste ce necesit acces la
baze de date.
Iat o parte din vasta funcionalitate a acestei tehnologii:
Slavarea datelor extrase dintr-o baz de date ntr-un alt format: spre exemplu
fiier XML (eXtendedMarkupLanguage);
23
Transaction
Command
obiect
DataReader
DataAdapter
Descriere
Un obiect din aceast clas reprezint o sesiune distinct
(conexiune)
ctre
sursa
de
date.
Prin
intermediul
proprietilor(atributelor) i metodelor acestei clase se specific
informaiile de conectare (localizarea sursei de date, nume de
utilizator, parol, etc.). Tot la acest nivel sunt furnizate i metode
pentru a iniializa un obiect pentru gestionarea tranzaciilor
24
DataSet
DataTable
DataRow
DataColumn
Parameters
colecie
Conine setul de date aferent unei singure comenzi SQLSelect. Setul de date este reprezentat intern sub forma unor
colecii (obiecte Collection vezi partea 1 a cursului) de obiecte
de tip DataRow (DataRowCollection) i DataColumn
(DataColumnCollection)
Conine o colecie cu toate datele aferente unei singure
nregistrri.
Conine o colecie cu informaii despre fiecare atribut obinut
n urma unei interogri SQL (denumire, tip, dac este cheie
primar, etc)
Utilizat n cazul comenzilor SQL parametrizate. Conine
parametrii (obiecte de tip Parameter) asociai unei comenzi
(obiect Command).
25
26
Actualizarea Datelor
Exist dou variante de lucru pentru actualizarea datelor din surse externe prin
intermediul componentelor ADO .NET:
1. Utilizarea unor obiecte Command (fie OledbCommand, fie OdbcCommand in
functie
de
tehnologia
middleware
de
conectare)
pentru
frazele
SQL
27
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Eroare la modificarea datelor:" & ex.Message)
End Try
conn)
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Eroare la stergerea inregistrarii:" & ex.Message)
End Try
conn.Close()
End Sub
iniializa
celelalte
obiecte
interne
Command
este
acela
de
genera
frazele
SQL
Rolul
Insert/Update/Delete
obiecte
DataRow.
Actualizarea
presupune
modificarea
dataAdapter As OleDb.OleDbDataAdapter
dataSetProduse As DataSet
nrlinie, i As Integer
builder As OleDb.OleDbCommandBuilder
conn = getConexiune()
28
dataAdapter.InsertCommand = builder.GetInsertCommand
dataAdapter.DeleteCommand = builder.GetDeleteCommand
29
into
produse
values
OleDb.OleDbParameter
OleDb.OleDbParameter("cod", 1556)
OleDb.OleDbParameter
OleDb.OleDbParameter("den", produs test)
30
cmd.Parameters.Add(paramCod)
cmd.Parameters.Add(paramDen)
5. dup adugarea valorilor poarametrilor, fraza SQL poate fiu executat, prin
intermediul metodei excuteNonQuery() a obiectului Command. Metoda va returna
numrul de nregistrri afectate sau valoarea 0 dac nu a fost actualizat nici o
nregistrare
EXEMPLU
n listingul de mai jos sunt prezentate trei proceduri pentru actualizarea tabelei
Produse (insert/update/delete). Fiecare procedur definete un numr corespunztor
de parametri cu numrul parametrilor din fraza SQL aferent.
Not. Se observ c String-urile ce reprezint frazele SQL sunt definite ca i varibile
publice globale (la nivel de modul) pentru a fi accesibile oricrei proceduri de
actualizare a datelor
Module TesteActualizariParametrizate
Public AccessOLEDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=D:\cretzanu\Cursuri_laboratoare\Programare_an3\DOT_NET\laboratoare\BD\db1.mdb"
Public PQSQLODBCConnString =
"DRIVER={PostgreSQL};SERVER=localhost;port=5432;DATABASE=BDSTUD;UID=test;PWD=test;"
'variabile publice pentru frazele SQL aferente tabelei Produse
31
cmd.Parameters.Add(param)
Try
cmd.ExecuteNonQuery()
MsgBox("operatie realizata cu succes!")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Eroare")
End Try
conn.Close()
End Sub
Sub modificaProdus(ByVal newcodProdus As Integer, ByVal oldCOdProdus As Integer, _
ByVal denumire As String, ByVal pret As Double, _
ByVal categorie As String, ByVal dataintrare As Date)
Dim nrRowsUpdated As Integer
Dim conn As OleDb.OleDbConnection = getConexiune()
Dim cmd As New OleDb.OleDbCommand(SQLUpdateProduse, conn)
Dim param As OleDb.OleDbParameter
param = New OleDb.OleDbParameter("cod", newcodProdus)
cmd.Parameters.Add(param)
param = New OleDb.OleDbParameter("den", denumire)
cmd.Parameters.Add(param)
param = New OleDb.OleDbParameter("pret", pret)
cmd.Parameters.Add(param)
param = New OleDb.OleDbParameter("categ", categorie)
cmd.Parameters.Add(param)
param = New OleDb.OleDbParameter("datai", dataintrare)
cmd.Parameters.Add(param)
'parametrul din clauza where a frazei sql-update
param = New OleDb.OleDbParameter("oldcod", oldCOdProdus)
cmd.Parameters.Add(param)
Try
nrRowsUpdated = cmd.ExecuteNonQuery()
If nrRowsUpdated = 0 Then
MsgBox("NU EXISTA UN PRODUS cu acest cod:" & oldCOdProdus)
Else
MsgBox("operatie realizata cu succes!")
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Eroare")
End Try
conn.Close()
End Sub
Sub stergeProdus(ByVal codprodus As Integer)
Dim conn As OleDb.OleDbConnection = getConexiune()
Dim cmd As New OleDb.OleDbCommand(SQLDeleteProduse, conn)
Dim param As OleDb.OleDbParameter
param = New OleDb.OleDbParameter("cod", codprodus)
cmd.Parameters.Add(param)
Try
cmd.ExecuteNonQuery()
MsgBox("operatie realizata cu succes!")
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical, "Eroare")
End Try
conn.Close()
End Sub
End Module
32
TesteActualizariParametrizate.adaugaProdus(585,"test A",203,"B",#05/05/2006#)
TesteActualizariParametrizate.modificaProdus(585,586,"test A",203,"A",#05/05/2006#)
TesteActualizariParametrizate.stergeProdus(586)
Managementul tranzaciilor
Sub test_tranzactii()
Dim conn As OleDb.OleDbConnection = getConexiune()
Dim tranzactie As OleDb.OleDbTransaction
conn = getConexiune()
'obiectele tranzactie se obtin cu metoda obiectului Connection
tranzactie = conn.BeginTransaction
Dim cmd As New OleDb.OleDbCommand("update produse set denumire = 'test' where
codprodus=585", conn)
'se ataseaza tranzactia la obiectul command:
cmd.Transaction = tranzactie
cmd.ExecuteNonQuery()
cmd.CommandText = "update produse set pret =0 where codprodus=585"
cmd.ExecuteNonQuery()
'comite - ambele modificari vor deveni permanente
tranzactie.Commit()
'sau rollback - toate modificarile efectuate in acea tranzactie vor fi anulate:
' tranzactie.Rollback()
conn.Close()
End Sub