Newsgroup: it.comp.appl.access
Titolo: nome della funzione chiamante/chiamata

ciao, sto realizzando un personale sistema di logging
sapete mica suggerirmi il nome di qualche funzione o altro che mi consenta 
di sapere quale funzione ha generato una chiamata?
mi spiego con un esempio:
function funzioneA()
[..]
    funzioneB()
[..]
end function
public function FunzioneB()
[..]
*
[..]
end function
c'è un modo quando sono in * di sapere che funzioneB è stata chiamata da 
funzioneA senza l'uso di parametri passati esplicitamente?
grazie mille


No, Access non può nemmeno immaginare di gestire lo Stack delle
chiamate.
Puoi realizzartelo tu una sorta di Registro 
LI.FO
 con una Funzione
Public nella quale gestisci una Collection e giochi sugli AddItem e
RemoveItem....
In questo modo sai sempre qual'è la funzione chiamata prima di quella
in cui ti trovi(e dove dovrai tornare)...
Ovviamente dovresti implementare in tutte le Function/Sub l'ENTER e
l'EXIT per aggiornare la collection.
Concretamente però a cosa servirebbe una cosa simile....? Mi sembra
tanto una stranezza....
@Alex

ho disseminato nel codice una serie chiamate ad una funzione di loggin (LOG) 
con un parametro di severità (LIVELLO) che vengono "attivate" in base ad una 
variabile globale di "sensibilità" (LOGGIN_LEVEL)
Mi farebbe comodo trascrivere in automatico la funzione chiamante senza 
doverla specificare ogni volta come parametro
interessa?
vuoi migliorare l'idea?
il mio lavoro è più o meno questo
Option Compare Database
Option Explicit
' questa libreria si occupa della gestione degli errori e delle notifiche
Const LOGGING_TABLE = "$logs"                    ' nome della tabella 
destinataria dei log
Const LOGGING_LEVEL_default = 30                 ' ovvero se la 
LOGGING_LEVEL non è stata ancora specificata usa questo valore
Const LOGGING_LEVEL_NOTYETDEFINEDFORAEVENT = 40  ' valore da usare se si 
cerca un valore nello storico eventi e non c'è
Dim LOGGING_LEVEL                                ' sensibilità di logging, 
più sarà alto questo valore più la funzione di log scriverà
' definisco così i vari livelli di log perchè se dovessi usare enum mi 
sarebbe più difficile aggiungere e gestire altri valori
Public Const LOGGING_LEVEL_INSANE = 255          ' questo non lo userò mai
Public Const LOGGING_LEVEL_HARD = 200            ' per controllare tutto
Public Const LOGGING_LEVEL_INTENSIVE = 150       ' un po' più accurate
Public Const LOGGING_LEVEL_DEBUG = 100           ' per operazioni di debug 
normali
Public Const LOGGING_LEVEL_ACTIVITY = 50         ' segnalazioni di attività 
del sistema
Public Const LOGGING_LEVEL_INFORMATION = 40      ' segnalazioni solo di 
attività importanti
Public Const LOGGING_LEVEL_WARNING = 30          ' errori auto-corretti, 
correggere i dati solo per sveltire le cose
Public Const LOGGING_LEVEL_ERROR = 20            ' errori generici, dati 
sbagliati intevento utente
Public Const LOGGING_LEVEL_CRITICAL = 10         ' errori gravi
Public Const LOGGING_LEVEL_PANIC = 0             ' da usarsi solo prima di 
un blocco del sistema
Public Function LOG(Funzione As String, Optional Livello As Variant, 
Optional Evento As Variant, Optional Oggetto As String, Optional Parametri 
As String, Optional Descrizione As String) As Boolean
' [Cosa fa questa funzione]
' Restituisce:
'   true    se effettivamente scrive qualcosa in LOGGING_TABLE
'   false   altrimenti
' * Mappe ******************************************************************
' * Variabili locali *******************************************************
    Dim rsL As dao.Recordset    ' rs dei logs
' * Variabili ausiliarie ***************************************************
' * Variabili di monitoraggio e controllo **********************************
' * Requisiti e inizializzazione *******************************************
' * Corpo ******************************************************************
    Set rsL = CurrentDb.OpenRecordset(LOGGING_TABLE)
    If IsMissing(Livello) Then
        If IsMissing(Evento) Then
            LOG "LOG in libreria Logging", LOGGING_LEVEL_CRITICAL, 1000, 
"Chiamata a LOG con parametri non congrui", "Livello=[missing]; 
Evento=[missing]"
            LOG "Recupero log: " & Funzione, LOGGING_LEVEL_ERROR, 1001, 
"Recupero log: " & vbCr & Oggetto, "Recupero log: " & vbCr & Parametri, 
"Recupero log: " & vbCr & Descrizione
            Exit Function   ' non posso fare di più quindi esco in fretta
            Else
            rsL.Index = "Evento"
            rsL.Seek "=", Evento   'cerco l'ultimo evento dello stesso tipo 
per copiarne il livello
            If rsL.NoMatch Then
                Livello = LOGGING_LEVEL_NOTYETDEFINEDFORAEVENT
                LOG Funzione, LOGGING_LEVEL_WARNING, 1002, "Livello 
dell'evento non ancora definito, assegnato di default", "Evento=[" & Evento 
& "]; Livello=[" & Livello & "]"
                Else
                Livello = rsL("livello")
                End If
            End If
        End If
    ' ora sono certo di avere un livello definito
    If IIf(IsEmpty(LOGGING_LEVEL), LOGGING_LEVEL_default, LOGGING_LEVEL) < 
Livello Then Exit Function
    ' ora ho tutti i dati e sono nelle condizioni di poter loggare quanto 
richiesto
    rsL.AddNew
    rsL("Host") = Environ("Computername")
    rsL("Utente_so") = Environ("Username")
    rsL("Utente_db") = Application.CurrentUser
    rsL("DataOra") = Now
    rsL("Evento") = Evento
    rsL("Funzione") = Funzione
    rsL("Livello") = Livello
    rsL("Oggetto") = Oggetto
    rsL("Parametri") = Parametri
    rsL("Descrizione_specifica") = Descrizione
    rsL.Update
    rsL.Close
    LOG = True
' * Riepilogo dell'attività svolta *****************************************
End Function


 il mio lavoro è più o meno questo
[CUT]
@Alex