Fujitsu-Siemens
 
M A G A Z I N
 
SOFTWARE 
  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.

 

VRH STRANE

(c) 2003 OMEGA - sva prava zadržana