+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: A2013 : ODBC Linked Tables - descrizione campi non disponibile

  1. #1
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    718

    A2013 : ODBC Linked Tables - descrizione campi non disponibile

    Effettuo il link delle tabelle direttamente da codice e utilizzo le linked tables senza alcun problema.
    Mi piacerebbe poter vedere nella proprietà dei campi anche la descrizione ma sembra che tramite ODBC non sia possibile.

    Questa è la porzione di codice significativa che aggiunge la LinkedTable
    codice:
        Dim Tdf         As DAO.TableDef
        Dim sCnn        As String
        
        Dummy = RemoveLinkedTable(sLinkedTableName)
        
        With CurrentDb
        
            Set Tdf = .CreateTableDef(sLinkedTableName)
    
            sCnn = ODBCConnectionString()
      
            Tdf.Connect = "ODBC;" & sCnn
             
            Tdf.SourceTableName = sTableToLink
              
            .TableDefs.Append Tdf
        
        End With
    Di seguito cosa contiene Tdf.Connect
    codice:
    ODBC;DRIVER={MySQL ODBC 8.0 ANSI Driver}; SERVER=10.10.11.40; PORT=3306; UID=xyz; PWD=xyz; FOUND_ROWS=1;BIG_PACKETS=1;COMPRESSED_PROTO=1;DYNAMIC_CURSOR=1;LOG_QUERY=1;MULTI_STATEMENTS=1;DATABASE=MYDB;
    Come già detto le tabelle vengono correttamente linkate e aggiornate, il problema (fastidio) è la carenza della descrizione dei campi delle tabelle (che ovviamente lato server esiste).

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,463
    Immagino tu acceda direttamente alla collection Properties...?
    Intendi che restituisce NullString o restituisce errore property not found...?
    Immagino tu abbia usato DAO...?
    Intanto.che parlo ad alta voce... hai provato a fare un crosscheck con:
    1) aprire un recordset direttamente sulla connessione al server e cuclare le properties di.Field...?
    2) usare ADOX.Catalogue su activeconnection...?
    Stralcio da adattare...
    codice:
        Set adCon = New ADODB.Connection
        adCon.Open sCON
    
        'Point the adox catalog to that connection
        Set axCat = New ADOX.Catalog
        Set axCat.ActiveConnection = adCon
        Set axTbl = axCat.Tables("NomeTabella")
    
        Debug.Print axTbl.Columns(0).Properties("Description").Value
    Ultima modifica di @Alex; 01-07-2020 20:22 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  3. #3
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    718
    Il problema lo riscontro in visualizzazione struttura dove mi torna utile controllare alcune note che ho inserito nella descrizione dei campi.
    Da codice non ho verificato ...

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,463
    Ho fatto aggiunte sopra... prova da codice con dao... ciclando le properties...
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  5. #5
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    718
    Dopo un po di prove sono arrivato a questa conclusione : il driver ODBC non fornisce la descrizione dei campi e conseguentemente il CreateTableDef non aggiunge la proprietà "Description" quando crea la LinkedTable.

    Questo sono le prove :
    - Analizzando la collection Fields della LinkedTable, appena viene linkata, in nessun campo è presente la proprietà "Description" (con non presente intendo che proprio la proprietà NON è presente)
    - se vado in visualizzazione struttura tabella la descrizione dei campi non c'è (ovviamente)
    - se modifico la descrizione (pensavo non fosse possibile in quanto tabella collegata) posso scrivere quello che voglio e posso anche salvare
    - dopo il salvataggio la proprietà "Description" diventa disponibile (e ovviamente contiene quanto scritto in visualizzazione struttura)

    codice:
        DoCmd.TransferDatabase _
            TransferType:=acLink, _
            DatabaseType:="ODBC Database", _
            DatabaseName:="ODBC;" & sCnn, _
            ObjectType:=acTable, _
            Source:=sTableToLink, _
            Destination:=sLinkedTableName, _
            StructureOnly:=False
    Anche cambiando modo di collegare la tabella ottengo lo stesso risultato (ovvero no descrizione).

    Credo che non ci sia una soluzione banale, ma in fondo si tratta di un problema minore.

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,463
    Fai una prova semplice, prova a creare da codice la proprietà Description sull'Oggetto Field con CreateProperty ed Append, e poi la provi a rileggere...!
    Di solito funziona proprio così, ovvero DAO non rigenera tutte le Proprietà nella Collection Properties, di conseguenza non le leggi, ma le proprietà ci sono... basta quindi forzare la Collection per accedervi.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  7. #7
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Post
    718
    Non è possibile creare la property senza anche assegnarle un valore (sebbene da help il parametro value sia optional), mi restituisce un'errore (che è necessario il value) ...

    Comunque ho scoperto che tramite questa query (eseguibile anche da utenti senza privilegi di sistema) :
    codice:
    SELECT * FROM `COLUMNS` 
    WHERE TABLE_SCHEMA = NomeDB AND TABLE_NAME = NomeTabella
    ORDER BY ORDINAL_POSITION ASC
    è possibile avere l'elenco di tutti i campi della tabella con il campo 'COLUMN_COMMENT' che corrisponde alla Description di Access.

    Posso quindi, dopo aver collegato la tabella, scorrere i campi della tabella mySQL e fare CreateProperty (con value impostata) e poi append sull'oggetto Field.

    Grazie per il suggerimento.

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi