2010-06-22 17 views
5

Używamy MS Access jako frontendu raportowania dla Oracle. Dostęp do danych odbywa się za pośrednictwem połączenia ODBC, a w programie Access to Oracle są dwie połączone tabele, które są tabelami surowych danych. Chciałbym móc skonfigurować połączenie i połączyć tabele z pliku programu Access. W ten sposób użytkownicy nie muszą się martwić o skonfigurowanie DSN dla połączenia ODBC (większość z nich nie jest bardzo technicznymi użytkownikami i będzie wymagać trzymania się za rękę w podobny sposób), a ostatecznie będziemy mogli wskazać plik Access. różne środowiska testowe i generowanie raportów.Programowo twórz połączenia ODBC i tabele linków w MS Access

Czy połączenie z bazą danych można utworzyć dynamicznie po otwarciu pliku i czy mogę dynamicznie zmieniać miejsce, do którego są połączone moje połączone tabele?

Odpowiedz

11

Potrzebujesz połączenia z tabelą dostępu bez DSN bez dostępu. Jest to możliwe i zrobiłem to, ale nie mam kodu ze mną. Myślę, że to było coś jak poniżej (to używa źródła SQL Server, ale Oracle miałby tylko nieco inny ciąg połączenia). Aby utworzyć tabelę przy uruchomieniu, musisz sprawdzić istnienie każdego z nich przed próbą ponownego ich utworzenia i wywołać podprogram podobny do poniższego, gdy baza danych Access jest otwarta.

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

Należy pamiętać, że format ciągu połączenia jest różny dla każdej bazy danych. Zajrzyj tutaj, aby uzyskać odniesienie: http://www.carlprothman.net/Default.aspx?tabid=81 –

+1

Jeśli nie musisz być świadomy tego, co dzieje się w warstwie UI programu Access, zastąp: Ustaw DB = CurrentDb - to: Ustaw DB = Obszary robocze (0). Baza danych (0) lub: Ustaw DB = dbEngine (0) (0) Ponieważ jest znacznie szybszy; aż pięć tysięcy razy szybciej. –