Microsoft Office Access
uređuje Branislav Mihaljev, MVP

 Office Praktikum | Mapa sajta 

 
Bookmark and Share
Matična strana sajta
Novo na sajtu
Mapa sajta
Beleške
Knjiga posetilaca
Kontakt

Prethodna stranica
Pretraga sajta
Pretraga MSKB

Blog Praktikuma
RSS feed 
 
Office Praktikum

Još o Accessu
 


Skoro svakodnevno slušamo
  Radio Paradise:
  eklektični muzički online radio bez reklama!
 

   

Sponzori sajta

  Connectivity by SBB
 
Connectivity by SBB

 

Informacije

NOVOSTI
Novi prilog o Wordu
Tri nova autorska članka
Četiri priloga o Accessu
Opis i uputstvo za alatku YuCirLat '08 (Word)

SADRŽAJ ZA PREUZIMANJE
YuCirLat '08 unapređena alatka za konverziju kodnih rasporeda u Wordu

SKREĆEMO PAŽNJU
Beleške: B(l)oga li ti tvoga!- prilog koji će nekog možda čak i da naljuti
Kako pretraživati MSKB
* a pronaći ćete i još mnogo novih sadržaja...

USKORO SERIJA ČLANAKA O OFFICEU 2010

POZIVAMO VAS
* i prenesite svoja iskustva. Najbolji prilozi će biti objavljeni.



  (C) 2000-2009 Praktikum na Webu
 

Presretanje grešaka

Nivo:  NIVO 2 - klinite za objašnjenje


U razvoju aplikacije neizbežno dolazite do tačke kada će se ispoljiti neka greška. Što je program veći, veća je verovatnoća da će do greške doći, a ona se može ispoljiti ne samo kada je ona "očekivana" već i kada je to najmanje poželjno. Iz tog razloga neizbežno je predvideti programske delove za presretanje grešaka i njihovo razrešavanje - one će ne samo pomoći da se greška zaobiđe, već će ukazati na programski deo gde se pojavljuje.

VBA program nudi nekoliko ukaza i funkcija za izveštavanje i razrešavanje grešaka. Iskazom On Error određujemo dalje ponašanje programa kod pojave greške. Ovaj iskaz možemo proširiti odredbom GoTo koja govori programu na koji njegov deo se bezuslovno prelazi kada se greška pojavi, a on ima svoje "ime" koje se završava dvotačkom (:).

On Error GoTo Greska
'komande programa
Exit
Greska:
'komande za razrešavanje greške
End

Iskaz On Error se uvek postavlja na početku, a programski deo za obradu greške (u ovom slučaju Greska:) uvek na kraju procedure ili funkcije, pre klauzule End Sub ili End Function. Ovim obezbeđujemo da se programski deo Greska: ne izvršava uvek; ako je procedura uspešno okončana, iz nje ćemo izaći komandom Exit. Očekivane greške koje nemaju uticaja na program i koje se mogu zanemariti možete jednostavno preskočiti iskazom On Error Resume Next (program nastavlja sa radom od sledeće naredbe).

Ali, ovde budite veoma pažljivi: ukoliko dođe do kritične greške, ona će biti zanemarena!
 

Zanemarivanje pojave greške odredbom Resume Next važi do kraja procedure ili funkcije, a njen uticaj se može poništiti novim iskazom On Error GoTo 0. Na primer, pre programskog dela za brisanje privremene tabele koja ne postoji uvek, možete napisati deo programa koji proverava da li takva tabela postoji i u zavisnosti od rezultata ispitivanja granati program. Ali, možete i jednostavno napisati On Error Resume Next i zanemariti pojavu greške ukoliko tabele nema.

Obratite pažnju na zamku ovog postupka: ukoliko je tabela otvorena, ona neće biti obrisana iako postoji, a program neće prijaviti grešku neuspelog brisanja!

Iz tog razloga neophodno je da pre komande za brisanje tabele naredite Accessu da tabelu zatvori komandom Close. Nakon pokušaja brisanja takve tabele, isključićete zanemarivanje grešaka odredbom GoTo 0, kako biste mogli da tretirate druge potencijalne greške.

