Próbuję połączyć się z bazą danych Oracle za pomocą programu Access 2003.
Chcę użyć połączenia ODBC i chcę je skonfigurować, aby użytkownik nie musiał wprowadzać hasła.
Jednym z problemów, które mam, jest to, że moje zapytanie SQL używa INTERFACE.Products i Access widzi kropkę i myśli, że próbuję otworzyć plik. IE Interface.MDB, gdy jest to część mojego zapytania SQL.
Option Compare Database
Function OracleConnect() As Boolean
Dim ws As Workspace
Dim db As Database
Dim LConnect As String
Dim myQuery As String
Dim myRS As Recordset
On Error GoTo Err_Execute
LConnect = "ODBC;DSN=Oracle;UID=user;PWD=password;"
"Point to the current workspace
Set ws = DBEngine.Workspaces(0)
"Connect to Oracle
Set db = ws.OpenDatabase("", False, True, LConnect)
myQuery = "Select * from INTERFACE.Products"
Set rst = db.OpenRecordset(myQuery)
rst.Close
db.Close
Exit Function
Err_Execute:
MsgBox MsgBox("Error Number: " & Err.Number & " Message: " & Err.Description)
End Function
Odpowiedzi:
3 dla odpowiedzi № 1Czy możesz spróbować czegoś takiego:
Set rst = db.OpenRecordset(mQuery, dbOpenSnapshot, dbSQLPassThrough)
To po prostu wysłałoby zapytanie dosłownie do bazy danych Oracle.
w Dostęp do dokumentacji dla OpenRecordset
znajdziesz tę notatkę:
Jeśli otworzysz zestaw rekordów w obszarze roboczym Microsoft Access i nie określisz typu, OpenRecordset utworzy zestaw rekordów typu tabelowego.
Może to być przyczyną występującego błędu.
Z reguły sugerowałbym, aby zawsze podawać wyraźne parametry w parametrach OpenRecordset
: zachowanie domyślne nie zawsze jest spójne i może generować dziwne błędy.
Nie jestem pewien co do twojego projektu, ale jednym ze sposobów na ułatwienie może być po prostu tworzenie połączonych tabel w programie Access.
W takim przypadku możesz napisać zapytania do swojego INTERFACE.Products
Tabela Oracle, jakby była lokalna Products
stół.
Pozwoliłoby to również zaoszczędzić Ci konieczności samodzielnego zarządzania połączeniami.
0 dla odpowiedzi nr 2
Tworzony zestaw rekordów musi używać zapytanianapisane za pomocą Access SQL. Tabela musi być tabelą dostępu (tabelą zdefiniowaną w mdb). Może to być tabela lokalna lub tabela połączona. Tabela dostępu nie może zawierać „.” (kropka) w nazwie. Jeśli miałbyś połączyć tabelę Oracle INTERFACE.Products w programie Access, byłoby to INTERFACE_Products (Access zastąpi niedozwolone znaki w nazwie tabeli zdalnej bazy danych literą „_”), chyba że zmienisz jej nazwę w Access. Dlatego zapytanie powinno brzmieć „Wybierz * z INTERFACE_Products”
Możliwe jest utworzenie zestawu rekordów przy użyciu Oracle SQL, ale należy go utworzyć za pomocą zapytania tranzytowego.