2010-06-22 17 views
5

Wir verwenden MS Access als Reporting-Front-End für Oracle. Auf die Daten wird über eine ODBC-Verbindung zugegriffen, und in Access to Oracle gibt es zwei verknüpfte Tabellen, bei denen es sich um die Rohdatentabellen handelt. Ich möchte in der Lage sein, die Verbindung einzurichten und die Tabellen innerhalb der Access-Datei zu verknüpfen. Auf diese Weise müssen sich die Benutzer keine Gedanken über die Einrichtung eines DSN für die ODBC-Verbindung machen (die meisten von ihnen sind keine sehr technischen Benutzer und müssen von Hand gehalten werden), auf die die Access-Datei verweisen kann verschiedene Testumgebungen und generieren Sie Berichte.Programmatisch erstellen ODBC-Verbindung und Link-Tabellen in MS Access

Ist es möglich, dass die Datenbankverbindung dynamisch erstellt wird, wenn die Datei geöffnet wird, und kann ich dynamisch ändern, wo meine verknüpften Tabellen verlinken?

Antwort

11

Sie möchten eine DSN-lose verknüpfte Tabellenverbindung von Access. Es ist möglich und ich habe es getan, aber ich habe den Code nicht bei mir. Ich denke, es war etwas wie das unten (das verwendet eine SQL Server-Quelle, aber Oracle würde nur eine etwas andere Verbindungszeichenfolge haben). Um die Tabelle (n) beim Start erstellen zu lassen, müssen Sie vor dem Versuch, sie erneut zu erstellen, nach dem Vorhandensein jedes Tabledefs suchen und eine Subroutine wie die folgende auf Access-Datenbank öffnen aufrufen.

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

Beachten Sie, dass das Format der Verbindungszeichenfolge für jede Datenbank anders ist. Hier finden Sie eine Referenz: http://www.carlprothman.net/Default.aspx?tabid=81 –

+1

Wenn Sie nicht wissen müssen, was in der UI-Ebene von Access passiert, ersetzen Sie: Set DB = CurrentDb - to: Set DB = Arbeitsbereiche (0) .Databases (0) oder to: Set DB = dbEngine (0) (0) Weil es wesentlich schneller ist; so viel wie fünftausend mal schneller. –