访问Passthrough DSN-less Oracle Query

问题描述 投票:1回答:2

我在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

我最终得到一个错误:

The error

我能在这里找到什么,或者Access中的查询表没有相应的东西?

oracle vba ms-access access-vba odbc
2个回答
0
投票

我建议你创建一个传递查询,让它工作。您可以创建+运行PT查询而无需任何代码。使用Access UI获取100%的PT查询,然后尝试代码。

所以创建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查询,它将为您保存+管理连接字符串。


0
投票

尝试使用Driver = Microsoft ODBC for Oracle;而不是Driver = {Microsoft ODBC for Oracle}。后者是ADO格式。

© www.soinside.com 2019 - 2024. All rights reserved.