2010-06-22 6 views
5

Stiamo utilizzando MS Access come front-end di reporting per Oracle. Si accede ai dati tramite una connessione ODBC e ci sono due tabelle collegate in Access to Oracle che sono le tabelle di dati non elaborati. Mi piacerebbe essere in grado di impostare la connessione e collegare le tabelle all'interno del file di accesso. In questo modo gli utenti non devono preoccuparsi di impostare un DSN per la connessione ODBC (la maggior parte di questi non sono utenti molto tecnici, e richiedono una mano per qualcosa di simile), e possiamo finalmente avere il file Access in diversi ambienti di test e generare report.Creare in modo programmatico connessioni ODBC e tabelle di collegamento in MS Access

E 'possibile avere la connessione al database creata dinamicamente quando il file viene aperto, e posso cambiare dinamicamente a cui collegano le mie tabelle collegate?

risposta

11

Si desidera una connessione tabella collegata senza DSN da Access. È possibile e l'ho fatto ma non ho il codice con me. Penso che fosse qualcosa di simile al seguente (questo utilizza una fonte SQL Server ma Oracle avrebbe solo una stringa di connessione leggermente diversa). Per fare in modo che le tabelle vengano create all'avvio, è necessario verificare l'esistenza di ogni tagledef prima di tentare di crearle di nuovo e chiamare una subroutine come quella in basso quando il database di Access è aperto.

Function LinkTables() 
    Dim DB As Database, tDef As TableDef 
    Set DB = CurrentDb 
    Set tDef = DB.CreateTableDef("YourAccessLinkedTableNameHere") 
    tDef.Connect = "ODBC;Driver={SQL Server};Server=srvname;Database=dbname;UID=sqluserid;PWD=sqlpwd" 
    tDef.SourceTableName = "dbo.YourSourceTableNameHere" 
    DB.TableDefs.Append tDef 
End Function 
+1

Si noti che il formato della stringa di connessione è diverso per ogni database esistente. Cerca qui un riferimento: http://www.carlprothman.net/Default.aspx?tabid=81 –

+1

Se non è necessario essere a conoscenza di ciò che sta accadendo nel livello di interfaccia utente di Access, quindi sostituire: Set DB = CurrentDb - to: Set DB = Workspace (0). Database (0) o: Set DB = dbEngine (0) (0) Perché è notevolmente più veloce; fino a cinquemila volte più veloce. –