Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [VB6] Gestione errori a dir poco scandalosa

    Mi è capitato di dover fare una gestione errori in un'applicazione in modo da poter continuare il funzionamento senza però interrompere il processo.

    Basandomi sulle mie conoscenze della gestione errori di VB6 (che ricorda un pò il basic del commodore 64) ho fatto una cosa fatta bene, precisa e concisa, pure un pò circoncisa

    Allora, nonostante tutto continuavano ad escire degli errori, che oltretutto erano gestiti...

    Teoricamente in caso di errore doveva analizzarlo, loggarlo e passare al ciclo successivo.

    Invece cosa fa? Analizza l'errore, lo logga e rimanda al ciclo successivo solo la prima volta!

    Se riesce l'errore lo caccia fuori come se non fosse stato gestito.

    Non volendo crederci mi sono fatto questo progetto di test con il solo Form_Load:

    codice:
    Private Sub Form_Load()
    Start:
        On Error GoTo Errore
        If Len("ciao") > 0 <> "" Then
            MsgBox "Ciao"
        End If
        On Error GoTo 0
    Exit Sub
    Errore:
        MsgBox "Errore"
        Err.Clear
        GoTo Start
    End Sub
    In teoria dovrebbe andare in loop, perché If Len("ciao") > 0 <> "" Then mi darà sempre errore e visto che nella gestione lo rimando a Start: è un rimbalzo fra procedura e gestione errori.

    In pratica la prima volta mi entra in Errore: e mi esce la msgbox "Errore", la seconda volta l'errore invece me lo da a video...

    Bello eh?

    Avete suggerimenti?

  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Debiru,
    così funziona:

    codice:
    Private Sub Form_Load()
    Start:
        On Error GoTo Errore
        If Len("ciao") > 0 Then
            MsgBox "Ciao"
        End If
        'On Error GoTo 0
        'Exit Sub
    Errore:
        MsgBox "Errore"
        Err.Clear
        GoTo Start
    End Sub
    LM

  3. #3
    ho visto che invece del Goto Start devi mettergli Resume Start...

    così:
    codice:
    Private Sub Form_Load()
    Start:
        On Error GoTo Errore
        If Len("ciao") > 0 <> "" Then
            MsgBox "Ciao"
        End If
        On Error GoTo 0
    Exit Sub
    Errore:
        MsgBox "Errore"
        Err.Clear
        Resume Start
    End Sub
    questo perchè con on error goto errore lo rimandi ad errore, ma quando in errore gli fai goto Start è come se tu gli dicessi semplicemente vai a start...
    invece con Resume Start è come se dicessi Ricomincia da Start e dimentica ciò che è successo prima...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  4. #4
    LMondi, guarda che il tuo codice va in loop perenne anche se l'errore non c'è...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  5. #5
    ultima modifica... ho visto che il Resume già di suo ti pulisce l'errore... io gli farei semplicemente:

    codice:
    Private Sub Form_Load()
    Start:
        On Error GoTo Errore
        If Len("ciao") > 0 <> "" Then
            MsgBox "Ciao"
        End If
        On Error GoTo 0
    Exit Sub
    Errore:
        MsgBox "Errore"
        Resume Start
    End Sub
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  6. #6
    rileggendo bene il post di LMondi ho notato che ti ha corretto l'errore.... forse non aveva capito che l'errore glielo avevi messo apposta tu per farlo andare in errore... e volevi delucidazioni sul perchè succedeva il problema descritto...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  7. #7
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    LMondi, guarda che il tuo codice va in loop perenne anche se l'errore non c'è...
    Perchè ti meravigli - data la presenza di GoTo Start - ?

    In teoria dovrebbe andare in loop, perché If Len("ciao") > 0 <> "" Then mi darà sempre errore e visto che nella gestione lo rimando a Start: è un rimbalzo fra procedura e gestione errori.
    LM

  8. #8
    Ripeto, l'errore è stato creato apposta per far vedere che la seonda volta faceva uscire l'errore vero e proprio invece del msgbox personalizzato...

    spero tu non ti sia offeso perchè ho detto che la tua soluzione era sbagliata...
    Bombardare per la pace, è come trombare per la verginità.

    C'è qualcuno al mondo che tromba troppo secondo me...

    Andrea Medici

  9. #9
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    spero tu non ti sia offeso perchè ho detto che la tua soluzione era sbagliata...
    ma ti pare ...

    Personalmente il gestore degli errori lo imposto in modo diverso, così come lo ha scritto entrerà sempre in errore.
    LM

  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Debiru,
    prova in questo modo:
    codice:
    Private Sub Command1_Click()
        On Error GoTo ErrHandler
        If Len("ciao") > 0 <> "" Then
            MsgBox "Ciao"
        End If
    
    ErrHandler:
        If Err.Number <> 0 Then
            MsgBox Err.Description & Chr(13) _
            & "Si è verificato un errore nella procedura ...", vbInformation, "...."
            Err.Clear
        End If
    End Sub
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.