【问题标题】:OLEDB Connection from Excel to Oracle Issue从 Excel 到 Oracle 的 OLEDB 连接问题
【发布时间】:2016-04-27 11:50:39
【问题描述】:

大家,

过去两天,一个 VBA 问题一直困扰着我。我在 Excel 中有一个基于宏的模型,其中数据集通过 OLEDB 从 Oracle 购买到电子表格中。为了简单地说明这个问题,我在模型中创建了两个函数。一个使用 ODBC("odbc"),另一个使用 OLEDB("OraOLEDB")。该代码上周运行良好,并且没有更改。

现在,我收到一条错误消息,指出“运行时错误'424':当我在子“OraOLEDB”中执行“conn.Open strCon”行时需要对象。无法与数据库!所以当我试图用那行代码建立与数据库的连接时,它失败了。有趣的是,通过 ODBC,可以建立连接。子“odbc”中的“conn.Open strCon”行成功执行,我能够建立与数据库的连接。

我没有更改 Excel 模型中的任何内容,但我最近确实有一堆 Windows 更新。我不知道这是否损坏了任何东西。我想它可能有。我不想使用 ODBC 连接的原因是它的速度明显较慢。使用 OLEDB,我的运行时间提高了 10 倍。如果您能提供帮助,请告诉我。


Sub odbc()
Dim conn As Object
Dim strCon As String

strCon = "Driver={Microsoft ODBC for Oracle}; 
          CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
             (HOST=xxx)(PORT=1521))
             (CONNECT_DATA=(SERVICE_NAME=xxx))); 
          uid=xxx;pwd=xxx;"

Set conn = CreateObject("ADODB.Connection")

conn.Open strCon

End Sub

Sub OraOLEDB()
Dim conn As Object
Dim strCon As String

strCon = "Provider=OraOLEDB.Oracle;
          Data Source=(DESCRIPTION =  (ADDRESS = (PROTOCOL = TCP)
             (HOST = xxx)(PORT = 1521)) 
             (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xxx)));   
          User Id=xxx;Password=xxx"

Set conn = CreateObject("ADODB.Connection")

conn.Open strCon

【问题讨论】:

    标签: sql oracle excel ado vba


    【解决方案1】:

    我看到 OLEDB 连接的主机是 modn-ast-fdb1。 ...而对于 ODBC 连接,您有 modn-ast-tdb1。 ……宿主不应该一样吗?

    【讨论】:

    • 谢谢 mathguy。进行了更改。
    【解决方案2】:

    这意味着Set conn = CreateObject("ADODB.Connection") 不返回任何内容。检查 ADODB.dll 注册。或者,您可以使用

    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    

    您将在编辑脚本时看到 ADODB 是否可用,而不是等待运行时错误。

    【讨论】:

    • 军士。以这种方式定义变量修复了它。谢谢。
    • @jp3nyc:请将最能帮助您的答案标记为已接受,以便我们读者确切知道哪个答案解决了您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多