Newsgroup: it.comp.lang.visual-basic
Titolo: [Forse OT] [VB6] - Organizzazione della gestione dell'errore in una funzione

ciao a tutti.
stavo scrivendo una funzione e mi sono accorto che devo gestire una
serie di errori. se c'è un errore non devo proseguire con la funzione ma
chiudere eventuale connessione, distruggere eventuali oggetti, ecc...
il problema sta nel fatto che, per esempio, non devo chiudere una
connessione se la connessione è stata passata, ed altre cosette.
visto che mi stavo perdendo in me stesso, ho chiesto ad un collega, che
mi ha suggerito la seguente soluzione.
la posto in modo da avere confronti e, perchè no, avere una gestione
dell'errore più bella possibile.
la sua idea è la seguente:
***************************************************************
Dim ErrLevel as integer
ErrLevel = 0
On error goto LabelErrore
codice codice codice
if c'è errore then
    ErrLevel = 1
    err.raise
end if
if c'è errore then
    ErrLevel = 2
    err.raise
end if
exit function
LabelErrore:
select  case ErrLevel
    case 1
        faccio quello che mi serve per questo stadio
    case 2
        faccio quello che mi serve per questo stadio
    case else
        errore non gestito
end select
***************************************************************
al limite posso definire delle costanti/enum a livello di funzione per
gli errori (senza dover incasinarmi con i numeri )
che ne dite?

Ciao,
Per natura io sono portato a gestire gli errori lì dove capitano.
Trattandosi di VB6, tuttavia, miracoli non si possono fare... <G>
In ogni caso, l'idea di base è che potresti farti una mini-gestione delle
eccezioni in questo modo:
-Crei una classe "Errore", con varie proprietà( Numero errore, testo
messaggio, ecc ). Poi quando stai per fare Err.Raise, costruisci la
classe dell'errore e nella label di gestione degli errori controlli
il numero di errore, il testo del messaggio ecc.
Sistemi più complessi potrebbero anche prevedere la possibilità
di avere una collezione di classi errore ed altre amenità.
Questo diciamo che è il sistema più usato nella maggior parte
dei linguaggi "moderni".
Che ne pensi?
Ciao
Andrea

 On error goto LabelErrore
Più che goto labelerrore direi resumenext: se fai il goto vai alla gestione
dell'errore prima di aver impostato l'errorlevel.
forse però è meglio lasciare il goto e fare:
errlevel = 1
codice che può generare l'errore a livello 1
errlevel = 2
codice che può generare l'errore a livello 2
e così via
Però, in fondo in fondo, è possibile che sia stata progettata male la routine:
forse sarebbe meglio averne una separata per ogni operazione, ciascuna con la
sua gestione errori
Salutoni
Sergio

The DeerBear wrote:

Se ho ben capito, tu dici di usare il sistema che ho proposto, ma di
utilizzare una classe anzichè la variabile,
in modo da avere n proprietà (ad esempio per fare un msgbox  specifica)
giusto?
Se così fosse, ok.
idee diverse?
Forza gente :-))

 Sergio
anche a te
Daniele

 end select
    codice codice codice
    On error goto Errore_1
    codice codice codice
    On error goto Errore_2
    codice codice codice
    Exit Function
Errore_1:
    Select Case Err.Number
    Case 1, 2, 3...
    Case 4, 5, 6...
    End Select
    Exit Function
Errore_2:
    Select Case Err.Number
    Case 1, 2, 3...
    Case 4, 5, 6...
    End Select
    Exit Function
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net