COS'E'
UN ERROR TRAP
Significa controllare un errore, se
può creare dei problemi all'applicazione e prendere delle
decisioni, come proseguire con il programma, ritentare l'operazione
che ha creato l'errore, uscire dalla funzione o addirittura
dall'applicazione. Visual Basic n on controlla tutti i tipi di
errore, come quelli generati da malfunzionamenti Windows ed in questo
caso l'applicazione viene abortita, ma consente però di
evitarne la gran parte. Ecco uno schema di massima dell'error trap:
Ci sono 3 fasi ben precise per creare un error trap: - inserire un
error trap nella funzione o routine che si vuole controllare -
scrivere il codice per trattare l'errore - uscire dal dalla procedura
di controllo dell'errore
ABILITARE
UN ERROR TRAP
Per fare in modo che un errore possa
essere controllato, s'inserisce nella funzione o routine e
preferibilmente all'inizio, l'istruzione
- On
error [goto label]
[goto 0]
[resume] [resume
next]
Va inserita almeno una delle scelte
indicate. La prima indica che in caso di errore il programma 'salta'
fino alla label indicata dopo il goto. Esempio: la routine
Command1_Click ha come prima istruzione un error goto che in caso di
errore va direttamente all'istruzione dopo ErroreFunzione: , dove
sarà trattato opportunamente. Se tutto invece procede
correttamente, il flusso del programma arriva fino all'istruzione
exit sub , che forzerà l'uscita dalla routine.
- sub
command1_Click()
- On error goto
ErroreFunzione
- ...
- codice della
routine
- ...
- exit sub
- ErroreFunzione:
codice per controllare l'errore end
Sub
On error goto 0,
significa che in caso di errore il programma continuerà come
se non fosse successo nulla.
On error resume,
indica che in caso d'errore si ritenta di eseguire l'istruzione che
ha generato l'errore.
On error resume
next, indica al programma che in caso d'errore verrà
eseguita l'istruzione successiva a quella che ha generato l'errore
Solo nel primo caso (on error goto label) si può avere un
trattamento dell'errore perché negli altri 3 la situazione si
risolve a prescindere del tipo di errore.
SCRIVERE
IL CODICE PER TRATTARE L'ERRORE
Il codice va scritto dopo la label e
si avvale in sostanza di due variabili di Visual Basic:Err e Error$. La prima contiene il numero dell'errore e la seconda
la descrizione dell'errore. La prima é un integer, la seconda
una stringa. Tutti i codici d'errore che compaiono in Err sono
descritti nel manuale d'uso di VB con la loro descrizione. Esempio:
l'errore numero 71 significa 'Dischetto non presente' e quindi Err conterrà 71 Error$ conterrà "Dischetto
non presente". Completiamo la routine precedente inserendo un
controllo d'errore
- sub
command1_Click()
- On error
goto ErroreFunzione
- ...
- codice della
routine
- ...
- exit sub
-
- ErroreFunzione:
- if err = 71
then
- msgbox
"Inserisci il floppy disk nel drive A"
- resume
- else
- msgbox
"Errore n." & err & ": " & error$
- end if
- end Sub
In questo esempio nel caso di errore
71, dischetto non presente, verrà visualizzato un messaggio
che invita ad inserire il dischetto nel drive A . Una volta fatto il
programma proseguirà ritentando l'operazione con resume. Se
l'errore é di un altro tipo verrà visualizzato codice e
descrizione dell'errore e successivamente il programma uscirà
senza eseguire altre istruzione da questa routine.
USCIRE
DA UN ERRORE
Ci sono 4 modi per uscire da un
controllo d'errore:
resume
resume next
resume label
exit [function]
[sub]
Le istruzioni resume funzionano come
già detto per on error goto , soltanto che mentre prima non si
conosceva il tipo d'errore, qui le si eseguono soltanto dopo aver
controllato l'errore. Exit seguita da function o da sub , fa uscire
dalla funzione o dalla routine. Esempio: modifichiamo ancora il
codice precedente sostituendo resume con resume riprova , cioé
invece di ritentare l'operazione che ha generato l'errore, ripartiamo
con l'istruzione successiva alla label riprova.
- sub
command1_Click()
- On error
goto ErroreFunzione
- ...
- ...
riprova:
- ...
- codice della
routine
- ...
- exit sub
- ErroreFunzione:
- if err = 71
then
- msgbox
"Inserisci il floppy disk nel drive A"
- resume
riprova
- else
- msgbox
"Errore n." & err & ": " & error$
- end if
- end
Sub
QUANDO
UN ERRORE RICHIAMA LA PROCEDURA
CHIAMANTE
Supponiamo di avere 3 procedure R1,
R2 ed R3. La R1 richiama la R2 che a sua volta richiama R3. Solo in
R1 c'é l'error trap. Cosa succede quando si verifica un errore
in R2 o R3?. Semplicemente che il flusso del programma va nel codice
che controlla l'erro re di R1: nel caso di resume next o resume, il
programma ritorna nella routine R2 o R3 che ha generato l'errore. Se
sia R1 sia R2 hanno un error trap e l'errore si verifica in R3, il
programma va nel controllo errore di R2. In pratica il controllo
dell'err ore avviene 'a cascata', facendo in modo che il flusso del
programma ritorni al primo controllo d'errore di una delle routine
chiamanti. Ovviamente se nessuno ha un error trap, il programma in
caso d'errore viene abortito. Schema del passaggio d'errore. L'istruzione
Error err viene usata per passare l'errore alla procedure chiamante
per far si che l'errore venga trattato da quest'ultima. Esempio: date
2 routine chiamate R1 e R2, entrambe con trattamento dell'errore, se
un errore si verifica in R2 e nella parte del codice che c ontrolla
l'errore c'è Error err , il flusso del programma ritorna a R1,
il quale ricevendo un errore da R2, esegue a sua volta le istruzioni
di trattamento dell'errore. Per
finire alcuni consigli: non inserire gli error trap dappertutto ma
solo nei punti necessari come nel trattamento dati con database;
quando ce ne sono troppi la velocità di esecuzione ne risente
negativamente. centralizzare la procedura di controllo dell'errore in
modo da usare sempre la stessa evitando di duplicare inutilmente del
codice.
DataRegion
|