我在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中有没有对应的查询表?
发布于 2017-12-20 05:47:14
我建议您创建一个直通查询,并使其正常工作。您可以在没有任何代码的情况下创建+运行PT查询。使用Access UI使PT查询100%正常工作,然后尝试编写代码。
因此,创建PT查询。当您在Access UI中单击该PT查询时,它是否起作用?
一旦(也只有在之后)让这个查询开始工作,您就可以像这样在代码中运行这个PT查询:
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("qryPassR")如果需要修改oracle查询的原始SQL,则可以执行以下操作:
Dim rst As DAO.Recordset
With CurrentDb.QueryDefs("qryPassR")
.SQL = "select * from tblHotels"
Set rst = .OpenRecordset
End With如果您想要执行存储过程,则执行
With CurrentDb.QueryDefs("qryPassR")
.SQL = "exec storedProc"
.ReturnsRecords = False
.Execute
End With因此,一旦创建了一个有效的PT查询,就可以在上面的代码中反复使用它。因此,不需要将连接字符串放在代码中-只需创建PT查询,它将为您保存+管理连接字符串。
发布于 2019-06-23 02:06:38
尝试使用Driver=Microsoft ODBC for Oracle;而不是Driver={Microsoft ODBC for Oracle}。后者是ADO格式。
https://stackoverflow.com/questions/47875074
复制相似问题