我正在尝试使用Access 2003连接到Oracle数据库。
我想使用ODBC连接,我想设置它,以便用户不需要输入密码。
我遇到的一个问题是我的SQL查询使用INTERFACE.Products和Access查看句点并认为我正在尝试打开文件。 IE Interface.MDB,这是我的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
答案 0 :(得分:3)
你可以试试像:
Set rst = db.OpenRecordset(mQuery, dbOpenSnapshot, dbSQLPassThrough)
这只是将查询逐字发送到Oracle数据库。
在OpenRecordset
OpenRecordset
中,您会找到以下注释:
如果在Microsoft Access工作区中打开Recordset而未指定类型,则OpenRecordset会创建表类型Recordset。
这可能是您获得的错误的来源。
作为一项规则,我建议始终在INTERFACE.Products
的参数中明确:默认行为并不总是一致的,并且可能会产生奇怪的错误。
我不确定您的设计,但是让您更轻松的一种方法可能就是在Access中创建链接表。
在这种情况下,您可以针对Products
Oracle表编写查询,就像是否是本地{{1}}表一样。
它还可以避免您自己管理连接。
答案 1 :(得分:0)
您正在创建的记录集必须使用使用Access SQL编写的查询。该表必须是Access表(在mdb中定义的表)。它可以是本地表或链接表。 Access表不能有“。” (点)的名字。如果您要在Access中链接Oracle表INTERFACE.Products,它将是INTERFACE_Products(Access将使用“_”替换远程数据库表名中的非法字符),除非您在Access中重命名它。因此,您的查询应为“从INTERFACE_Products中选择*”
可以使用Oracle SQL创建记录集,但必须使用Pass-Through查询创建记录集。