vblogo

Programmare con Microsoft Visual Basic 6

Google
nel sito web
Introduzione
Form
Control
Oggetti
Input
Menu
Array
Visualizzazione stampa
Report
File
Errori
Clipboard
DDE
OLE
Database
Sql
Download
Bibliografia

 

 

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:

applicazione 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. trap1L'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. trap2Per 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

Copyright @ 2007 Vince