|
La gestione degli errori Il codice per la gestione degli errori è
la parte meno entusiasmante della programmazione.Si tratta di codice che in
apparenza non fa nulla di ecclatante, rimane il fatto ,tuttavia, che un programma che non
prevede un codice per la gestione degli errori ben progettato sicuramente
provocherebbe il malcontento degli utenti nei confronti del programmatore, ciò premesso
veniamo a qualcosa di più concreto.
Ecco un'elenco di alcuni tra i più comuni errori :
Inserimento di una stringa a un prompt per la richiesta di un numero
Inserimento di dati che portano a un tentativo di divisione per zero
Tentativo di lettura di un file che non si trova più sul disco
l'elenco potrebbe continuare.
Contro questi errori il programmatore può solo dotare il programma di un
codice per la gestione degli errori.Questo compito si può svolgere sfruttando le
caratteristiche di VB per l'intercettazione degli errori.Se il programma viene eseguito
all'interno dell'ambiente di sviluppo viene visualizzata una finestra
di dialogo che descrive l'errore .La finestra visualizza il numero di
errore e una breve descrizione,il programma resta sospeso e se si preme fine
termina se si fa click su debug il cursore viene posto sulla linea di codice
che ha provocato l'errore e si può modificare tale codice e premere
poi F5 per riprendere l'esecuzione del programma.
Se invece si esegue un programma come EXE gli errori non intercettati vengono
visualizzati in una finestra ma non è possibile modificare il codice e continuare
l'esecuzione . Quindi in conclusione gli utenti si troverebbero ad avere a che fare con un
programma che non funziona e questa situazione va evitata tramite l'intercettazione
degli errori.
Intercettazionione degli errori
L'intercettazione degli errori per alcuni aspetti è simile alla
gestione degli eventi.La differenza sta nel fatto che un errore non innesca una routine di
eventi discreta e quindi bisogna avvalersi dell'istruzione On Error per specificare
a che punto del codice saltare se si verifica un errore.Ad es. l'istruzione On
Error Goto Errori significa che se si verifica un errore l'esecuzione deve
proseguire alla riga di codice identificata dall'etichetta Errori ,le
etichette consistono di un nome seguito da due punti es. Errori: .Il codice per la
gestione degli errori di solito di una routine viene inserito alla fine della riutine
stessa prima di End Sub.Bisogna ricordarsidi inserire l'istruzione Exit Sub prima
dell'etichetta che identifica il codice di gestione degli errori per impedire
che l'esecuzione prosegua con il codice di gestione dell'errore.
L'istruzione On Error ha due forme 1) On Error Goto 0 con questa si disattiva la
gestione degli errori. 2) On Error Resume Next il programma continua l'esecuzione
con l'istruzione successiva a quella che ha generato l'errore. Vediamo ora un es. di
codice per l'intercettazione degli errori in una routine.La routine non contiene
vero codice ma solo le istruzioni che intercettano l'errore e i commenti.
Private Sub DemoErrori( )
A questo punto prima di qualsiasi On Error sia eseguito gli errori saranno
indicati dalla finestra di dialogo secondo un'impostazione predefinita.
On Error Goto GliErrori:
Qui quando si verifica l'errore l'esecuzione passa al punto identificato
dall'etichetta Gli Errori.
On Error Goto 0
Qui il codice di intercettazione non è attiva gli errori sono notificati nella
finestra di dialogo predefinita.
On Error Resume Next
Qui il codice di intercettazione viene rimandata.
On Error Goto GliErrori:
Qui l'intercettazione è nuovamente diretta al codice che segue l'etichetta
GliErrori. Exit Sub è richiesta , in questo modo l'esecuzione non ricade nel codice di
gestione dell'errore seguente.
Exit Sub
GliErrori:
Il codice di gestione degli errori si trova qui.
End Sub |
L'oggetto ERR A ogni programma VB viene assegnato
automaticamente un singolo oggetto ERR, visibile globalmente e accessibile
quindi da ogni parte del programma.Le proprietà dell'oggetto ERR che srvono
più spesso sono:
Namber : un intero di tipo long che identifica l'errore verificato
Description: descrive l'errore
Source : stringa che identifica il nome dell'oggetto oppure l'applicazione che lo ha
generato.
Le prime due contengono lo stesso codice numerico e la stessa descrizione che
vengono presentati nella finestra di dialogo visualizzata quando avviene un errore e
la gestione degli errori non è abilitatà.La proprietà Source non è molto usata
internamente a una'applicazione perchè fornisce solo il nome del progetto VB; è
più utile quando si dispone di oggetti esterni Un errore tra i più diffusi
è quello che avviene quando si cerca di aprire un file su un dischetto senza che
questo sia stato inserito.Il n. di errore è 71.
Esempio:
Private Sub SaveData ( )
Dim f as long
On Error Goto FileError
f = FreeFile
Open "a:\junk.dat"
For Binary As #f
Qui viene inserito il codice per scrivere i dati .
Close #f
Exit Sub
FileError:
If Err.Number =71 Then
MsgBox ( " Si inserisca un dischetto nel drive A:, quindi si prema Ok")
Resume
End If
End Sub
Il codice proposto funziona ma non lo si può usare in un programma vero ,
perchè se si verifica un errore diverso l'esecuzione passa a FileError, ma la condizione
IF non sarebbe True e di conseguenza le istruzioni associate non verebbero
eseguite. Al contrario l'esecuzione uscirebbe dalla routine e l'errore non sarebbe
gestito. Questo significa che bisogna creare un gestore di errori più
generico non così specifico altrimenti si dovrà scrivere molto codice per far fronte a
ogni possibile errore |
L'istruzione Resume Quando viene usata senza argomenti l'esecuzione riprende
dall'istruzione che ha causato l'errore, se invece si desidera che l'esecuzione riprenda
da un punto diverso esistono due possibilità:
Resume Next - fa riprendere l'esecuzione dall'istruzione immediatamente successiva
rispetto a quella che ha causato l'errore.
Resume Label -fa riprendere l'esecuzione a partire dalla riga identificata
dall'etichetta.
Private sub SaveData ( )
Dim f As Long, Reply As Integer
Dim msg As String
On Error Goto FileErrori
f = FreeFile
Open "a:\junk.dat" For Binary As #f
Il codice per scrivere i dati si inserisce qua.
Close #f
Exit Sub
FileErrori:
if Err.Number = 71 Then
msg ="Inserire un disco nel drive A e fare click su riprova"
msg = msg & Chr$(13)
msg =msg & "Oppure fare click su cancella per riprovare dopo"
Reply = vbRiprova Then
Resume
If Reply = vbCancella Then
Resume Finish
End If
Collocare qua un'altro errore di gestione del codice
Finish:
End If
Exit Sub |
L'istruzione On Resume Next Quando questa istruzione è attiva e si verifica un errore
l'esecuzione prosegue dall'istruzione
successiva a quella che ha causato l'errore.
Private Sub AccessObjet ( )
Dim MyObj As Objet , msg As String
On Error Resume Next 'Rimanda l'interc. dell'errore
'Cerca di avviare un oggetto che non esiste
MyObj = GetObjet ("MyWord.Basic")
'Test per identif. l'errore 432
If Err.Number =432 Then 'errore di automazione ole
' dire all'utente cosa è accaduto
msg =" Si è verificato un errore nel tentativo di aprire l'oggetto OLE1"
msg = msg & Chr$(13)
msg = msg & "Fonte di errore: " & Err.Source
msg = msg & Chr$(13) & "n. di errore: " & Err.Number
MsgBox (msg)
'cancellare le proprietà Err dell'oggetto
Err.Clear
End If
End Sub |
Errori definiti dall'utente Generazione di errori personalizzati. Si attribuisce
un n. di errore non utilizzato a un'occorrenza che si desidera considerare un
errore.Quando si verifica la condizione di errore si applicherà il metodo Raise per
generare l'errore e gli usuali medoti di gestione dell'errore per trattarlo ( On
Error Goto e Resume ) . Esempio
Private Sub Form_Click ( )
Dim buf As String
On Error Goto ErrorHandler
GetData:
buf = InputBox ("Inserisci qualsiasi nome eccetto Giovanni ")
If buf ="Giovanni" Then Err.Raise 1234, , "Nome errato"
MsgBox ("Grazie")
Exit Sub
ErrorHandler:
If Err = 1234 Then
MsgBox (Err.Description)
Resume GetData
End Sub
I numeri di errore fino al 1000 sono riservati a VB.
|
|
|
|
|