Tutorial SQL Server
Tutorial SQL Server
Chiar daca tematica nu poate parea interesanta, ce se doreste prin intermediul acestor
tutoriale este transmiterea unor principii de lucru, prezentarea utilitarelor cu ajutorul
carora se pot implementa aceste principii si prezentarea unui rezultat intr-o forma
primara care, evident, suporta multe imbuntatiri. Aceste imbunatatiri sint, insa, la
latitudinea fiecaruia si depind de imaginatia si nevoile personale ale celui care dezvolta
aplicatia.
SQL Server 2000 a reprezentat un salt major in domeniul bazelor de date. Daca saltul de
la SQL Server 6.5 la 7.0 a fost considerat de multi specialisti ca fiind unul semnificativ,
saltul de la 7.0 la 2000 (sau versiunea 8) este la fel de important, din mai multe puncte
de vedere. Cele mai importante aspecte au fost cele legate de securitate si performanta,
zone in care s-au depus eforturi semnificative.
Saltul de la SQL 2000 la SQL 2005 este, din nou, major si, pe mai multe planuri:
Mai multe editii (Express, Workgroup, Developer, Standard, Enterprise) fata de 4
(Desktop, Developer, Standard, Enterprise, Mobile) in SQL 2000
Notification Services
Integration Services
Reporting Services
Management tools – o integrare mai buna cu alte tool-uri de management ale MS
(MOM, SMS)
Integrare puternica cu Visual Studio – interfata de administrare a fost, de fapt,
complet rescrisa folosind VS si ofera acces la obiectele de administrare si implementare
a bazelor de date prin intermediul VS
Relational Database – s-a optimizat mult database engine, s-a imbuntatit partea de
securitate, suportul pentru date structurate si ne-structurate (XML)
Mai multe detalii despre diferente si imbunatatirile aduse in SQL 2005, se gasesc aici:
http://www.microsoft.com/sql/prodinfo/overview/whats-new-in-sqlserver2005.mspx
Pasii pentru instalarea SQL Server pentru acest tutorial vor fi descrisi in episodul
urmator. Ce dorim acum, este sa familiarizam putin cititorul cu unele facilitati ale SQL
Server, referitor la optiunile de instalare. Aceste optiuni vor fi intilnite pe parcursul
episodului 2, cind vom instala impreuna SQL Server 200 Standard Edition, dar as dori
sa le clarificam aici, o data cu prezentarea succinta a citorva din facilitatile oferite de
SQL Server.
Ce putem face este sa mai instalam o data SQL Server, ca o noua instanta (sau named
instance). In acest fel, vom putea experimenta diferite setari la nivel de server (alocare
de memorie, etc) fara a afecta functionarea celeilalte instante. Acest mod de lucru este
posibil datorita faptului ca fiecare instanta ruleaza intr-un spatiu propriu de memorie si
resurse hardware, fara sa afecteze celelalte instante daca se modifica setarile uneia din
ele. Este ca si cum am avea inca un server fizic disponibil pe care sa rulam inca un SQL
Server. Identificarea unui server SQL in retea, in scopul conectarii la acesta se face
dupa numele NetBIOS asociat acestuia. In cazul in care avem mai multe instante SQL
instalate pe acel server, identificarea acestora se va face dupa sablonul
numeserver\numeinstanta. De exemplu, avem serverul cu numele SQLDBSRV01 si
avem 2 instante SQL instalate pe acesta. Prima instanta, cea default, va fi identificata
dupa numele NetBIOS al serverului, adica SQLDBSRV01. Instanta 2 cu numele
CONTAB_DB, va fi putea fi accesata folosind identificatorul
SQLDBSRV01\CONTAB_DB.
SQL Server ruleaza ca serviciu in cadrul sistemului de operare. In cazul in care avem
mai multe instante, fiecare instanta va crea propriul serviciu in cadrul sistemului de
operare. Identificarea acestora se face similar cu identificarea instantelor, cu urmatoarea
diferenta: numele serviciilor pentru instantele din exemplul de mai sus sint astfel –
MSSQLServer si SQLServerAgent pentru instanta default si MSSQL$CONTAB_DB si
SQLAgent$CONTAB_DB pentru instanta CONTAB_DB.
Exista inca o editie a SQL Server, mai putin folosita, si anume Personal Edition. Am
avut ocazia, la un moment dat, sa instalez un Personal Edition, este o versiune limitata
ca si facilitati, din ce teste am reusit sa fac in timpul avut la dispozitie, iar ca si
pozitionare pe lista de editii, ar fi undeva intre Desktop Engine si Developer Edition.
Exista limitari si diferente intre editiile SQL: la volumul de resurse hardware pe care le
pot folosi, la dimensiunea bazelor de date (MSDE nu poate folosi baze de date mai mari
de 2G), la utilitarele care se instaleaza o data cu fiecare editie (MSDE nu are Enterprise
Manager) sau la performantele SQL in cazul bazelor de date mari.
Mai multe detalii despre aceste diferente, puteti gasi in SQL Books Online, unde va sint
prezentate diferentele dintre diferitele editii dpdv al facilitatilor incluse in fiecare dintre
acestea.
Descrierea componentelor
SQL Enterprise Manager (sau EM in unele documentatii) permite “inregistrarea”
serverelor SQL intr-o lista de administrare disponibila unui administrator. Inscrierea
serverelor in aceasta lista presupune ca userul respectiv are permisiuni pe acel server.
SQL Query Analyzer (sau QA) permite interogarea bazelor de date existente pe un
server SQL folosind limbajul Transact-SQL (sau T-SQL).
SQL Books Online este documentatia SQL in format electronic. Contine 90% din
informatiile necesare unui administrator sa-si faca munca in conditii optime.
Client Network Utility permite conifgurarea protocoalelor de retea pe care sa le
utilizeze SQL Server pentru a permite conectarea clientilor la bazele de date gestionate
de acesta.
Utilitarele linie de comanda (osql) permit interogarea bazelor de date din linia de
comanda, folosind parametri pentru a specifica interogarea, numele serverului, numele
bazei de date, etc. Mai multe detalii despre utilitarele linie de comanda se gasesc in
SQL Books online.
Sa luam un exemplu. Avem 100 de CD-uri si am vrea sa le ordonam cumva, intr-o baza
de date. Asociat unui CD, avem o serie de atribute: casa de discuri, an aparitie, gen
muzical, artist, etc. Aceasta baza de date o putem dezvolta si implementa foarte simplu
si rapid si in Excel, cu toate detaliile. Ce se intimpla insa, cind casa de discuri este scrisa
gresit la 25 de CD-uri ? Sau genul muzical ? Trebuie parcurse toate inregistrarile si
corectate manual. Insa, folosind relatiile, in loc sa stocam textul explicit al, sa luam un
exemplu, numelui casei de discuri, stocam un cod al acestei case de discuri in tabela de
CD-uri, iar in baza codului, regasim numele acesteia, dintr-o tabela “relationata” prin
intermediul codului. Folosind aceasta abordare, schimbam doar numele casei de discuri
in acea tabela cu casele de discuri, iar interogarea noastra va afisa numele corect la
toate inregistrarile, cu o singura modificare. In imaginea de mai jos este afisat,
schematic, exemplul de mai sus:
Diagrama 1 – Tabela cu CD-urile (structura partiala) – Fara relatii, cu atributele
in text clar
Din diagrama 2 se poate vedea destul de usor faptul ca daca dorim sa schimbam ceva in
denumirile unor genuri muzicale sau ale unor case de discuri, sau sa adaugam niste
atribute asociate acestor 2 tabele este mult mai usor decit in prima varianta. Aceasta
abordare are si unele dezavantaje (orice moneda are 2 fete), dar aceste dezavantaje sint
“umbrite”, ca sa zicem asa, de usurinta in administrare. Acest proces de separare a
datelor se numeste normalizare. Nu vom intra in detalii care tin de acest proces, pentru
ca nu face obiectul acestui tutorial, dar se gasesc destule articole pe net care explica in
detaliu si pe intelesul tuturor ce presupune normalizarea bazelor de date si avantajele pe
care aceasta le aduce.
In episodul 2 al acestui tutorial vom trece la instalarea SQL Server 2000 Standard
Edition si MS-Access, urmind ca de la episodul 3 sa trecem la exercitiul practic propus.
S
q
l
S
e
r
v
e
r
P
a
r
t
e
a
Ca si aplicatie am ales un exemplu probabil des intilnit in acest domeniu, dar care ofera
destule variatiuni care sa faca, totusi, exercitiul interesant: o baza de date cu CD-uri. Ca
liste cu persoanele carora le-am imprumutat CD-uri si detaliile aferente acestor
imprumuri (CD-ul in cauza, data la care am imprumutat CD-ul, data la care se va
returna CD-ul). In plus, pentru diversitate, am dori ca aplicatia sa permita si intretinerea
unei agende cu CD-urile care le-am cerut noi imprumut de la alti colectionari, la fel, cu
acelasi fel de detalii (data la care am cerut CD-ul, numele acestuia, data la care trebuie
sa returnam CD-ul).
Nu vom intra in amanunte pe aceste subiecte, din lipsa de spatiu. Dar acestea nu trebuie
uitate de nici un dezvoltator / consultant cind propune / dezvolta o solutie pentru clientii
sai.
Ca si date de pornire, pentru aspectele mai sus mentionate, vom presupune urmatoarele:
1. Nu se doreste securizarea datelor, datele nefiind confindentiale sau critice
Se selecteaza optiunea SQL Server 2000 Components.
Cerintele aplicatiei
Natura datelor
Dupa cum se observa din descrierea cerintelor de mai sus, majoritatea datelor folosite
sint de tip data calendaristica sau de tip caracter. Natura datelor afecteaza si tipul de
data pe care urmeaza sa-l folosim in SQL Server. Foarte pe scurt, SQL Server permite
ca pentru acelasi cimp sa avem mai multe optiuni dintre care sa alegem. Astfel, pentru
un cimp numeric, in functie de valorile pe care le determinam ca vor fi stocate in acel
cimp, putem opta intre mai multe feluri de date numerice: tinyint, smallint, int, bigint,
numeric si real (cu zecimale si nivele de precizie), bit, etc. Mai multe detalii despre
data types se gasesc in SQL Server Books Online, cu cautare pe keyword-ul data types
si selectind in lista de optiuni sectiunea Overview.
Click pe Next
lungimi variabile, aspect deloc de neglijat in cazul cimpurilor care vor stoca date de tip
sir de caractere (dar si in cazul cimpurilor cu date de tip intreg, in acest caz insa cistigul
de spatiu este mai putin evident). Aceasta facilitate ne permite sa “economisim” spatiu
fizic pe disc, in cazul in care acest aspect este o constringere. Ca si best-practice, este
bine de stiut acest aspect si indusa obisnuinta folosirii cimpurilor cu lungime variabila.
Poate parea un amanunt, dar cind vorbim de baze de date mari, acest “amanunt” devine
important.
Sa luam un exemplu, si anume un cimp ale carui date pot avea lungimi diferite, cu un
maxim de 50 de caractere si un minim de 3 caractere. O plaja larga de valori (80%) pot
avea lungimi de aproximativ 20 – 25 de caractere (vom lua in calcul o medie de 23 de
caractere), 5% vor avea lungimea minima (adica 3 caractere) iar restul de 15% vor avea
lungimea maxima (adica 50 caractere). Numarul maxim de inregistrari in aceasta tabela
a fost determinat la aproximativ 2 milioane de inregistrari. Ca sa se poata vedea mai
bine diferenta, vom folosi tabela de mai jos (calculele sint aproximative):
Dupa cum se poate vedea din tabelul de mai sus, prin simpla folosire a unui tip de data
sau a altuia se pot realiza “economii” importante de spatiu. Aceasta economie este
obtinuta in mod nativ, datorita modului in care SQL Server trateaza aceste tipuri de
date. In exemplul nostru, daca in baza de date avem de stocat 3 bytes, SQL Server va
aloca exact spatiul de care e nevoie (3 bytes) in loc sa aloce 50 bytes. Acest tip de data
este identificat in SQL Server sub numele de varchar (variable character). Mai multe
detalii despre tipurile de date veti gasi studiind SQL Books online, cautind keyword-ul
“data types”.
Sa continuam si sa discutam putin despre tabelele care vor compune baza noastra de
date.
Vom avea nevoie de o tabela care sa contina numele caselor de discuri sau, in cazul
DVD-urilor, a caselor de productie filme, cu structura urmatoare:
Cod casa de discuri, numeric, identity
Vom mai avea nevoie de o tabela care sa contina diferitele standarde de discuri (mp3,
audio, etc), cu urmatoarea structura:
Cod standard, numeric, identity
Denumire standard, varchar(50)
Vom mai avea nevoie de o tabela care sa contina diferitele genuri muzicale sau de filme
(hip-hop, R&B, drama, etc), cu urmatoarea structura:
Cod gen muzical, numeric, identity
Denumire gen muzical, varchar(50)
Diferenta de optiuni intre o instalare pe “curat” si instalarea unei noi instante SQL. Se
observa ca optiunea Upgrade, remove, or add components to an existing instance of
SQL Server este disponibila.
Vom mai avea nevoie de o tabela care sa contina un fel de agenda cu datele de contact
ale persoanelor care ne-au imprumutat discuri sau carora le-am imprumutat noi discuri.
Aceasta tabela va trebui sa ne ofere, ca un minim, urmatoarele detalii: numele
persoanei, adresa completa, numar de telefon si adresa de email. Pentru acesta, propun
urmatoarea structura:
Cod persoana, numeric, identity
Nume persoana, varchar(50)
Adresa, varchar(100)
Numar de telefon, varchar(20)
Adresa email,
Click pe varchar(30)
Next. Se introduce numele titularului licentei de utilizare si numele companiei.
Cele de mai sus, sint doar tabelele auxiliare care vor fi folosite de catre aplicatie. Tabela
urmatoare contine datele de baza ale aplicatiei, si anume colectia de discuri. In aceasta
tabela, vom memora, in loc de denumirea in clar a genurilor muzicale sau a numelor
caselor de discuri sau de filme, codul asociat acestora, pentru a permite modificarea
facila a acestor detalii in tabelele care contin aceste detalii, fara sa afectam tabela de
discuri.
Structura pe care v-o propun pentru aceasta tabela este descrisa in imaginea de mai jos:
Click pe Yes
Toate tabelele definite pina acuma, le-am definit cu ajutorul Microsoft Visio 2003 for
Click pe Next. Optiunile afisate vor instala dupa cum urmeaza:
Enterprise
ClientArchitects.
tools only Acest proces
– utilitare poarta numele
de conectare de “modelare”
la serverul SQL si lasinamed
are unele avantaje
instances
deloc
(SQLdeQA,neglijat. Cel mai 2.6,
EM, MDAC important este faptulde
osql), utilitarele caconectivitate
permite modificarea
(networkstructurii bazei
libraries).
dedate pina cind se ajunge la un model stabil, functional, care sa acopere
Server and Client Tools – instaleaza atit motorul de baze de date SQL cit si toate nevoile
aplicatiei si client
utilitarele a clientului.
descriseToate
mai acestea
sus fara sa lucram inca cu SQL Server sau sa scriem
osingura linie de cod in Transact-SQL
Connectivity Only – instaleaza numai sau MS-Access. Microsoft
network libraries Visio2.6
si MDAC 2003 for
Enterprise Architects (disponibil in pachetul Microsoft Visual Studio 2003 Enterprise
Architect) ofera aceasta facilitate si in plus, cind totul este gata, prin conectori ODBC se
poate conecta la serverul SQL dorit si sa creeze baza de date conform modelului
construit de noi.
Pentru a definitiva modelul bazei de date, vom trece la modelarea relatiilor dintre
tabele. Voi lasa schema sa vorbeasca de la sine si vom vedea in lectiile urmatoare cum
ne vom folosi de aceste relatii.
Click pe Next. La prima instalare pe un server, nu se poate opta pentru instalarea unei
named instance, numai de la a doua instalare incolo. Prima instalare este totdeauna cea
default.
In cazul instalarii unei noi instante. Optiunea Default nu mai este disponibila, pentru ca
numai prima instanta este cea Default, restul sint named instances. Se introduce un
nume pentru noua instanta si click pe Next.
Pentru a va usura munca, va voi oferi pentru download scriptul SQL care va va crea
baza de date, la finele articolului. Desi, de preferat ar fi, dpdv al scopului acestui
tutorial, sa creati baza de date manual, din Enterprise Manager.
Se introduce userul si parola asociata acestuia. SQL Server va rula in contextul userului
specificatunei
Obiectele aicibaze
si vade
avea
datedrepturile de acces
se pot vedea in retea de
in imaginea corespunzator nivelulde
mai sus. Imaginea demai
acces
susale
acestui user.
afiseaza, de fapt, tipurile de obiecte care pot fi definite in cadrul unei baze de date. Le
vom lua, pe scurt, pe rind pe fiecare din ele:
Diagrams – contine diagramele care reprezinta schematic legaturile dintre tabelele
bazei de date
Tables – contine tabelele care, la rindul lor, contin datele utile ale bazei de date
Views – contine definitia vederilor (sau a interogarilor salvate) folosite de aplicatie
pentru a interoga baza de date
Stored Procedures – contine definitiile procedurilor stocate folosite pentru a
efectua anumite operatii predefinite asupra datelor si / sau a tabelelor din baza de date
Users – contine utilizatorii care au permisiuni (pe diferite nivele) in cadrul bazei de
date curente
Roles – contine grupurile de utilizatori pre-definiti in cadrul SQL Server si in cadrul
bazei de date. Aceste grupuri contin permisiuni predefinite care se pot aplica userilor
pentru accesul la date
Rules – contine regulile de validare a datelor de la nivelul bazei de date. Regulile de
validare a datelor
Se specifica se pot
modul implementa pe
de autentificare 2 nivele
care urmeaza(cela putin), si de
fi folosit in cazul nostru mai
SQL Server. Se da click
specific,
pe Next.la nivelul tabelelor (la nivel declarativ al tabelelor) si la nivelul interfetei
utilizator (asa numita validare pe client). Avantajele folosirii validarii la nivelul bazei de
date sint in principal la capitolul performanta (clientul nu mai trebuie sa faca validarile,
deci va rula mai rapid, validarile pe server merg mai rapid datorita resurselor hardware
mai mari, etc).
Defaults – contine definitiile valorilor implicite definite de utilizator pentru baza de
date. Aceste defaults sint folosite la definirea tabelelor la specificarea valorilor implicite
care sa fie introduse in tabele cind utilizatorul, prin interfata oferita, nu furnizeaza toate
datele pentru a actualiza tabelele. Vom vedea in cadrul exercitiului practic utilitatea
acestor defaults.
User Defined Datatypes – am discutat putin mai sus despre tipurile de date. Aici se
pot defini tipuri de date conform cerintelor sau specificului aplicatiei sau a bazei de
date.
User Defined Functions – contine definitiile functiilor definite de dezvoltator /
implementator si care functii fac diferite operatii asupra datelor sau a altor obiecte ale
bazei de date
Full-Text Catalogs – contine cataloagele full-text existente in cadrul bazei de date.
Aceste cataloage contin referinte sistem cu privire la indecsii full-text. Un exemplu de
indecsi full-text si o baza de date care foloseste acest tip de indecsi ar fi o baza de date
cu CV-uri, cind se doreste cautarea in cadrul acestor CV-uri dupa cuvinte cheie.
Din pacate, nu avem mai mult spatiu la dispozitie pentru a detalia aceste obiect, dar
pentru cei interesati, SQL Server Books Online contine detalii despre aceste tipuri de
obiecte.
Noi vom merge mai departe cu exercitiul practic si vom trece la definirea tabelelor
bazei de date, folosind SQL Server Enterprise Manager.
Click pe Next.
Voi exemplifica practic cum se creeaza tabela tbl_Colectie, urmind ca pe baza
definitiilor de mai sus pentru restul tabelelor, sa creati tabelele auxiliare. Creerea
diagramei va incheia lectia de azi, urmind ca in partea a 4-a sa trecem la lucrul in MS-
Access.
Fiecare din cele 2 componente (data files si transaction log) sint formate din 1 sau mai
multe fisiere pe disc. Data files au extensia MDF iar transaction log-ul are extensia
LDF.
In cele ce urmeaza, vom creea o baza de date in care vom trece la creerea tabelelor
necesare aplicatiei noastre.
Click pe Finish
Se lanseaza SQL Query Analyzer si se apasa pe butonul …. Daca instalarea s-a terminat
cu succes, la apasarea acestui buton, trebuie sa apara o lista cu serverele SQL gasite de
Query Analyzer in retea, similar cu imaginea de mai jos:
Se lasa valorile implicite si click pe OK. SQL Server va crea baza de date dupa care ar
trebui sa vedem aceasta noua baza de date in Enterprise Manager.
Aceastea au fost o parte din metodele de verificare a instalarii SQL Server. Dupa
selectarea unui server din lista (sau a unei instante) si apasarea pe butonul OK, trebuie
sa apara un ecran similar cu cel de mai jos:
Acest ecran ne indica faptul ca SQL Query Analyzer s-a putut conecta la serverul sau
instanta selectata si ne permite, conform permisiunilor ce ne sint asignate la userul
curent, sa interogam bazele de date.
Similar cu acest ecran, se vor crea tabelele auxiliare ale aplicatiei noastre. Descrierile
acestora sint in acest tutorial.
Pentru mai multe detalii privitor la fiecare din optiunile disponibile in Table Designer
puteti accesa SQL BOL (Books Online).
Pentru comoditate, am inclus scriptul care creeaza baza de date si tabelele necesare. In
acelasi script sint creati si toti indecsii necesari ordonarii datelor in forma dorita de noi.
Concluzie
Desi s-ar mai putea discuta mult la acest capitol, sa nu uitam ca SQL Server este un
produs cu o arhitectura complexa si o functionalitate mult peste scopul acestui tutorial.
Daca ar fi sa discutam in detaliu despre un anumit subiect asociat SQL Server, am putea
lejer sa acaparam tot spatiul de care dispune ITZone. In plus, exista tone de informatie
disponibile online atit pe site-ul Microsoft (www.microsoft.com/sql) cit si pe diferite
forumuri specializate pe SQL Server. Alte zone de interes online: TechNet, MSDN.
Sau, un simplu Google pe “sqlserver” si va va afisa o lista considerabila de resurse
online despre SQL Server.
Las ca si exercitiu pentru voi creerea unei diagrame a bazei de date proaspat create de
noi. Puteti folosi schema relatiilor dintre tabele prezentata mai sus folosind Visio. Voi
publica in partea a 4-a diagrama, pentru ca fiecare din voi sa se poata verifica.
Puteti adauga comentarii sau pune intrebari pe tema acestui tutorial aici:
http://www.itzone.ro/forum/viewtopic.php?p=157#157
Dupa rularea scriptului, in Enterprise Manager va aparea noua baza de date si obiectele
definite in aceasta.
Autor Alin Selice
Adauga comentarii
Insa, inainte de orice, asa cum v-am promis in episodul 3, vom finaliza diagrama bazei
de date.
Aveti mai jos diagrama realizata folosind mecanismele oferite de SQL Server si pasii
necesari pentru a o obtine.
Daca ati ajuns la aceeasi diagrama, va felicit. Pe ceilalti ii felicit pentru rabdarea de care
au dat dovada asteptind pina am publicat acest episod si au la indemina pasii necesari
obtinerii diagramei.
Sa trecem acum la MS-Access. MS-Access, pe linga modul standard de lucru (baze de
date in format MDB), ofera posibilitatea stocarii si accesarii datelor pe un server SQL.
Acest mod de lucru ofera mai multe avantaje decit cel standard (standard dpdv al MS-
Access), si anume:
1. Putere mai mare de calcul – datele sint procesate pe server, care dispune de
putere mai mare de calcul
2. Usurinta in dezvoltarea de aplicatii – se modifica doar partea care afiseaza si
proceseaza datele, fara sa fie afectata structura in care sint stocate datele
3. Structura datelor se modifica intr-un singur loc, nu pe fiecare client care
foloseste aceste date. Pe partea de client, se modifica doar partea dezvoltata in
MS-Access.
Pentru a beneficia de acest mod de lucru, vom incepe dezvoltarea aplicatiei noastre,
lansind MS-Access si selectind optiunea File, New….
In New File Panel (partea din dreapta a ecranului), se va selecta optiunea “Project using
exiting data…”.
Se va specifica locatia si numele sub care se va salva aplicatia noastra pe disc. Click pe
Create.
Pasul 3, selectarea unei baze de date. Se va selecta din lista bazelor de date disponibile
pe serverul selectat la pasul 1, baza de date care ne intereseaza (ITZone, in cazul meu).
Daca ati atribuit alt nume bazei de date, selectati baza de date creata de voi pentru acest
tutorial.
OBSERVATIE: Userul selectat (in cazul in care ati selectat modul de autentificare
SQL) trebuie sa aiba acces la baza de date dorita. Pentru detalii, va stau la
dispozitie pe forum.
Dupa completarea acestor pasi, click pe Test Connection. Daca totul a fost ok, veti
primi urmatorul mesaj. Daca nu, va ajut sa treceti peste acest obstacol pe forum ca apoi
sa puteti continua.
Dupa citeva secunde, SQL Server va afisa o fereastra similara cu cea de mai jos. Pentru
cei care au mai lucrat in MS-Access, aceasta seamana cu ce au mai intilnit pina acum in
MS-Access. Dar asemanarile sint doar aparente. Exista diferente majore, atit in ce se
afiseaza, cit si in “comportamentul” MS-Access.
Va las pe fiecare in parte sa descoperiti asemanarile si diferentele MS-Access fata de
modul “standard”, conform interesului fiecaruia dintre voi.
Ce este important de retinut este faptul ca nu toate obiectele din MS-Access cu care
urmeaza sa interactionam sint sau vor fi stocate in Access. O parte din acestea urmeaza
sa fie create prin intermediul tool-urilor disponibile in MS-Access, dar vor fi salvate si
stocate in SQL Server. Altele, cum ar fi rapoartele, formurile sau codul VBA (Macro-
urile), vor fi stocate in MS-Access. Este treaba MS-Access sa pastreze intacta legaturile
dintre obiectele stocate pe SQL Server si cele stocate in structurile specifice MS-
Access.
Formurile le vom defini in baza cerintelor. Astfel, vom avea nevoie de:
1. un form care sa afiseze colectia integrala de discuri si care sa ofere acces la
urmatoarele operatii:
1. editarea detaliilor asociate unui disc / titlu
2. generarea unei tranzactii cu titlul respective
2. un form care sa ofere acces la tabele catalog ale aplicatie:
1. casele de discuri
2. genurile musicale
3. standarde
4. agenda
3. un form care sa permita accesul la rapoartele definite ale aplicatiei si care sa
permita selectarea comoda, din interfata aplicatiei, a unui raport spre a fi tiparit
sau afisat pe ecran
Acestea ar fi, in linii mari, formurile de care am avea nevoie. Pe masura ce vom avansa
cu lucrul, vom descoperi ca vom avea nevoie de unele formuri de acces rapid la date sau
care sa permita adaugarea rapida, pe moment, de noi inregistrari in anumite tabele ale
bazei de date. Aceste formuri, de care sigur ne vom lovi, vor fi necesare pentru a
imbunatati gradul de ergonomie si rapiditatea in utilizare a aplicatiei, in ansamblul ei.
Sa presupunem urmatorul scenariu: sinteti in formul de inregistrare a unui nou titlu in
baza de date. Aveti discul in fata si ce ar trebui sa faceti ?
1. Sa va asigurati ca in tabela de case de discuri exista o inregistrare care sa
corespunda cu ce gasiti pe discul respectiv
2. Sa va asigurati ca in tabela de genuri muzicale sau filme exista o inregistrare
potrivita cu genul discului in cauza
3. Sa va asigurati ca in tabela de standarde exista o inregistrare etc etc etc
Abia dupa ce pasii de mai sus (pentru simplitate nu i-am inclus pe toti) vor fi parcursi,
veti putea trece la adaugarea efectiva a noului titlu in baza de date. Dar pe masura ce
tabelele asociate tabele “centrale” se vor inmulti, marind gradul de detaliere al datelor,
pasii de mai sus vor fi tot mai multi. Puteti elimina acesti pasi premergatori, prin
oferirea unor facilitati de adaugare rapida de inregistrari in tabele respective.
Numele obiectelor se schimba in panoul Properties, tabul Other. Cateva cuvinte despre
acest panou, Properties.
Fiecare obiect definit in aplicatia noastra, are asociate niste proprietati. Aceste
proprietati depind de tipul obiectul si sunt impartite pe categorii (si afisate fiecare in
tab-ul propriu).
Aceste tab-uri sunt:
Format – proprietati care afecteaza formatarea obiectului la afisare
Data – proprietati legate de datele manipulate prin intermediul acelui obiect
(control)
Event – proprietati legate de diferitele evenimente aparute in aplicatie si cum
reactioneaza "controlul” respectiv la acel eveniment
Other – alte proprietati, specifice tipului de obiect in cauza
All – toate proprietatile de mai sus, indiferent de categorie, grupate alfabetic
Am mentionat termenul de evenimente (sau events) care apar in aplicatie. Foarte sumar,
aceste evenimente (sau events) sunt generate in parte de Windows, in parte de Access.
Evenimentele sunt "semnale” emise de Windows si de Access prin care "semnalizeaza”
faptul ca, de exemplu, s-a apasat un buton al mouse-ului, s-a apasat o tasta, s-a schimbat
valoarea unui control (un checkbox, de exemplu) si altele. Aplicatia, prin intermediul
actiunilor pe care le specificam la tabul Event, reactioneaza conform specificului event-
ului in cauza. De exemplu, putem specifica faptul ca la fiecare click de mouse in lista de
discuri (lstCDList) sa fie actualizate, in partea dreapta, detaliile relativ la inregistrarea
selectata prin acel click. Evident, fiecare event interceptat de Access se refera la
eventuri care "tin” de Access. Este treaba Windows-ului sa gestioneze corect aceste
aspecte si nu vom insista deloc in aceasta directie.
Vom modifica acum, proprietatile obiectelor din formul principal dupa cum se poate
vedea in imaginile care urmeaza.
Butoanele
Butonul Adauga redenumit in btnAdd.
Butonul Editeaza redenumit in btnEdit.
Butonul Sterge redenumit in btnDel.
Butonul Rapoarte redenumit in btnRpt.
Butonul Iesire redenumit in btn_Iesire.
Asta a fost pentru schimbarea numele butoanelor. Urmeaza sa adaugam detaliile pe care
le dorim afisate in partea din dreapta a formului. Pentru aceasta, vom adauga niste
textbox-uri in care nu vom permite editarea datelor (editarea se va face in formuri
dedicate). Pentru ca aceste textbox-uri sa contina datele corecte, ne vom folosi de
Event-ul On Click al lstCDList. Textbox-urile se includ in form apasind pe butonul
evidentiat in imaginea de mai jos:
Voi include textbox-urile si va voi prezenta forma finala a formului, in imaginea
urmatoare:
In partea dreapta a formului, dupa cum am spus ceva mai inainte, am inclus unele
controale pentru afisarea detaliilor "ascunse” ale inregistrarii curent selectate in lista din
stanga. Pentru a impiedica editarea datelor in ecranul din dreapta, am setat proprietatea
Locked a fiecarui control pe Yes. In tabelul care urmeaza, am inclus proprietatile
generale ale controalelor de afisare incluse in partea dreapta a formului:
Un control aparte, cel putin la prima vedere, este campul Disc Propriu. Am
implementat acest camp folosind un combo-box (o lista derulanta), care contine valorile
Da si Nu. Valoarea acceptata de baza de date, in schimb, este True sau False. Pentru
aceasta, asa cum se poate vedea in imaginea de mai sus, am implementat aceste valori,
folosindu-ma de facilitatea oferita de acest tip de control: setarea unei surse a datelor
care sa fie afisata de control (proprietatile Row Source Type si Row Source). Astfel, am
setat ca sursa a datelor pentru acest control o lista fixa de valori (Da si Nu), iar ca valori
pe care sa le "transmita” spre baza de date o alta lista de valori (True si False), care este
ascunsa la afisare, folosind optiunile de formatare a controlului, asa cum se vede in
imaginea de mai jos (proprietatile Column Count si Column Widths):
Acelasi mod de implementare il vom folosi putin mai tarziu, pentru acest camp, in
formurile de editare date si de adaugare inregistrari noi in baza de date.
De unde vom lua aceste date ? Din interogarea care este sursa datelor afisate in lista din
stinga. Daca ne amintim din exercitiile anterioare, pentru lista din stanga, am inclus mai
multe campuri, mai multe detalii decat afisam in acea lista. Acele campuri in plus le-am
inclus exact pentru acest scop. Cum vom actualiza aceste campuri ? Am spus mai sus ca
ne vom folosi de event-ul OnClick al listei din stanga. Acest event, se declanseaza de
cate ori utilizatorul face click pe lista. Ce alte event-uri vom mai folosi ? Inainte de
orice, trebuie spus ca ne vom folosi de event-uri de form si de event-uri de controale. In
functie de context, exista o ordine in care se declanseaza aceste event-uri. De exemplu,
la prima incarcare a unui form, se declanseaza toate eventurile de form si apoi cele
specifice controalelor. Ulterior incarcarii paginii (formului), se vor declansa acele
event-uri specifice actiunilor executate de utilizator. Unele event-uri sunt specifice unei
clase anume (la nivel de form sau la nivel de control). De asemenea, anumite actiuni
sunt limitate din punct de vedere al optiunilor permise, in functie de contextul de
executie (apelate din cadrul unui event la nivelul unui form sau a unui control).
Functia de adaugare a unei inregistrari noi si cea de editare a detaliilor unei inregistrari
existente pot folosi acelasi form. Singura diferenta va fi initializarea valorilor
campurilor afisate in acest form, specific contextului (de editare sau de adaugare a unei
noi inregistrari). Astfel, in cazul editarii unei inregistrari, vom dori ca in campurile
formului sa fie afisate valorile curente pentru fiecare camp in parte, pe cand in cazul
adaugarii unei inregistrari, ne este suficient ca aceste campuri sa fie blank
(necompletate cu nimic) sau cu anumite valori care pot fi determinate (de exemplu, data
cumpararii poate fi presupusa, si propusa, cea curenta).
Vom putea folosi acelasi form in scopuri diferite, prin 2 metode: ori folosind un wizard,
ori prin intermediul codului VBA. Pentru diversificare, va voi prezenta si modul rapid
de dezvoltare a unui form, folosind un wizard. Inainte de a incepe, sa ne amintim putin
cateva detalii despre formul principal. Datele care ne intereseaza sunt afisate sumar in
lista lstCDList, afisata in partea stinga a formului principal. Proprietatea Bound
Column a acestei lista am setat-o pe valoarea 1, adica prima coloana din aceasta lista
contine codul unic de identificare a inregistrarilor afisate in lista. Ne vom folosi de acest
control si de aceasta proprietate putin mai tirziu.
Si acum la lucru…
Ne pozitionam in containerul Forms si dam dublu click pe Create new form by using
wizard.
Selectam in lista Tables/Queries, tabela tbl_Colectie, apoi click pe butonul cu sageti
duble, pentru includerea tuturor cimpurilor din aceasta tabela in form.
Click pe Next.
Selectata optiunea Columnar. Puteti experimenta si cu celelalte valori, pentru a vedea
rezultatul. Pentru exercitiul nostru, vom alege optiunea Columnar. Click pe Next.
Vom alege ca efect de afisare a cimpurilor modul Standard. Puteti experimenta si
celelate optiuni, pentru a vedea rezultatele. In acest pas, puteti alege ce efect va place,
neinfluentind major rezultatul exercitiului. Eu am sa aleg Standard. Click pe Next.
Specificati un nume pentru form (se va modifica oricum in faza de design) si specificati
ca doriti sa intrati in modul Design dupa inchiderea wizardului si click pe Finish.
Si acesta este formul obtinut cu ajutorul Wizard-ului. Urmeaza sa-l adaptam nevoilor
noastre. Acest lucru il vom face prin 2 metode, complementare. Adaptand diferitele
proprietati ale formului si incluzand cod VBA care sa modifice formul in functie de
contextul in care este apelat (editare sau adaugare date). Vom incepe prin a adauga un
buton de salvare a datelor si unul de abandon.
Alt tip de adaptare consta in modificarea tipului unor campuri, din text box in combo
box. Mai exact, ne referim la campurile Producator (CasaID), Tip (StandardID), Gen
(GenID) si Nume (AgendaID). Aceasta modificare se impune a fi efectuata pentru ca in
aceste campuri vom stoca doar codurile corespunzatoare valorilor pe care le dorim.
Schimbarea o vom face cu click dreapta pe controlul respectiv, selectat Change To… si
apoi Combo Box.
Si rezultatul acestor modificari, la toate campurile mentionate mai sus:
Acest tip de control ne permite sa afisam o valoare in form si sa stocam aceeasi valoare
sau alta, dupa caz, in baza de date. In cazul nostru, in loc sa afisam un cod, care nu este
sugestiv, vom afisa in aceste combobox-uri un text descriptiv asociat fiecarui cod iar in
baza de date vom stoca codul corespunzator textului descriptiv selectat in combobox.
Urmeaza sa specificam valorile pe care le dorim afisate in aceste combobox-uri. Voi
include printscreen-uri pentru fiecare combobox in parte.
Campul CasaID
Click pe … pentru a specifica sursa datelor.
Click pe tbl_CaseDeDiscuri, click pe Add si click pe Close.
Incluse campurile conform imaginii de mai sus. In coloana Sort Order specificata
valoarea 1 si apoi se inchide fereastra.
Click pe Yes.
Rezultatul.
Campul StandardID
Click pe … pentru specificarea sursei datelor.
Selectata tabela tbl_Standarde, click pe Add si click pe Close.
Efectuate selectiile ca in imaginea de mai sus si inchisa fereastra.
Click pe Yes
Campul GenID
Click pe … pentru specificarea sursei datelor
Click pe tabela tbl_GenuriMuzicale, click pe Add, click pe Close.
Efectuate selectiile ca in imaginea de mai sus.
Click pe Yes.
Campul AgendaID
Click pe … pentru specificarea sursei datelor.
Selectata tabela tbl_Agenda, click pe Add si apoi click pe Close.
Efectuate selectiile ca in imaginea de mai sus. Pentru a obtine randul 2, se scrie de mana
textul Nume & " – " & Adresa iar in coloana urmatoare (Alias) se trece textul Nume. Ca
si rezultat, in acest combobox, vor fi afisate numele si adresa fiecarei persoane din
tabela.
Am ales acest mod de afisare, pentru a permite selectarea persoanei dorite, in situatia in
care exista mai multe persoane cu acelasi nume in baza de date. Daca doriti, pentru
simplitate (sau daca nu va iese J ), puteti lasa numai Nume in prima coloana, caz in care
nu mai e nevoie sa treceti nimic in coloana Alias. Inchisa fereastra.
Vom incepe prin a modifica formul principal, din care vom apela formul tocmai creat.
Inainte de asta, sa salvam formul creat si sa-i dam un nume. Inchidem Form Designer-
ul, click pe Yes.
Selectat formul nou creat (in Wizard i-am dat numele Colectie), click dreapta, Rename
si tastat noul nume al formului: frm_DetaliiDisc.
Am redenumit formul pentru a respecta conventia de nume pentru obiectele din
aplicatie.
Deschis formul frm_StartUp, click dreapta pe butonul Adauga, click pe Build Event.
Selectata optiunea Code Builder si click pe OK.
Dupa cum se vede in imaginea de mai sus, Code Editor-ul afiseaza informatii despre
comanda pe care ati tastat-o (evident, in ideea ca ceea ce ati scris este corect sintactic).
Nu mai urmeaza decat sa introducem parametrii doriti de noi pentru comanda noastra.
Nu voi intra in detalii despre sintaxa diferitelor comenzi VBA si am sa va invit pe
fiecare din voi sa o descoperiti. Pentru acest buton, comanda este urmatoarea:
' Setam focus-ul pe butonul Cancel, pt a evita stergerea din greseala a inregistrarii
Me.btnCancel.SetFocus
End If
End Sub
NOTA: Prima linie (Private sPar AS String) se va introduce imediat sub linia Option
Database Implicit.
Acestea fiind spuse, mai aducem un ultim touch formului nostru. Anume, la partea de
aspect. Pentru a vedea despre ce e vorba, salvam modificarile efectuate pana acum si
incercam formul in real-life.
Pentru a elimina / corecta cele de mai sus, modificam o parte din proprietatile formului
frm_DetaliiDisc (cu formul deschis in modul Design, ca in imaginea afisata dupa tabel)
conform tabelului de mai jos:
In partea a 7-a si ultima a tutorialului nostru, vom finaliza aplicatia noastra cu formul
pentru activarea si generarea raportului, vom genera raportul si vom mai aduce unele
finisari aplicatiei.
Adauga comentarii
Am ajuns cu aplicatia intr-un stadiu aproape de final. Mai avem de facut urmatoarele:
1. Creat raportul mentionat in finalul partii a 6-a a tutorialului
2. Creat formul prin intermediul caruia vom oferi acces la rapoartele predefinite
3. Testata aplicatia in ansamblu
4. Concluzii
Creerea raportului
Sa incepem prin a genera raportul nostru. La acest capitol, trebuie sa incepem cu citeva
detalii.
Un raport contine 2 componente distincte: a) sursa datelor care furnizeaza datele care
urmeaza a fi prezentate in raport si b) raportul in sine care prin prisma designului sau,
prezinta datele furnizate conform unei structuri si a unei logici specifice acelui raport.
Sursa datelor poate fi o tabela (cu sau fara criterii de filtrare sau ordonare a datelor) sau
o interogare mai complexa a tabelelor (cu scopul de a oferi spre afisare date din mai
multe tabele). Raportul in sine nu este altceva decit o definitie stocata in baza de date,
definitie care este “interpretata” la run-time si rezultatul acestei “interpretari” este afisat
in formatul definit.
Acestea fiind lamurite, sa trecem la definirea structurii datelor care urmeaza a fi afisate.
Pentru aceasta, sa ne reamintim putin cele spuse despre raport in partea 6.
“Inainte de a incheia partea a 6-a a tutorialului nostru, sa incercam sa ne definim un
raport pe care sa-l generam in ultima parte a tutorialului. Acest raport ne dorim sa
includa toate inregistrarile care reprezinta discuri date imprumut unor terti, cu toate
detaliile asociate acestor discuri (titlu, data estimata a returului, etc). Totodata, dorim
ca in acest raport sa fie evidentiate separat discurile a caror data de returnare e
depasita (fata de data generarii raportului).”
Din cele de mai sus reiese ca vom avea nevoie de 2 criterii de departajare a datelor.
Unul este indicatorul de disc propriu si celelalt, mai mult de evidentiere, data returnarii,
in cazul in care discul este dat sau luat imprumut.
Pentru aceasta, ne vom folosi de o functie care intoarce ca rezultat un set de inregistrari
care sa contina datele din tabelele noastre, cu criteriile mentionate mai sus gata
calculate.
Se mai afiseaza detalii de genul “Disc propriu”, “Dat imprumut” sau “Luat imprumut”.
Acestea sint de fapt si categoriile pe baza carora sint grupate inregistrarile (asta era si o
cerinta a raportului, daca ne amintim). Aceasta informatie este calculata in constructia
de mai jos:
Nu vom intra in detalii privind aceasta constructie, vom spune doar ca in cadrul unei
instructiuni SELECT putem folosi cuvintul-cheie CASE pentru a testa valoarea unui
cimp si in functie de valoarea acestuia, sa operam niste schimbari sau sa efectuam niste
calcule pe care sa le afisam in locul valorii efective a cimpului testat. Pentru mai multe
detalii despre CASE, va invit sa consultati sistemul de help al SQL, SQL Books Online.
Avem sursa datelor pentru raport. Putem trece la designul raportului. Pentru aceasta,
parcurgem urmatorii pasi.
Pentru ca era selectata optiunea Preview the report, sintem rugati sa introducem data de
referinta:
Si obtinem raportul nostru:
Nu prea arata bine, asa ca va trebui sa-l cosmetizam putin. Pentru aceasta, intram pe
raportul nostru in modul Design, cu click pe butonul evidentiat in imaginea de mai sus
cu un cerc rosu.
Adauga comentarii
Urmeaza sa setam actiunile care sa fie intreprinse cind sint apasate butoanele incluse in
form.
Click dreapta pe butonul Preview, Build Event, Code Builder si includem urmatorul
cod:
Oricare din variantele de mai sus este aleasa, aplicatia va afisa raportul pe ecran,
existind posibilitatea tipariri acestuia.
Las la latitudinea fiecaruia dintre voi re-designul raportului, pentru ca dupa cum se
vede, linia de detaliu nu incape pe o singura pagina.
Adauga comentarii
Toate comentariile
Testarea aplicatiei
Acum sa testam aplicatia. Aici am sa va las pe fiecare in parte sa faceti acest test. Eu am
sa evidentiez direct unele lipsuri, pe care le-am lasat intentionat la urma. De ce ? Pentru
ca am dorit sa evidentiez importanta analizei din mai multe puncte de vedere:
functionalitati, interfata (formul principal), implementarea functionalitatilor in diferite
locuri in cadrul aplicatiei.
Intrebarea apare cind incercam sa modificam, de exemplu, genul unui disc si genul dorit
nu este regasit in lista afisata.
Cum corectam aceasta deficienta ? Putem adauga, linga fiecare lista de acest tip, cite un
buton care sa activeze un form de actualizare a tabelelor care contin datele respective.
Formurile necesare vor trebui sa permita atit adaugarea rapida de date, cit si editarea
datelor existente.
Sint necesari trei pasi majori: 1) modificarea designului formului de editare / adaugare a
unui titlu, 2) creerea cite unui form de adaugare rapida a datelor dorite specific fiecarui
combobox si 3) creerea unui form general care sa contina tabelele cu datele existente
pentru a putea fi modificate. Va voi prezenta modul de creere a formului general si a
unui form de adaugare rapida si va las cu titlu de exercitiu creerea celorlalte formuri.
Dispuneti de aplicatia completa pentru download, daca intimpinati probleme cu acest
exercitiu.
Pentru a face loc noilor butoane, marim spre dreapta formul, repozitionam spre dreapta
butoanele Salvare, Abandon si casuta DiscID. Putem, acum, pozitiona cite un buton
linga fiecare combobox, similar imaginii de mai sus. Sfat: inserati un buton,
redimensionati-l si schimbati-i textul afisat din “CommandNN” in “…”, dupa care cu
Copy & Paste creati celelalte butoane (e nevoie de repozitionarea acestora).
Actualizam proprietatea Name pentru fiecare buton (primul este descris in imaginea de
mai sus):
Creem acum formurile care vor fi apelate de aceste butoane.
Pentru a usura acest task, vom apela la wizard-uri. In containerul Tables, selectam
tabela tbl_CaseDeDiscuri si din toolbar, selectam wizard-ul Autoform.
Rezultatul:
Urmeaza sa finisam formul creat cu acest wizard, prin ajustarea unro setari la nivel de
form. Dupa aceasta, vom avea de adaugat unele controale la acest form. Pentru aceasta,
comutam in modul Design.
In primul rind dorim sa nu mai avem fereastra de proprietati afisata tot timpul.
In al doilea rind, dorim sa eliminam unele elemente incluse implicit de wizard:
scrollbars, record selectors, titlul, etc.
Eliminam subformul care apare sub numele Table.tbl_Colectie.
Adaugam 2 butoane: OK (sau Save) si Abandon.
Setam cimpul CasaID sa nu fie disponibil si vizibil:
Salvam formul nou creat:
La acest form, mai avem de adaugat codul VBA care sa ne ofere functionalitatile
specifice contextului din care vom apela acest form.
Sa trecem la construirea codului VBA pentru acest form, incepind cu formul de editare
a detaliilor unui disc.
Citeva cuvinte despre bucata de cod:
Deschidem formul in modul de afisare “normal” (acNormal), in modul de parcurgere a
datelor “adaugare” (acFormAdd), in modul “Dialog” (acDialog – nu se permite
accesarea altor elemente ale aplicatiei pina nu se inchide formul curent) si transmitem
prin intermediul ultimului parametru contextul din care apelam formul (“ADD” –
OpenArgs). Acest ultim parametru il vom folosi in cadrul codului VBA asociat
formului frm_CasaDeDiscuri pentru a actiona conform cerintelor acelui context.
Deschidem acest form pentru design si completam codul VBA asociat atit formului (ce
sa se intimple cind formul este deschis sau inchis), cit si codul asociat diferitelor
controale.
Introducem codul urmator:
Codul este comentat, asa ca nu am sa mai insist asupra actiunilor din cod.
Adaugam si codul pentru butonul Abandon.
Pentru a putea identifica vizual contextul in care lucreaza formul, vom introduce un cod
VBA care va afisa in bara de titlu a ferestrei modul de lucru curent.
Cu click pe butonul … se deschide VBA Editor si se introduce codul de mai jos:
Va voi asista acum in creerea formului in care vom putea edita datele din celelalte
tabele asociate aplicatiei: case de discuri, genuri, standarde disc, agenda. Pentru
usurinta, vom folosi modul de afisare / gestionare / modificare date tabelar, cu
subformuri care include tabelele dorite.
Pentru aceasta vom avea nevoie de un form principal, in care vom include aceste
subformuri, pe cite un tab separat fiecare subform. Incepem cu un click pe New… in
containerul Forms.
Formul creat mai sus ne va permite accesul rapid si facil la datele cu rol de cataloage,
pentru a actualiza aceste date: adaugari, modificari si stergeri de date din aceste
cataloage.
Modificam unele proprietati de afisare a formului. Setati conform imaginii de mai jos:
Acum, pentru a accesa acest form, trebuie sa creem un nou buton in formul principal al
aplicatiei. Deschidem formul frm_Startup in modul design.
Asignam o actiune acestui buton, si anume sa deschida formul frm_Cataloage, prin
intermediul codului de mai jos:
Tools, Startup…
Efectuati setarile conform imaginii de mai sus si click pe OK. Inchideti Access si creati
un shortcut la baza de date creata in cadrul acestui exercitiu. Dati dublu click pe acest
shortcut si vedeti rezultatul muncii voastre.
In functie de anumite setari de securitate din cadrul pachetului Office, poate aparea
urmatorul mesaj de avertizare:
Selectati Open si mergeti mai departe.
Si cu asta putem considera aplicatia noastra terminata. Va invit sa o parcurgeti de la un
capat la altul si sa ii testati functionalitatile.
Concluzii
Citeva imbuntatiri posibile:
Se poate asigna formului de rapoarte ca la dublu-click pe un raport sa se afiseze
raportul dorit;
Se poate adopta un alt format al raportului, se pot filtra datele pe diferite criterii, se
pot genera rapoarte diferite pentru diferitele categorii de cd-uri, care sa includa datele
relevante pentru acea categorie
Se pot include si alte informatii relevante pentru acest domeniu
Sper ca acest tutorial sa va fi ajutat cit de cit si sa va trezeasca interesul pentru bazele de
date. Dupa cum ati vazut, Access poate fi o unealta puternica si permite lucrul cu baze
de date mari, stocate pe un server puternic de baze de date (SQL Server). Frumusetea
acestui aspect nu consta in faptul ca puteti folosi un SQL Server, ci ca puteti folosi orice
motor de baze de date puternic (Oracle, etc), cu unele mici amendamente (care nu fac
obiectul acestui tutorial) si unele aspecte specifice fiecarui motor de baze de date.
Autor Alin Selicean