首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access Passthrough -less DSN Oracle查询

Access Passthrough -less DSN Oracle查询
EN

Stack Overflow用户
提问于 2017-12-19 03:21:35
回答 2查看 1.1K关注 0票数 1

我在Excel中有一些东西可以从没有DSN的Oracle数据库中返回我的表:

代码语言:javascript
复制
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中使用类似的方法,我尝试了以下方法:

代码语言:javascript
复制
    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中有没有对应的查询表?

EN

回答 2

Stack Overflow用户

发布于 2017-12-20 05:47:14

我建议您创建一个直通查询,并使其正常工作。您可以在没有任何代码的情况下创建+运行PT查询。使用Access UI使PT查询100%正常工作,然后尝试编写代码。

因此,创建PT查询。当您在Access UI中单击该PT查询时,它是否起作用?

一旦(也只有在之后)让这个查询开始工作,您就可以像这样在代码中运行这个PT查询:

代码语言:javascript
复制
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("qryPassR")

如果需要修改oracle查询的原始SQL,则可以执行以下操作:

代码语言:javascript
复制
Dim rst As DAO.Recordset

With CurrentDb.QueryDefs("qryPassR")
   .SQL = "select * from tblHotels"
   Set rst = .OpenRecordset
End With

如果您想要执行存储过程,则执行

代码语言:javascript
复制
With CurrentDb.QueryDefs("qryPassR")
   .SQL = "exec storedProc"
   .ReturnsRecords = False
   .Execute
End With

因此,一旦创建了一个有效的PT查询,就可以在上面的代码中反复使用它。因此,不需要将连接字符串放在代码中-只需创建PT查询,它将为您保存+管理连接字符串。

票数 0
EN

Stack Overflow用户

发布于 2019-06-23 02:06:38

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47875074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档