【发布时间】:2017-12-18 19:21:34
【问题描述】:
我在 Excel 中有一些东西可以从没有 DSN 的 Oracle 数据库返回我的表:
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DRIVER={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & IP1 & ")(PORT=XXXX))" & _
"(CONNECT_DATA=(SERVICE_NAME=" & SvcNm & ")));" & _
"UID=" & UserName & ";" & _
"PWD=" & PassWord & " & ";", Destination:=Range("A1"))
.Sql = strSQL
.FieldNames = False
.RefreshStyle = xlOverwriteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.HasAutoFormat = False
.BackgroundQuery = False
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=True
.SavePassword = False
.SaveData = True
.Delete
End With
这可以让我得到我想要的东西。但是如果我想在 Access 中使用类似的方法,我尝试了这个:
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Set db = CurrentDb
Set qdf = db.CreateQueryDef("")
qdf.Connect = "ODBC;DRIVER={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" & IP & ")(PORT=XXXX))(CONNECT_DATA=(SERVICE_NAME=" & svcname & ")));" & _
"Uid=" & Username & ";PWD=" & password &";"
qdf.Sql = "---some query"
qdf.ReturnsRecords = True
Set rs = qdf.OpenRecordset
我在这里得到一个错误:
这里有什么我可以做的吗?或者 Access 中没有对应的查询表?
【问题讨论】:
-
你确定Excel和Access之间的连接字符串和SQL完全一样吗?对两者进行
Debug.Print并将它们粘贴到文本编辑器中进行比较。 -
相同。我正在从一个复制粘贴到另一个。我还验证了来自connectionstrings.com/oracle 的连接字符串,以确保我正确使用它。这是我使用正确的连接字符串时遇到的错误,其他任何内容都会导致 ODBC 错误。
-
对于 QueryTables 的等效项,删除记录集调用并在释放 qdf
Set qdf = Nothing后简单地打开查询Set qdf = Nothing以保存更改。这将打开一个类似 Excel 的表格,或者更确切地说是 Excel 打开一个类似 Access 的表格! -
这样做的错误完全相同。在侧面板的 Access 下打开保存的查询也反映了相同的错误...不知道为什么。
-
据我所知,连接字符串并不是给定您当前代码的精确副本(例如
Uid与UID)。我通常的建议是创建一个文件 DSN,并将其调整为连接字符串。