SOLVED Strano mistero nel refreshlink tra DB diversi (SQLServer MYSQL)

di il
2 risposte

SOLVED Strano mistero nel refreshlink tra DB diversi (SQLServer MYSQL)

Parlo di database connessi via ODBC, uno MYSQL e uno SQL Server.
Per saltare dal DB normale a quello di test faccio uso di una procedura che fa il refreshlink.
Questo un piccolo esempio di codice che lo fa

Function Prova()
   Dim db As DAO.Database
   Dim tdf As DAO.TableDef
   
   Set db = CurrentDb()
   For Each tdf In db.TableDefs
       If tdf.Name = "Ordini" Then
           tdf.Connect = "ODBC;DSN=MioDB;;TABLE=Ordini"
           tdf.RefreshLink
           Exit For
       End If
   Next tdf

   Set tdf = Nothing
   Set db = Nothing
End Function

Ho programmi in grado di lavorare indifferentemente con DB MYSQL o SQL Server.
Va tutto perfetto, ma se le tabelle erano originariamente linkate a SQLServer e cambio la connection tra un DB e l'altro, nessun problema.
Stessa cosa se le le tabelle erano originariamente linkate a MYSQL e cambio la connection tra un DB e l'altro.
Il problema si verifica se cambio una connection MYSQL con una SQLServer o viceversa.
Il refreshlink non dà errore ma non funziona.
Ovviamente la stringa di connessione è corretta con password e tutto il resto.

Immaginiamo in un DB ho link a Ordini ancora connesso a SQLServer.
Creo un nuovo link manualmente Ordini1 alla stessa tabella Ordini di MYSQL.
Ordini1 mostra la tabella, Ordini punta alla vecchia.
Controllo la stringa di connessione di Ordini1 nelle proprietà della connessione Ordini1.
Lancio la riconnessione mettendo nella procedura la stessa stringa di connessione, non dà errore ma non va.

Mi vien da pensare che in realtà la stringa di connessione contenga altro che non vedo, ad esempio il tipo di database o di ODBC.
In pratica che la stringa vada integrata oppure, che ci sia qualche altro tìpo di parametro da correggere oltre alla connection.

Qualche idea?

2 Risposte

  • Re: SOLVED Strano mistero nel refreshlink tra DB diversi (SQLServer MYSQL)

    Hai provato ad Eliminare e rifare la TableDef se genera il medesimo problema… mi aspetto di no, se così fosse la cosa sarebbe altrettanto semplice, basta usare il CreatTabledef ecc…

    Db.Tabledefs.Delete NomeTabellaLocale
    Set tdf= Db.CreateTableDef(NomeTabellaLocale, Attributes, NomeTabellaRemota, Connect)

    Potrebbe, ma da verificare, richiedere qualche frazione di secondo in più, se hai 100 Tabelle, forse si vede, ma dovrebbe non presentare il problema.

    Saluti

  • Re: SOLVED Strano mistero nel refreshlink tra DB diversi (SQLServer MYSQL)

    04/11/2024 - @Alex ha scritto:


    Hai provato ad Eliminare e rifare la TableDef se genera il medesimo problema… mi aspetto di no, se così fosse la cosa sarebbe altrettanto semplice, basta usare il CreatTabledef ecc…

    Db.Tabledefs.Delete NomeTabellaLocale
    Set tdf= Db.CreateTableDef(NomeTabellaLocale, Attributes, NomeTabellaRemota, Connect)

    Potrebbe, ma da verificare, richiedere qualche frazione di secondo in più, se hai 100 Tabelle, forse si vede, ma dovrebbe non presentare il problema.

    Saluti

    Grazie Alex, ottimo suggerimento.

    Mi sono scritto questo e va da Dio.

    Function Riconnetti(StringaConnessioneSenzaTabella, NomeLink, NomeTabella)
    '   es. stringa connessione ODBC;DSN=NomeODBC;DATABASE=xxx;
        Dim db As Database
        Dim tdf As TableDef
        
        Set db = CurrentDb
        On Error Resume Next: db.TableDefs.Delete NomeLink: On Error GoTo 0
        
        Set tdf = db.CreateTableDef(NomeLink)
        tdf.Connect = StringaConnessioneSenzaTabella & ";TABLE=" & NomeTabella
        tdf.SourceTableName = NomeTabella
        db.TableDefs.Append tdf
        
        Set tdf = Nothing
        Set db = Nothing
    End Function
    

    Riconnetto tranquillamente al volo tra MYSQL, SQLServer o altri ODBC.
    Velocità praticamente quella del refreshlink.

    Grazie della dritta!

Devi accedere o registrarti per scrivere nel forum
2 risposte