Newsgroup: it.comp.lang.visual-basic
Titolo: On Error dove vai?

Nella documentazione di VB5 dice che On Error GoTo deve rimandare a una
etichetta presente nella stessa Routine che ha generato l'errore. Perchè
allora in codice come quello sotto se nella procedura RichiamaUnaRoutine si
verifica un errore va a xxxxx?
Sub RichiamaUna Routine
.........
End Sub
Sub Xyz
On Error GoTo xxxxx
Chiama una CommonDialog
.....
RichiamaUna Routine
....
Exit sub
xxxxx:
......
Exit sub
End Sub
Ho le idee molto confuse in proposito. Grazie a chi potrà chiarirmele.
Francesco

No, On Error rimanda al gestore di errori della funzioni in cui questo č
definito solo
se č stato definito. Altrimenti risale lo stack delle chiamate fino a
trovare il gestore
di errori scelto. E se alla fine non lo trova utilizza il gestore di errori
di VB.
Ossia, se sono nella situazione:
(Leggi "->" come "chiama")
Main->sub A (che definisce un On Error) -> sub B -> Sub C (e qui si
manifesta un errore runtime)
allora verrŕ utilizzato il gestore di errori di Sub A
Se invece
    Main->sub A (che definisce un On Error) -> sub B -> Sub C (che definisce
un On Error e qui si manifesta un errore runtime)
allora verrŕ utilizzato il gestore di errori di Sub C.
Se perň in Sub C si manifestano 2 (o piů errori) senza aver prima
riabilitato il gestore
di errori corrente (con una Resume), si scatena ancora la ricerca a ritroso
nella
catena delle chiamate.
Quindi, nel secondo caso, se oltre al primo errore (gestito in Sub C) se ne
manifesta un
secondo (magari proprio nel gestore di errori di Sub C), immediatamente
scatta il
gestore di Sub A.
Non so se č chiaro, ma + o - le cose fanno cosě...
Saluti, Massimo.
P.S. gli errori runtime č meglio prevenirli che curarli (come l'AIDS)!

allora verrà utilizzato il gestore di errori di Sub A
Penso proprio che le cose non stiano proprio così, magari!!!
Nel caso che hai detto tu l'esecuzione del programma si blocca in C e basta.

Grazie, sei stato chiarissimo e adesso ho risolto il dubbio che avevo. A
parte la faccenda dell'AIDS, non sono cosě pessimista, anche se scrivo
codice a zampa di gallina...
Francesco


Perche la Sub "RichiamaUna Routine" viene chiamata dall'interno della
routine Xyz dopo che tu hai indicato "On Error GoTo xxxxx", che rimane
quindi l'ultima istruzione "on error" valida.
Se vuoi evitare questo "inconveniente" devi inserire, prima di
chiamare la routine o nella routine stessa, un ulteriore instruzione
di controllo errore, ad esempio:
On Error GoTo xxxxx
Chiama una CommonDialog
.....
On Error resume next 'o altro metodo di gestione errore, che annulla
la gestione errore precedente
RichiamaUna Routine
On Error GoTo xxxxx 'ripristina la gestione errore
....
Exit sub
xxxxx:
......
Exit sub
End Sub
oppure
Sub RichiamaUna Routine
on error resume next (o quello che vuoi tu)
..........
End Sub
--------------------------
Luigi Lando
mailto : 
lu...@telemar.it
--------------------------
Make things as simple as
possible - but no simpler.
--------------------------

 wrote in message 7nrr7s$5q1$1...@nslave1.tin.it...

Da quanto (mi sembra di aver letto sulla documentazione di VB) le cose
stanno
come ho detto.
Però la cosa migliore è fare una bella prova!
Saluti, Massimo ;-)

 Però la cosa migliore è fare una bella prova!
Concordo con te: a me si verifica quello che dici: per ovviare basta
fare:
On LOCAL Error ........
Ciao
Brando
-- 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Sito comune di it.lang.vb  :  
http://www.murialdo.it/it_lang_vb
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Toh! C'e' anche l' "On Local Error"!
Azz.. non si finisce mai di imparare!
Saluti, Massimo :-))

 verifica un errore va a xxxxx?
Usa: On local Error goto xxxxx
per avere la gestione dell'errore limitata alla sola routine in cui è
posto tale comando.