Vedere tutti i DAO.recordsets creati da codice

di il
4 risposte

Vedere tutti i DAO.recordsets creati da codice

Buonasera, come da oggetto mi piacerebbe sapere se siete a conoscenza di un modo per "elencare" i DAO.recordset creati via codice così da poterne vedere anche le relative proprietà.

Ad esempio speravo che un codice tipo:

    Dim RS As Recordset
    Dim xRS As Recordset
    
    Set RS = CurrentDb.OpenRecordset("SELECT * FROM tbl_logChange;")
    RS.MoveFirst
    
    For Each xRS In CurrentDb.Recordsets
        Debug.Print xRS.Name
    Next
    
    RS.Close
    Set RS = Nothing
mi presentasse qualche risultato ma non sembra rilevare il Recordset RS.

Al momento sono riuscito a trovare solo questo link:
https://stackoverflow.com/questions/19818240/vba-debugging-see-all-open-dao-recordsets
ma sembra non rispondere alle mie esigenze.

Suggerimenti?

Buona serata...

4 Risposte

  • Re: Vedere tutti i DAO.recordsets creati da codice

    Vuoi uno stack di accesso ai dati o una collection di recordset...?
    Ovviamente di Nativo non c'è nulla... ma in buona sostanza le 2 cose possono anche non essere poi così differenti...

    Tutto dipende molto da cosa veramente vuoi fare.
    Un punto di partenza per creare uno stack chiamate è una cosa simile:
    https://hammondmason.wordpress.com/2015/03/10/creating-a-call-stack-in-vba/

    Nel tuo caso, ma fai conto io non abbia capito bene, si tratterebbe di scrivere una classe, oggetto, che wrappa DAO.Recordset.
    il metodo open oltre che restituire il rs inserisce in una collection la classe ed il metodo close la rimuove.
    La collection ha in pancia i recordset aperti... Iterabili con
    
    For each nomeclasse in NomeCollection
    ....
    Next
    
    La classe deve avere le proprietà che tu ritieni utili/necessarie come data/ora apertura e data/ora chiusura.
    Puoi anche scrivere un log su close prima di rimuovere la classe dalla collection...

    Insomma come ti dicevo... cosa devi fare...? In base alla tua risposta ed alla tua capacità di rielaborare codice puoi provare, con tutti i limiti del vba, a scrivere qualche cosa di probabilmente funzionante...
  • Re: Vedere tutti i DAO.recordsets creati da codice

    Grazie Alex. Sono felice di essermi spiegato male perché così facendo ho potuto conoscere, modificare e catalogare le classi per lo stack di accesso ai dati presentate nel link che hai condiviso.
    In pratica tramite i metodi push e pop si caricano/scaricano i dati nella classe ricorsiva e, come hai giustamente suggerito, questo potrebbe permettermi, per esempio, addirittura di storicizzare l'apertura e/o la chiusura dei vari RS aperti da codice. Ha davvero ottime potenzialità e quindi l'ho fatta mia modificandola affinché memorizzi e restituisca un'intera struttura di dati anziché un solo dato per livello ricorsivo... sicuramente ne farò buon uso.

    Quello che volevo chiedere in realtà è se esiste un modo per accedere agli RS attualmente aperti da codice e quindi non ancora chiusi direttamente dalle proprietà del db Corrente.
    Come se ad esempio mettessi un punto di interruzione in fase di debugging, subito dopo l'apertura di un RS (e quindi prima della sua chiusura) e poi aprissi la finestra delle variabili locali nella quale certamente potrei vedere RS con tutte le sue proprietà.

    Quello che vorrei capire è perché se faccio ad esempio:

    [code]
    Set RS = CurrentDb.OpenRecordset("...")
    Debug.print CurrentDb.RecordSets.Count
    [/code]

    Mi esce 0 nella finestra immediata, mentre se faccio:

    [code]
    Set db = Currentdb
    Set RS = db.OpenRecordset("...")
    Debug.print db.RecordSets.Count
    [/code]

    dove db è un oggetto Recordset, mi esce 1.

    E come se CurrentDb non contenesse RS che ho creato... eppure se li vedo nella finestra delle variabili locali immagino che l'applicazione da qualche parte deve memorizzarli... no? . Mi sono dilungato nella speranza di evitare fraintendimenti.

    non riesco a sistemare il tag code
  • Re: Vedere tutti i DAO.recordsets creati da codice

    Non è possibile.
  • Re: Vedere tutti i DAO.recordsets creati da codice

    @Alex ha scritto:


    Non è possibile.
    Sono felice sia così… altrimenti mi sarei dovuto preoccupare

    ho trovato questo: http://www.office-archive.com/6-ms-access/b579ba39e2420166.htm
    Un altro aveva fatto la mia stessa domanda.

    Mi ritengo soddisfatto delle risposte. Grazie.
Devi accedere o registrarti per scrivere nel forum
4 risposte