Collegare tabelle di sql server

di il
8 risposte

Collegare tabelle di sql server

Ciao. Ho bisogno di collegare massivamente delle tabelle che si trovano su un server sql, da Access 2016. I nomi delle tabelle sono contenuti in una tabella access e il server sql ha la password. Ho provato a scrivere una routine che legga la tabella coi nomi ma poi la cosa diventa per me troppo complessa... qualcuno é in grado di aiutarmi? Grazie

8 Risposte

  • Re: Collegare tabelle di sql server

    In che senso troppo complessa... mostra il codice di connessione.
    Servono poche righe per ripristinare le Linked Table...
  • Re: Collegare tabelle di sql server

    Ciao Alex. Credo di poter risolvere usando DSN-less ma sono fuori ufficio e scrivo dal cellulare, per questo caso male a copiare codice. Il DSN-less è secondo te l'idea migliore?
  • Re: Collegare tabelle di sql server

    Io di solito uso rilinkare DSN-LESS... anzi io le cancello e le ricreo sempre... per motivi di sicurezza.... quindi basta aprire un recordset sulla LocalTable con l'elenco delle ServerTableName e si crea aggiungendo una tabella, oggetto Tablet, alla collection Tabledefs assegnando la proprietà Connect dell'oggetto Tabledef aggiunto.
    Qui trovi un mio vecchio esempio... sicuramente migliorabile e sicuramente da correggere nella ConnectionString:
    **
    Usalo per capirne la logica...
  • Re: Collegare tabelle di sql server

    Ottimo! Ti ringrazio per la disponibilità, prenderò spunto dal tuo esempio
  • Re: Collegare tabelle di sql server

    Ciao Alex. Ho studiato il tuo esempio è fa esattamente al caso mio. Come avevi detto la connection string va in errore di compilazione qui: DATABASE=DB_NAME;LANGUAGE=ITALIANO
    ma non capisco l'errore di prevista fine istruzione...
  • Re: Collegare tabelle di sql server

    Nell'esempio mancano le Virgolette di chiusura ovviamente...
    Private Const cCnnString as String="ODBC;DRIVER={SQL Server};SERVER=NOME_SERVER;UID=USER_NAME;PWD=PASSWORD;
    DATABASE=DB_NAME;LANGUAGE=Italiano;"
    
    Le nuove versioni consentono di usare il Provider Nativo che richiede la modifica della connection string:
    https://www.connectionstrings.com/sql-server-native-client-11-0-odbc-driver/
    Driver={SQL Server Native Client 11.0};Server=myServerAddress;
    Database=myDataBase;Uid=myUsername;Pwd=myPassword;
    Dove [Server] rappresenta l'indirizzo IP del server esempio: [Server=10.20.30.40\SQLExpress]

    Saluti
  • Re: Collegare tabelle di sql server

    Grande Alex! Grazie per la pazienza!
    Dim Alex As Santo
    :D:D
  • Re: Collegare tabelle di sql server

    In modo molto più banale, queste poche righe di codice, sono più semplici:
    
    Option Compare Database
    Option Explicit
    ' Elenco delle Tabelle da LINKARE
    Private Const cTableList = "Tabella1|Tabella2|Tabella3|Tabella4|Anagrafiche|Reparti|TabellaN"
    Private Const cUSER = "USERNAME"
    Private Const cPWD = "PASSWORD"
    Private Const cSERVER="10.20.30.40\SQLEXPRESS"
    Private Const cDBNAME="NomeDatabase"
    
    Public Function RELINK()
        Dim vTables     As Variant
        Dim vTable      As Variant
        vTables = Split(cTableList, "|")
        For Each vTable In vTables
            Call AttachDSNLessTable(CStr("dbo_" & vTable), "dbo." & vTable, cSERVER,cDBNAME , cUSER, cPWD)
        Next
    End Function
    
    Private Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
        On Error GoTo AttachDSNLessTable_Err
        Dim td As TableDef
        Dim stConnect As String
    
        If IsTableExists(stLocalTableName) Then DoCmd.DeleteObject acTable, stLocalTableName
        
        stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
        Set td = DBEngine(0)(0).CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
        DBEngine(0)(0).TableDefs.Append td
        
        AttachDSNLessTable = True
        Exit Function
    
    AttachDSNLessTable_Err:
        
        AttachDSNLessTable = False
        MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description
    
    End Function
    
    Public Function IsTableExists(ByVal strTableName As String) As Boolean
        On Error Resume Next
        Dim vName   As Variant
        vName = DBEngine(0)(0).TableDefs(strTableName).Name
        IsTableExists = Err.Number = 0
    End Function
    
    Ovviamente la Funzione da chiamare è [RELINK()], puoi avere anche una LOCAL TABLE con le Tabelle, quindi apri un Recordset e lo cicli...
    Questo codice è provato e funziona.
Devi accedere o registrarti per scrivere nel forum
8 risposte