Savet:
Brisanje tabele je delikatna operacija i veoma često nepovratna. Preporučumo vam da tabelu ne brišete ukoliko to nije neophodno, već samo da joj izmenite ime komadnom:

DoCmd.Rename "tblTabela", _ acTable, "delTabela"

Ukoliko potrebnu tabelu ipak izbrišete, pogledajte prilog Povraćaj obrisane tabele.
 

VBA nudi nekoliko funkcija za izveštavanje o greškama. Error() prikazuje tekstualni opis greške, a Err() broj koji je reprezentuje. Funkcija Err() je naročito korisna u grananju programa: u zavisnosti od broja greške koja se pojavila, naredbom bezuslovnog skoka ćete preći u deo programa za razrešavanje greške.

Funkcija Err() prikazuje broj programskog reda u kome se greška pojavila, a način njene upotrebe možete ispitati u sledećem primeru:

Function ErlTest
On Error GoTo Greska
10: Open "AUTOEXEC.BAT" For Input As #1
20: Open "CONFIG.SYS" For Input As #2
Close
Exit Function

Greska:
MsgBox Err() & ": " & Error()
If Erl = 10 Then
    MsgBox "Ne mogu da nađem AUTOEXEC.BAT"
ElseIf Erl = 20 Then
    MsgBox "Ne mogu da nađem CONFIG.SYS"
End If

End Function

Ovom funkcijom pokušavamo da otvorimo datoteke AUTOEXEC.BAT, odnosno CONFIG.SYS i ispitujemo broj programskog reda u kome se greška pojavila. U ovom primeru, funkcijama Err() i Error() dobijamo broj greške i njen opis, ali ne i programski red u kome se greška pojavljuje.

Iako predvidite sve moguće scenarije pojavljivanja grešaka, a bazu date korisniku koji ima uključenu opciju Break On All Errors, program će se zaustaviti na svakoj grešci. Opcoja Break On All Errors se nalazi u Visual Basic Editoru, u meniju Tools / Options / General.

Sledeće dve funkcije će vam pomoći da prvo zapamtite vrednost ove promenljive, zatim je izmenite i na kraju joj vratite vrednost na pređašnje stanje:

Public Sub IskljuciBreaksOAE()
VrBOAE = GetOption ("Error Trapping")
SetOption "Error Trapping", 2
End Sub

Public Sub VratiBreaksOAE()
If Not IsEmpty(VrBOAE) Then SetOption "Error Trapping", VrBOAE
End Sub

Prvu funkciju možete pokrenuti po otvaranju baze ili procedure, a drugu po zatvaranju.

Pri testiranju aplikacije ponekad je potrebno namerno generisati grešku i proveriti ponašanje programa. Metoda Err.Raise BROJ generiše grešku, gde se BROJ može kretati u rasponu od 0-65535; pripazite, jer je prvih 512 brojeva rezervisano za sistemske greške. Npr. Error Raise 58 generiše grešku "File already exist" (datoteka već postoji).

Pre pojave greške, ispravnost svake procedure ili funkcije možete testirati funkcijom IsError(). U sledećem primeru testiraćemo ispravnost funkcije Proba:

Dim TestFunkcija, Ispravnost
TestFunkcija = Proba()
Ispravnost = IsError(ReturnVal)

Kombinovanjem funkcija i komandi koje smo naveli, obezbedićete da program razvijen u Accessu bude otporan na sve vrste grešaka, što je naročito bitno kod profesionalnih i komercijalnih aplikacija.

 

  (C) 2000-2009 Praktikum na Webu

Branislav Mihaljev, Access bajtovi, PC 88


 
 

Vrh stranice  Prethodna stranica  Naslovna strana  Mapa sajta  Pretraga

AFORIZAM ZA DANAS OVIH DANA SLUŠAMO...

Copyright © Praktikum na Webu, 2000-2009; Valinor Design; sva prava pridržana.