Funzione ERL che restituisce sempre 0

di il
6 risposte

Funzione ERL che restituisce sempre 0

Per la gestione degli errori, utilizzo il classico  On Error Goto eh_NomeRoutine    all'inizio del codice di una funzione/procedura  e sul piede ci metto il codice per avviare la schermata che gestira'  l'errore avvenuto

Una cosa del tipo:

-----------------------------------

Function Trova_ID() as long
10        On Error GoTo eh_Trova_ID

20        Debug.print "----"

30        impossibbole = 10 / 0

40        Debug.print "----"

50        Exit Sub

eh_Trova_ID:
70       msg_err err.Number, Erl, Error, "Trova_ID of Documento VBA Form_frmPeppe"
80       Resume Next

End Sub

-----------------------------------

Access 2024, 64bit, su Win10pro

Ovviamente alla riga 30 va in errore, ma quando parte l'esecuzione funzione MSG_ERR alla riga 70, il secondo parametro passato e' sempre zero

Solo su alcuni pc (su altri funziona), la funzione Erl mi restituisce sempre 0, come mai?

Ho provato sia l'accde  che l'accdb che l'accdb dentro Access, e da lo stesso sempre 0, sembra che la Erl non funzioni

Questo lo fa solamente su alcuni pc, nella maggior parte dei casi (su altri pc)  la Erl funziona perfettamente

Da cosa potrebbe dipendere sta Erl che mi restituisce sempre zero?

6 Risposte

  • Re: Funzione ERL che restituisce sempre 0

    Ho chiesto alla IA riguardo Erl. Mi ha risposto così:

    La funzione VBA Erl in Access restituisce il numero di riga in cui si è verificato un errore. È essenziale per il debug, specialmente in routine complesse, ma funziona solo se si numerano le righe di codice. Restituisce 0 se non ci sono numeri di riga o se l'errore avviene fuori da una riga numerata. 

    IProgrammatori.it +3

    Aspetti chiave della funzione Erl:

    • Necessità di numerazione: È necessario numerare le righe di codice manualmente o con strumenti (es. Total Visual CodeTools) affinché Erl identifichi la posizione esatta.
    • Utilizzo nel Gestore Errori: Si usa tipicamente nella sezione di gestione errori (ErrorHandler) per sapere esattamente quale riga ha causato il problema.
    • Contesto 64-bit: Su alcune installazioni a 64-bit, Erl potrebbe restituire sempre 0. È fondamentale testare il codice in ambiente di produzione. 

      IProgrammatori.it +3

    Esempio di utilizzo:

    vba

    Sub EsempioErl()
        On Error GoTo ErrorHandler
        
    10: Dim x As Integer
    20: x = 10 / 0 ' Genera errore di divisione per zero
        
        Exit Sub
    
    ErrorHandler:
        MsgBox "Errore " & Err.Number & " alla riga " & Erl() & ": " & Err.Description
    End Sub
    

    Consigli utili:

    • Utilizzare l'istruzione Erl insieme a Err.Number e Err.Description per un debug completo.
    • Verificare che il database sia compilato correttamente per massimizzare la precisione di Erl.
  • Re: Funzione ERL che restituisce sempre 0

    Si, avevo gia' usato anch'io una ia per chiedere, ed ottenuto la stessa tua risposta

    Che non aggiunge informazioni utili alla soluzione problema

  • Re: Funzione ERL che restituisce sempre 0

    Avevo avuto modo di usarlo, più per curiosità che per reale utilità, ma senza grandi esiti...

    In ogni caso trovi qualche indicazione di anomalie spesso riconducibili al problema che hai esposto:

    https://stackoverflow.com/questions/62942335/erl-function-not-working-in-64-bit-o365-excel-vba

    https://www.experts-exchange.com/questions/29215170/ERL-issue-in-64bit-access.html 

    Avevo letto, ma non ritrovo il link, che il problema di ERL() derivasse da un problema di riconoscimento del NumeroLinea inserito... dipendente spesso da come venisse inserito il Numero, quindi dall'editor più che altro.


    In sostanza prova a scrivere la funzione da ZERO già inserendo i numeri di riga da subito, non modificando la Funzione dopo averla scritta, oppure, taglia il codice incollalo in Notepad, quindi riportalo in VBA, compila e riprova...

  • Re: Funzione ERL che restituisce sempre 0

    Si, cercando un po' in rete ho visto le indicazioni ai link che hai consigliato

    Quel che trovo strano e' che su alcuni pc, lo stesso programma, con lo stesso runtime, si comporta in un modo e ti mostra il numero linea errore, mentre su altri il numero linea non te lo da' mai, stesso programma e stesso runtime installato 

    Non e' solo questione di versione Access usata, perche' se fosse cosi si dovrebbe comportare sempre nello stesso modo

    C'e' qualcosa anche a livello di configurazione del computer/sistema operativo, che influenza in modo negativo il valore reswtituito dalla Erl()

    L'idea di inserire direttamente i numeri linea durante la scrittura del codice l'ho appena provata, su uno dei pc dove Erl() restituisce sempre zero, e pero' continua a restituire zero, e quindi non funziona

    Da qui la domanda successiva:  come fa VbWatchdog a restituire il numero linea anche sui pc dove Erl() non funziona?

    Volendo fare la mia Erl_new()  da dove iniziare?

  • Re: Funzione ERL che restituisce sempre 0

    In uno dei 2 Link che avevo inserito mi pare ci fosse un WorkAround per realizzare la stessa cosa... anche se lo trovo scomodo e pesante, ma sicuramente efficace.

    Private TuaFunction(param1 as ...) As ...
    	Dim line_nr As Long
    
        line_nr = 10
        FrobnicateFoo()
        line_nr = 20
        ...
    	Exit Function
    	
    error_handler:
        If line_nr = 10 ...

    In sostanza inizializzi un Contatore che incrementi ad ogni riga o Blocco di codice significativo.

  • Re: Funzione ERL che restituisce sempre 0

    Certo, la soluzione e' fattibile ma mi sembra troppo onerosa come sforzo inserimento del codice aggiuntivo

    Se hai 10 righe istruzioni, devi anteporre 10    "line_nr=..."  diverse

    A meno che l'inserimento dell'assegnazione col valore incrementale non sia automatizzabile, mi sembra possibilita' non efficace

Devi accedere o registrarti per scrivere nel forum
6 risposte