 |
| |
Mikanović S. Radenko
MS Access - aplikacija deljenih resursa |
|
Za aplikacijom deljenih resursa imaćete
potrebu ako imate više Access aplikacija u kojima pozivate iste
module (kôda ili interfejsa). Kreiranjem jedne MDE aplikacije koja
sadrži isprobane i funkcionalne module, sposobne da funkcionišu
kao zajednički deljeni resurs.
Osvojite Add-In koncept
Add-In je opšti pojam za dodatni modul, pa tako mnogi napredniji
programi nude Add-Ins Manager ili tome sličan alat u istu svrhu
- komfornije, brže i sigurnije izvršavanje čestih i složenijih poslova.
Opšti smisao Add-Ins je da pruži na raspolaganje čarobnjake (Wizards)
za obavljanje niza korisnih akcija.
Često nismo i svesni da smo takav neki dodatak koristili da bismo
došli do izvesnih rezultata. Add-In se, prema rezultatu svojih akcija,
svrstava u grupu korisničkih ili razvojnih alatki. Najsrećniji je
onaj korisnik, koji ne mora da bude svestan toga da se "tamo
negde iza" pokreće neki Add-In, ali dobija rezultate u onom
obliku kako mu odgovara.
U razvoju aplikacije, korišćenje Add-In je daleko složenije, ali
njihovo korišćenje u ovom delu Access-a treba svesti na što manju
moguću meru. Add-In koji imaju za cilj da proizvedu VBA kôd ne bave
se baš mnogo optimizacijom u kôdiranju, pa tako kreirane aplikacije
sporo rade i zauzimaju mnogo više fizičke i RAM memorije. Primer
dobrog Add-In je Chart Wizard i Label Wizard za kreiranje Form i
Report objekata i njihovih delova, ali ni oni ne mogu da otkriju
šta ste sve zamislili, pa je tako, u radu sa sličnim čarobnjacima,
najvažniji posao dovesti u red ono što smo njime kreirali. Fino
doterivanje svojstava objekta, kao i koodiranje forme ili report-a
jeste neizbežno, ali pruža užitak u dovršavanju započetog.
Add-Ins Manager služi da se na ovakve dodatke prijavimo ili odjavimo,
što znači da prema njima nastupamo sa korisničke, a ne razvojne
platforme. Koristili ih mi ili ne, ove aplikacije dobijamo instalacijom
MS Access-a (i sličnih programa), a uglavnom su locirane na "Common
Files" ili sličnim opštim Shared lokacijama (na raspolaganju
su svim aplikacijama koje su dovoljno "pametne" da ih
koriste). MS Access koristi aplikacije ekstenzije *.mde ili *.mda,
ali je extezija za ove alate potpuno nevažna. Ono što je važnije
je to da su to kompajlirane (na mašinski jezik prevedene datoteke),
tako da je svaka ideja o "razbijanju" kôda osuđena na
propast. Najdalje što se može stići je eventualno čitanje i izmene
u objektima tipa tabele i upiti, ali ovakve aplikacije ih uglavnom
nemaju. Treba napomenuti da je zaštita i ovih objekata moguća, pod
uslovom da ih aplikacija sadrži.
References
Pored Add-Ins-a, aplikacije mogu da koriste resurse na koje sam
korisnik aplikacije nema (niti može imati uticaj), odnosno resurse
od kojih bitno zavisi rad aplikacije. Reference se postavljaju iz
VBA okruženja, a biblioteke mogu biti *.dll, *.ocx ili *.mde formata.
Pošto ovde tema nije OO programiranje, onda ćemo samo obratiti pažnju
na MS Access formate biblioteka (*.mde).
Loša strana MS Access formata biblioteka je to što aplikacija zahteva
apsolutno istu biblioteku (datum, veličina,...), koja joj je bila
na raspolaganju i prilikom kompajliranja. Dakle, i najmanja promena
biblioteke zahteva njenu distribuciju prilikom distribucije update-a
(popravke) aplikacije. Aplikacija koja nema referentnu biblioteku
(sa kojom je kompajlirana) ili nema korektnu verziju biblioteke,
daje poruku o grešci, odnosno "pada" sa prvom upotrebom
VBA komande.
Biblioteku treba tako osmisliti da je u buduće koristi sve više
aplikacija, a u nju se mogu smestiti neki od Modul-a i Form-i, odnosno
objekata koji su potrebni mnogim aplikacijama. Na taj način postićete
da vam aplikacije budu znatno manje, a zajedničke resurse u bibliotekama
ćete usavršavati na jednom umesto mestu (u biblioteci) umesto u
svakoj aplikaciji.
Preduslovi
Da bi *.mde biblioteka funkcionisala po konceptu prave biblioteke,
a opet zadovoljila specifične uslove MS Access-a, treba poštovati
neke preduslove osmišljavanja biblioteke i to:
Prvo: biblioteka i aplikacija ne mogu da sadrže istoimeni
objekat (Modul kôda, Form,...).
Drugo: Biblioteka ne može da raspolaže objektom (ili promenljivom)
iz aplikacije, ako joj on nije prosleđen (npr. kao argument funkcije).
Biblioteku ne treba ni koncipirati tako da vidi druge objekte aplikacije,
jer ona treba da jednako tretira svaku aplikaciju za koju obavlja
tražene akcije.
Treće: aplikacija i biblioteka, u obliku otvorenog koda,
ne mogu biti paralelno (istovremeno) otvorene od strane MS Access-a,
što znači da se svi poslovi oko biblioteke moraju dovršiti da bi
ona bila referencirana iz neke od aplikacija
Četvrto: referentnu biblioteku treba smestiti na apsolutni
Path na Common Files ili na neku od sistemskih lokacija koje (\windows\system
i slično).
Peto: Nema mnogo smisla u bibliotekama koristiti objekte
tipa Query, jer se njihovo korišćenje programira kroz sam VB kôd,
dok objekti Tables mogu da dođu u obzir pod posebnim uslovima. Uvek
se smatra boljim rešenjem tabele smestiti u zasebnu prateću bazu,
a smisao njenog korišćenja je eventualno čuvanje opcija i parametara
rada biblioteke.
Šesto: Bogatstvo biblioteke jesu klase, ali ako niste vični
OO programiranju forsirajte korišćenje javnih funkcija (Function),
a izbegavajte Sub procedure. Pored toga što funkcija vraća vrednost
izabrane opcije, njen rezultat se može iskoristiti u cilju potpunog
informisanja kako je protekao proces rada funkcije.
Sedmo: U biblioteci ne treba koristiti deklarisanja promenljivih
domena izvan procedura, a kada to postane neizbežno treba preći
na kreiranje klase objekata.
Osmo: biblioteku treba tako koncipirati da ne zavisi od drugih
biblioteka (osim DLL), a za svaki poziv nekog od alata - obezbediti
zasebnu ili univerzalnu funkciju.
Kompatibilnost i mogućnosti
Pozivanja u biblioteci treba da budu tako osmišljena da omogućavaju
fleksibilan kasniji razvoj, što se najčešće pokaže potrebno kod
proširenja broja argumenata ili promene njihovog tipa. Savetuje
se da prvih nekoliko argumenata procedura traži kao obavezne argumente,
dok ostale treba ostaviti kao opcione. Na taj način će biti obezbeđena
kompatibilnost svih aplikacija koje koriste istu biblioteku, a kada
neki od argumenata preraste u obavezan, potrebno je izvršiti korekcije
u svim aplikacijama koje nisu "znale" za nove argumente.
MS Access aplikacija traži biblioteku u istoj verziji (do verzije
2000), dok MS Access XP (2002) i korišćenje biblioteka prethodne
verzije. Da li je u pitanju veliki korak unapred ili neznatne razlike
između verzija 2000 i XP, ostavljam drugima da prosude.
Prva aplikacija koju sam uradio sa ciljem da je koristim kao biblioteku
je Tools#1, a kako su se apetiti mojih aplikacija povećavali, razvio
sam i Tools#20, ali sa jasnim ciljevima: povećanja sigurnosti pristupa
podacima, konekcija MS Access aplikacija na SQL Server udaljene
izvore podataka, uključivanje klasa za fleksibilan interfejs MS
Access aplikacija,...
Neki od alata koje sam zasnovao na funkcijama i u tom obliku ih
već dugo koristim na preko 20-ak aplikacija su: kalkulator, kalendar,
Connection Tools (alati za Jet konekcije), ODBC Connection (alati
za ODBC konekcije), dirTools (set funkcija za pristup fajlovima
i direktorijumima), ErrorLoger (servis za logovanje grešaka aplikacija),
InteractiveSearch (interaktivno pretraživanje forme u kontinualnom
Datasheet pregledu), Progress (prikaz toka nekog procesa).
Alate koje sam postavio kao klase u istoj biblioteci: hSplitter
(horizontalno deljenje forme) i vSplitter (vertikalno deljenje forme)
omogućavaju da u aplikaciji koristim vertikalno i horizontalno deljenje
forme na okna (podforme), ali tako da su linije deljenja fleksibilne
i osetljive na korisničke akcije i događaje matične forme.

