Come leggere, da Vba, proprietà Connect di una tabella collega

di il
10 risposte

Come leggere, da Vba, proprietà Connect di una tabella collega

Ho usato il seguente codice:

Dim tbl As TableDef
    Set tbl = CurrentDb.TableDefs("tblAnomalie")
    MsgBox tbl.Connect

ma restituisce il seguente errore:

o al limite la Descrizione come visuallizzato nell'immagine seguente

grazie.

10 Risposte

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Ma è èUna Linked table…?

    Perché non hai esplicitato la Classe di partenza di Tabledef…?

    Dim Tdf As. DAO.Tabledef

    In ogni caso basta questo:

    Msgbox CurrentDb.TableDefs("tblAnomalie").Connect

    Sempre sia una linked….

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Precisato che il modo giusto per interrogare la proprietà Connection di una tabella collegata è passare attraverso TableDef, c'è un thread fresco fresco che spiega come ottenere la descrizione (anche) di una tabella:

    https://www.iprogrammatori.it/forum-programmazione/access/descrizione-oggetti-t52805.html

    Lì si parla di tutti gli oggetti, in generale, se a te interessa solo una tabella fai la ricerca puntuale e non con i cicli su tutte le varie collection disponibili.

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Rimane il fatto che ance se scrivo:

    Dim tbl As DAO.TableDef
        Set tbl = CurrentDb.TableDefs("tblAnomalie")
        MsgBox tbl.Connect

    genera l'errore, segnalato nel primo post, mentre tutto è regolare se scrivo:

    Msgbox CurrentDb.TableDefs("tblAnomalie").Connect

    grazie di tutto.

    Come si fa per segnalare che il quesito è risolto?

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Perché CurrentDb va usato come bisogna:

    Dim db As DAO.Database
    Dim tbl As DAO.TableDef
        
    Set db = CurrentDb
        
    Set tbl = db.TableDefs("tblAnomalie")
    MsgBox tbl.Connect
    
    'oppure
    MsgBox DBEngine(0)(0).TableDefs("tblAnomalie").Connect

    CurrentDb è una funzione, non un oggetto, quindi si usa per assegnare ad una variabile di tipo Database il database corrente. Poi per le magie della classe (non quella che “non è acqua” ma nella definizione data nella programmazione orientata agli oggetti) anche se usato come hai fatto tu riesce direttamente a fare qualcosa di un oggetto Database, non tutto. 

    Ambo i casi otterrai la finestrella vuota.

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Grazie per il chiarimento, rimane come si fa per dichiarare RISOLTO il post.

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    05/12/2023 - Stifone ha scritto:

    rimane come si fa per dichiarare RISOLTO il post.

    Eh… non lo so. “Segnala” il tuo stesso thread, poi scrivi la richiesta d'aiuto nella finestrella che si apre e che vedrà Toki. Poi ti scriverà come si fa.

    (non credo che sia obbligatorio etichettarlo come risolto, comunque)

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Secondo me non hai Referenziato DAO nelle LIB… ed ovviamente non riconosce la dichiarazione della Variabile come Oggetto, mentre se fai l'accesso diretto ovviamente funziona perchè Access espone quel metodo in modo Nativo.

    Hai verificato la LIBRERIA ACEDAO…?

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    05/12/2023 - @Alex ha scritto:

    Hai verificato la LIBRERIA ACEDAO…?

    L'errore c'è lo stesso. @Alex lo sa, per chi non lo sa invece la libreria ACEDAO è “Microsoft Office xx.x Access database engine Object Library” (per un nome più lungo aspettiamo una futura versione di Access)

    Comunque anche questo funziona

    CurrentDb.TableDefs("tblAnomalie").Connect

    ma non l'assegnazione ad un oggetto di tipo TableDef partendo da CurrentDB. La variabile rimane con le proprietà vuote (da finestra Variabili locali)

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Phil, la cosa è un po intrigante tecnicamente…

    La funzione CurrentDb non è DAO ma un metodo di Application, conseguenza vuole che non possa direttamente essere assegnato l'oggetto Tabledef esposto da CurrentDb all'Oggetto Tabledef di DAO… cosa un poco strana volendo ma così è… forse questo suggerisce il motivo:

    The CurrentDb method provides a way to access the current database from Visual Basic code 
    without having to know the name of the database.
    After you have a variable that points to the current database, you can also access and manipulate other 
    objects and collections in the DAO hierarchy.

    Passando invece per l'assegnazione all'oggetto DAO.Database del Riferimento del Pointer che restituisce l'istanza del Database Correntemente aperto nella finestra di Windows, ovviamente tutto si chiude come pare indicare l'estratto della Guida MSN

    Tuttavia ricordo che la Classe Database è esposta sia da DAO che ADO ma Tabledef no… 

  • Re: Come leggere, da Vba, proprietà Connect di una tabella collega

    Ciao a tutti, 

    l'autore del thread ha inviato segnalazione per richiedere la chiusura del thread che considera risolto.

    Nei forum non esiste il concetto di “risolto” quindi va gestito come si ritiene più opportuno: tramite invio segnalazione, tramite post di ringraziamento ai partecipanti in cui si conferma la soluzione del problema, ecc.

    Passo alla chiusura di questo thread.

Devi accedere o registrarti per scrivere nel forum
10 risposte