Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Gestire errore apertura connessione

Gestisco l'errore in apertura di una connessione nel modo seguente:
INIZIO_CONNESSIONE:
On Error GoTo ERRORE_CONNESSIONE
    cn.open
.....................................................................
......................................................................
USCITA:
    Exit Sub
ERRORE_CONNESSIONE:
If MsgBox("Si è verificato un errore durante la connessione a DB2 all'avvio
!" & vbCrLf & "Ritentare la connessione ?", vbYesNo + vbCritical +
vbSystemModal, "Attenzione") = vbYes Then
        GoTo INIZIO_CONNESSIONE
End If
GoTo USCITA
In caso di errore (al primo tentativo), appare il messaggio e l'utente può
ritentare la connessione stessa, ma la gestione dell'errore sembra non
intervenire più e l'applicazione dà un errore di run-time!
Ho provato anche ad aggiungere istruzioni del tipo "err.clear" o
"cn.errors.clear", ma non cambia nulla...
Ringrazio chi mi aiuterà!


 Io farei cosi :
 On Error GoTo ERRORE_CONNESSIONE
 
     cn.open
 
     Exit Sub
 
 ERRORE_CONNESSIONE:
 
 If MsgBox("Si è verificato un errore durante la connessione a DB2 all'avvio
 !" & vbCrLf & "Ritentare la connessione ?", vbYesNo + vbCritical +
 vbSystemModal, "Attenzione") = vbYes Then
         Resume
 End If
Ciao ---> Questo è un saluto non fa parte della procedura!!!
--------------------------------
Inviato via 
http://usenet.libero.it

"cn.errors.clear", ma non cambia nulla...
hai provato con err=0 ?
--
Ciao!
Davide
[DAOC PG]Armorgod Troll Sciamano - Midgard Vortigern[/DAOC PG]

[*Rogis* : 
rogi...@iol.it
] ha scritto:

Mi pare molto strano, ma (a parte che appare comunque cervellotico, quindi
... in tema) la label di errore, alla fine del trattamento dello stesso,
dovrebbe rimandare a un'altra che provvede a un Resume qualcosa (nel tuo
caso Resume inizio__connessione), quindi non direttamente alla label di
continuazione del programma vero e proprio...

  End If
Grazie!


Io lo metterei così:
INIZIO_CONNESSIONE:
On Error GoTo ERRORE_CONNESSIONE
    cn.open
.....................................................................
......................................................................
   Exit Sub
ERRORE_CONNESSIONE:
if err.number = (numero dell'errore per la connessione) then
   If MsgBox("Si è verificato un errore durante la connessione a DB2
all'avvio!" & vbCrLf & "Ritentare la connessione ?", vbYesNo + vbCritical +
vbSystemModal, "Attenzione") = vbYes Then
        On error GoTo 0  'Serve per ripulire ERR da segnalazioni varie di
errore
        INIZIO_CONNESSIONE
   End If
else
  msgbox err.description
  On error GoTo 0
end if
Il GoTo Uscita è inutile.
Se gestisci l'errore


Innanzitutto mai usare l'istruzione GOTO per uscire dalla gestione
dell'errore!
Prova così:
sub xyz....
  On Error GoTo ERRORE_CONNESSIONE
  cn.open
  .....................................................................
  ......................................................................
  Exit Sub
ERRORE_CONNESSIONE:
  If MsgBox("Si è verificato un errore durante la connessione a DB2
all'avvio
    !" & vbCrLf & "Ritentare la connessione ?", vbYesNo + vbCritical +
    vbSystemModal, "Attenzione") = vbYes Then
        err.clear
        resume
  End If
end sub


 Guarda che il problema è stato risolto da un pezzo!!!


 dell'errore!
L'istruzione GoTo USCITA è invece indispensabile e corretta per avere un
unico punto di USCITA dalla procedura, secondo i migliori standard di
programmazione!
Ciao!

 Se gestisci l'errore
In pratica è inutile in questo caso, ma fa comunque parte di una corretta
metodologia di programmazione, che deve prevedere sempre un unico punto di
USCITA dalla procedura.