Primer
Primer pred vama, služi za verifikaciju unetog password-a, a u konačnom
obliku može poslužiti za kontrolu autentičnosti pristupa izvesnom
segmentu aplikacije (uglavnom Formi ili Reportu).
Kako to izgleda u biblioteci? U biblioteci se "posao"
deli na jednu funkciju i jednu formu, dok aplikacija treba da zna
samo za funkciju i od nje dobije traženu vrednost. Zadatak funkcije
je da otvori formu i na nju postavi inicijalne vrednosti, pa po
završetku korišćenja forme da sa nje preuzme i obradi rezultate,
pa na kraju vrati vrednost.
Modul kôda koji može da sadrži samo jednu namensku funkciju:
'modul koda _pass_
Option Compare Database
Option Explicit
Public pwdTitle As String
Public Function VerifyPWD(TruePWD As Variant,
Optional strTitle As String = "Enter Password") As Boolean
pwdTitle = strTitle
DoCmd.OpenForm "_password_", , , , , acDialog
If isFormLoaded("_password_") Then
If Forms("_password_").txtPWD = TruePWD Then
VerifyPWD = True
DoCmd.Close acForm, "_password_"
Else
DoCmd.Close acForm, "_password_"
DoCmd.CancelEvent
End If
Else
DoCmd.CancelEvent
Exit Function
End If
End Function
Modul forme koja treba da ima tri grafička objekta: txtPWD (tipa
TextBox), cmdOK i cmdCancel (tipa CommandButton).
'modul forme _password_
Option Compare Database
Option Explicit
Private Sub cmdCancel_Click()
txtPWD.SetFocus
txtPWD.Text = ""
Me.Visible = False
End Sub
Private Sub cmdOK_Click()
txtPWD.SetFocus
Me.Visible = False
End Sub
Private Sub Form_Open(Cancel As Integer)
Me.Caption = pwdTitle
txtPWD.SetFocus
End Sub
Kako i gde smestiti poziv funkcije iz
biblioteke?
U nastavku je dat primer par redova kôda kojim se proverava "da
li korisnik zna pristupnu šifru za otvaranje ove forme", pa
ako rezultat ne bude True, otvaranje forme će biti otkazano. Ovde
je pristupna šifra "bigboss" data samo kao jednostavan
primer, ali se u praksi zahteva fleksibilnost (mogućnost ažuriranja)
pristupnih šifara, pa umesto konstantne vrednosti uglavnom stoji
neka funkcija (koja pristupa izvoru gde se šifra ažuriraju).
Private Sub Form_Open(Cancel As Integer)
If Not VerifyPWD("bigboss", "Unesite globalni Password")
Then
Cancel = 1
End If
End Sub
Vidi se da aplikacija zna samo za funkciju VerifyPWD u biblioteci,
a sama funkcija preuzima na sebe ostale obaveze u skladu sa prosleđenim
argumentima. Ne zaboravite da biblioteka mora da bude kompajlirana
i sačuvana u MDE formatu, a u aplikaciji postavljena referenca na
nju (Visual Basic okruženje, Tools>References>Browse...),
kao i to da prilikom prenošenja na drugi računar, aplikacija neće
raditi ako ovu biblioteku ne nađe na istoj lokaciji.
Rezime
Navedeni primer, i njemu slični primeri deljenja resursa, sigurno
neće rešiti sve vaše probleme programiranja MS Access aplikacija,
ali je dobar za početak. Nemojte da vas obeshrabre neuspešni pokušaji
na početku, razmišljajte o tome koliko će vaše aplikacije biti "olakšane"
kada u biblioteke prebacite sve one trikove koje koristite i ponavljate
u svakoj od njih. da li da vam pominjem ono kad isti trik usavršite
u jednoj od aplikaciji, pa treba da ga primenite i u ostalim aplikacijama.
MS Access biblioteke će vam omogućiti da centralizujete najčešće
korišćene alate, ne tražeći od vas veliko umeće u programiranju.
Sa ciljem da vam ovu temu približim širem krugu čitalaca, trudio
sam se da ne koristim komplikovane i one izraze za koje bi mi trebalo
mnogo više prostora za dovršavanje priče, pa se može steći utisak
o suviše pojednostavljenom i nedorečenom poimanju korišćenja resursnih
biblioteka. Za detalje o prednostima ovog koncepta programiranja
konsultujte MS Access referentne priručnike u izdanju Microsoft
Press-a ili publikacije čiji su autori članovi Microsoft-ovog tima.
U nekoj sledećom prilici pokazaću kako se mogu kreirati MS Access
i DLL biblioteke objektne orijentacije, odnosno kako se postiže
najviši oblik kompatibilnosti u deljenju aplikativnih resursa.
|