【问题标题】:Connection from VBA to Oracle DB从 VBA 到 Oracle DB 的连接
【发布时间】:2021-10-08 04:36:53
【问题描述】:

通过以下文本的设置,我成功连接并从数据库中检索数据。有一次,在执行宏时,我的 PC(Windows 10)断电,从那一刻起,我每次尝试连接到 DB(仅在我尝试通过 VBA 连接时)都会收到错误消息,如下所示消息:

运行时错误“-2147467259 (80004005)”:
[Microsoft][Oracle 的 ODBC 驱动程序][Oracle]尝试检索错误 ORA 的文本时出错-01019


我收到的错误来自命令“cn.Open (strConnection)”的行

我已经安装了 ODAC 12c 32 位,因为我有 Excel 32 位。

我认为此错误是活跃的,因为来自某些寄存器的信息在 PC 在检索数据时断电后被锁定,但我找不到它。
任何帮助或提示都是宝贵的给我。

提前致谢

配置为:

环境变量:
ORACLE_HOME = C:\app\client\xxxx\product\12.2.0\client_1
PATH = C:\app\client\xxxx\product\ 12.2.0\client_1\Network\Admin
PATH = C:\app\client\xxxx\product\12.2.0\client_1\Network\Admin\bin

参考 - VBAProject:
Visual Basic for Applications
Microsoft Excel 16.0 对象库
Microsoft Forms 2.0 对象库
Microsoft ActiveX 数据对象 2.8 库
Microsoft ActiveX 数据对象 Recordset 2.8 库
Microsoft OLE DB Simple Provider 1.5 库
OraOLEDB 1.0 类型库

活动服务:
OracleOraClient12Home1_32bitMTSRecoveryService

我尝试卸载 Oracle 客户端并重新安装,但没有成功。此外,我创建了 ORACLE_HOME 变量并尝试了更多不同的连接字符串变体和包含的引用组合,但错误仍然相同。
Dim strConneciton As String
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

strConneciton = "Driver={Microsoft ODBC for Oracle};" & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=xxx.xxxx.xxx)(PORT=1521)" & _
"(CONNECT_DATA=(SERVICE_NAME=xxxxx)));user id=user1;password=1234;")

cn.Open (strConneciton)

If cn.State = adStateOpen Then
 cn.Close
 MsgBox "Completed!"
Else
 MsgBox "Connection failed!"
End If

【问题讨论】:

  • 尝试将C:\app\client\xxxx\product\12.2.0\client_1\binC:\app\client\xxxx\product\12.2.0\client_1 添加到您的%PATH%
  • 尝试使用 Oracle {Oracle in OraClient12_home1} 的 ODBC 驱动程序,而不是 Microsoft {Microsoft ODBC for Oracle} 的驱动程序 - 驱动程序的确切名称可能略有不同。签入 ODBC 管理器(32 位版本!)

标签: excel vba oracle database-connection oracle12c


【解决方案1】:

我一直在为同样的连接错误而苦苦挣扎。这就是它对我的工作方式。

这是我的 tnsnames.ora 的摘录:

#VISUALTIME7 / EX PRODUCTION
VISUALTIME7_DEV=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XX.XX.XX)(PORT = XXXX))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = VISUALTIME7)
    )
  )

这是我的 vba 代码:

Sub CopyDataFromDatabase()
    Dim Conn As ADODB.Connection
    Set Conn = New ADODB.Connection
    Dim strCon As String
    
    'DataSource argument according to my tnsnames.ora
    strCon = "Provider=OraOLEDB.Oracle;Data Source=VISUALTIME7_DEV;User ID=myUser;Password=myPassword;"
        
    Conn.Open (strCon)
    
    Conn.Close
    
End Sub

我在 vba 项目中的引用:

  • Visual Basic 应用程序
  • Microsoft Excel 10.0 对象库
  • OLE 自动化
  • Microsoft Office 16.0 对象库
  • Microsoft ActiveX 数据对象 6.1 库

【讨论】:

    【解决方案2】:

    感谢您的回答。
    我将这些位置添加到 PATH 变量中,但问题是一样的。
    更改驱动程序(OraClient12Home1_32bit 中的 Oracle - 这是 ODBC 数据源管理器中的正确名称(32 位)),我收到以下错误:
    TNS 协议适配器错误。

    我能够从 sqlplus 连接到 db,但是问题是当我尝试通过 VBA 连接时。

    @Tim,感谢您的提示,但这不是问题所在,我之前已经检查过。

    最后我完成了使用新的连接字符串,如下所示:

    strConnection = "Provider=OraOLEDB.Oracle;Data Source=xxx.xxxx.xxx:1521/xxxxx;User ID=user1;Password =1234;"

    再次感谢。

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2016-06-17
      • 2014-06-15
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多