Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
Guide e Tutorials:indexed
Gestire gli errori: Il comando On Error e l'oggetto Err.
La gestione degli errori è fondamentale in un'applicazione in quanto permette all'utente (che può essere l'autore stesso del programma in fase di test) di ricevere un messaggio che chiarisca il senso dell'errore individuato nell'applicazione o addirittura della chiusura del programma.
Non è considerata una bella cosa infatti non informare l'utente dei problemi riscontrati dall'applicazione, basti pensare al fastidio che può causare un programma che si chiude in modo improvviso e del tutto inspiegabile.
Per superare tali problemi si ricorre appunto alla gestione degli errori, di cui vedremo i concetti essenziali nel corso del presente articolo.
Il modo più comune per gestire le condizioni di errore fa ricorso al comando On Error. Tale comando indica all'applicazione che, in caso di errore il normale flusso del programma dovrà essere abbandonato e dirottato verso un codice appositamente scritto per i casi di errore.
Ad esempio in caso di errore si può istruire l'applicazione a visualizzare una finestra di messaggio con la descrizione dell'inconveniente ed uscire dalla sottoprocedura nella quale è stato individuato l'errore.
In altro modo consideriamo un'ipotetica variabile booleana denominata Errore, che può assumere i valori True e False ossia Vero e Falso, come tutte le variabili di questa categoria. Se in presenza di un errore questa variabile assumesse il valore True, allora la gestione dell'errore potrebbe essere rappresentata dal seguente codice:

If Errore = False Then
'codice dell'applicazione
Else
'codice per la gestione dell'errore
End If

L'istruzione On Error compie lo stesso lavoro di:

If Errore = True Then
'codice per la gestione dell'errore
End If

L'unica differenza sta nel fatto che On Error non include il codice relativo di seguito, ma rimanda ad un blocco di codice successivo. Qui entra in gioco il concetto di etichetta delle linee. Chi ha usato le prime versioni del Basic si ricorderà che ogni linea di codice era numerata, generalmente con interi ad intervalli di 10 operazione che poteva essere compiuta automaticamente con l'istruzione AUTO10.
L'etichetta di linea compie lo stesso lavoro. A differenza del Basic primordiale però in questo caso l'etichetta può avere anche una forma alfabetica ma deve essere sempre seguita dai due punti ':'.
Per chiarire ulteriormente il concetto creiamo una mini-applicazione che perveda una possibilità di errore. Dividiamo il numero 12 in modo successivo per una serie di interi che va da 12 a -12. La divisione di 12 per 12,11,10...3,2,1 non darà problemi. La divisione di 12 per 0 genererà un errore. In tal caso visualizziamo una finestra di messaggio e usciamo dalla sottoprocedura.

Private Sub Form_Load
On Error GoTo Errore
For i = 12 To -12 Step -1
Debug.Print (12/i)
Next i
Errore:
MsgBox "Impossibile dividere per 0"
Exit Sub
End Sub

In questo caso la divisione di 12 si interromperà e il risultato di 12/-1, 12/-2 ecc. non verrà visualizzato.
Come fare per far continuare la sottoprocedura anche nel caso in cui si verifichi un problema? Con l'istruzione On Error Resume Next che impedisce all'applicazione di prendere nota dell'errore per non perdere le operazioni successive della sottoprocedura.
In poche parole On Error Resume Next permette di ignorare l'errore e passare alla linea di codice successiva. Se nell'esempio poco sopra non c'interessa visualizzare l'errore ma si preferisce dare maggiore rilievo alla continuità delle operazioni della sottoprocedura si dovrà modificare il codice in questo modo:

Private Sub Form_Load
On Error Resume Next
For i = 12 To -12 Step -1
Debug.Print (12/i)
Next i
End Sub

Adesso tutte le operazioni saranno compiute regolarmente, tranne la divisione per 0 che, generando un errore, viene ignorata.
Un altro modo per gestire in modo razionale i casi di errori è quello di fare uso dell'oggetto Err. Tramite questo comando si può delegare al sistema il compito di descrivere l'errore. Considerare il seguente codice:

Private Sub Form_Load
On Error GoTo Errore
For i = 12 To -12 Step -1
Debug.Print (12/i)
Next i
Errore:
MsgBox Err.Description
Exit Sub
End Sub

Come si vede questo metodo permette di risparmiare tempo in quanto l'autore dell'applicazione potrà evitare di considerare tutti i casi di errore.
La proprietà predefinita dell'oggetto Err è Number che indica il numero che individua l'errore di run-time nel quale ci si è imbattuti.
Così, mentre utilizzando il metodo Description nel codice d'esempio verrà visualizzato il messaggio 'Divisione per zero', utilizzando Number si visualizzerà il messaggio '11' che rappresenta il codice dell'errore individuato.
Un altro metodo supportato dall'oggetto Err è Source che descrive l'oggetto o l'applicazione che ha generato inizialmente l'errore. Altro metodo è HelpFile che dovrà indicare il percorso completo del file della Guida in linea relativo a questo errore. Se non è specificato, verranno utilizzati l'unità, il percorso completo e il nome del file della Guida in linea di Visual Basic.
Molto importante è ancora il metodo LastDllError che al pari della funzione GetLastError di cui si tratta a parte, ritorna il codice dell'errore causato da una chiamata API. Per conoscere tutti i codici degli errori delle API fare riferimento all'indice analitico.

Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it