+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Scrittura log Errori

  1. #1
    bertelli.davide non è in linea Scolaretto
    Buongiorno a tutti.

    Sto scrivendo in una sub pubblica "WriteErr (byval myErr As ErrObject)" e vorrei avere le informazioni che identificano dove si è verificato l'errore.
    la proprietà err.source mi ritorna solo il nome del form mentre avrei bisogno "Form_xxx.Button_n_Click()" senza doverlo scrivere come parametro da passare alla WriiteErr.
    Qualche idea?
    Grazie
    D.

  2. #2
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    come gestisci l'errore? nel form chiamante intendo.
    avrai un
    on error goto GESTIONE_ERRORE
    
    ed un
    GESTIONE_ERRORE: <codice di gestione dell'errore>
    
    giusto?
    e in questo codice di gestione errore avrai un richiamo alla WriteErr, giusto?
    gli puoi passare il controllo attivo che ha generato l'errore, ma dipende da come gestisci la form

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Quote Originariamente inviato da bertelli.davide Visualizza il messaggio
    Buongiorno a tutti.

    Sto scrivendo in una sub pubblica "WriteErr (byval myErr As ErrObject)" e vorrei avere le informazioni che identificano dove si è verificato l'errore.
    la proprietà err.source mi ritorna solo il nome del form mentre avrei bisogno "Form_xxx.Button_n_Click()" senza doverlo scrivere come parametro da passare alla WriiteErr.
    Qualche idea?
    Grazie
    D.
    Non esiste nulla che ti dica quale evento ha generato errore..., anche perchè se ci pensi... non sono solo gli Eventi degli Oggetti a generare errori, ma anche le Sub o le Function, e magari anche quelle contenute in Istanze di Classe, ancora più complicate da centrare...

    Quindi se vuoi centralizzare una gestione errori, ma magari spiegaci il FINE di questa cosa, perchè su tutti i libri viene data come indicazione la Centralizzazione della gestione errori, salvo non spiegare bene il fine con cui realizzare la cosa... e non è così banale appunto...

    Esempio, io centralizzo gli errori ai fini di fare un LOG per DEBUG, ma non per prendere azioni o contromisure sul codice, quello lo lascio sempre nella gestione errori specifica...!

    Es:
    Option Compare Database
    Option Explicit
    
    Const cModName                      As String = "NomeModulo/NomeForm/NomeClasse"
    Const cObjType                      As String = "Modulo/Form/Classe"
    
    Public Function NomeFunction(Param1 As Integer, Param2 as....ecc) As Long
        Const cProcName = "NomeFunction"
        On Erro Goto Err_Handler
        sParam=(Param1 & vbNullstring) & "|" & (Param2 & vbNullstring) & "|" ....
       
        ' quì tutto il tuo codice....
    
    EXIT_HERE:
        On Error Resume Next
        Err.Clear
        Exit Function/Sub
    
    Err_Handler:
        Select Case Err.Number
            Case 3011:
                 ' Eseguo le Azioni specifiche di questo errore
                 ' se serve genero quì il msgBox
            Case Else
                 ' se serve genero quì il msgBox
        End Select
        Call GestErrori (Err.Number,Err.Description,cObjType, cModName, cProcName, sParam)
        Resume EXIT_HERE
    End Function
    
    Poi nella Function solitamente gestisco solo il LOG dell'evento senza interferire e solo se Abilito da Registro la generazione dei LOG.
    Puoi salvare in un file esterno o in una Tabella, come preferisci...!

    La centralizzazione degli errori non è utile a PRESCINDERE... se devi operare specificatamente nell'oggetto io non disperderei codice nella parte centralizzata, perchè dovresti scrivere tanto codice per differenziare troppe condizioni.

    La struttura che ti ho esposto, va inserita in QUALSIASI Sub/Function presenti nel codice, Eventi inclusi... di tutti gli Oggetti.

    Vedi tu...
    ℹ️ Leggi di più su @Alex ...

  4. #4
    bertelli.davide non è in linea Scolaretto
    Grazie Alex. Messaggio "Digerito"!

    Vedi Alex, c'è sempre qualche cosa che sfugge nel debug del codice che si srive, soprattutto se scrittore e revisore sono lo stesso soggetto....
    Vorrei tenere traccia di eventuali errori "sfuggiti" ma mi rendo conto che per poi capire che diavolo sia successo ed intervenire, dovrei registrare tutto quello che è successo....
    L'intento è quello di fare in modo di sapere il form o il modulo, l'evento o la sub o la function in cui si è verificato l'errore (Visual basic ---> Visualizza ---> Stack chiamate - Ctrl+L) e scriverlo in un log per futura analisi.

  5. #5
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Infatti è lo stesso motivo per cui io Genero Log completi come ti ho esposto, quello a mio avviso è l'unico senso pieno.

    Come ti ho brevemente accennato, i parametri che passo alla
    Call GestErrori (Err.Number,Err.Description,cObjType, cModName, cProcName, sParam)
    
    sono indispensabili per fare un minimo di DEBUG specifico, ovviamente non sono tutti... se hai una Gestione Utenti con privilegi serve salvare anche quelli ed altre variabili Ambiente utili.

    Puoi anche realizzare uno Stack chiamate ovviamente in modo "intelligente" usando le Collection e poi salvando il Blocco di chiamate... però non c'è nulla di predefinito, serve costruirsi qualche strumento di sviluppo che poi si riutilizzerà sempre, almeno chi scrive codice discreto dovrebbe farlo ;-)
    ℹ️ Leggi di più su @Alex ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 01-09-2011, 16:14
  2. Errori OLE DB
    Da moscardo911 nel forum Microsoft Word
    Risposte: 0
    Ultimo Post: 17-01-2011, 21:22
  3. Gestione Errori
    Da I_Am_ToO_SeXy nel forum Visual Basic 6
    Risposte: 4
    Ultimo Post: 02-08-2005, 09:08
  4. Gestione Errori
    Da Maxorl nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 03-08-2004, 13:03
  5. Errori
    Da Bavvy nel forum Visual Basic 6
    Risposte: 1
    Ultimo Post: 30-01-2004, 12:31