将Oracle SQL连接到VBA

将Oracle SQL连接到VBA,vba,oracle,cx-oracle,oraoledb,Vba,Oracle,Cx Oracle,Oraoledb,我能够在Windows计算机上将Python连接到我的Oracle SQL数据库,但奇怪的是,我似乎无法从VBA使其工作 以下是要连接的Python代码供参考: cx_Oracle.connect(f'{self.user}/{self.pwd}@//{self.host}:{self.port}/{self.service_name}') 我曾尝试在VBA代码中复制类似的结构,但收到一条错误消息。以下是我一直在使用的代码: Sub CallDB_Return_Flexible(stSQL A

我能够在Windows计算机上将Python连接到我的Oracle SQL数据库,但奇怪的是,我似乎无法从VBA使其工作

以下是要连接的Python代码供参考:

cx_Oracle.connect(f'{self.user}/{self.pwd}@//{self.host}:{self.port}/{self.service_name}')
我曾尝试在VBA代码中复制类似的结构,但收到一条错误消息。以下是我一直在使用的代码:

Sub CallDB_Return_Flexible(stSQL As String, rstStart As Range)

    Dim sqlConn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim rtn As Boolean
    Dim cmd As New ADODB.Command
    Dim cs As String

    'On Error Resume Next
    Set sqlConn = New ADODB.Connection

    cs = "Provider=OraOLEDB.Oracle;User ID=myuserID;Password=myPsswd;Data Source=host:port/service_name;"
    sqlConn.ConnectionString = cs
    sqlConn.CommandTimeout = 10000
    sqlConn.Open
我收到以下错误消息: 1) 系统在OraOLEDB的消息文件中找不到消息文本0x80040e0c的消息文本。 2) 有时,根据我使用的连接(即TNS连接)的迭代,我会收到一条TNS侦听器错误消息


我目前已启用ActiveX 6.1数据对象库。此外,我在一台安装了64位Oracle客户端的64位计算机上。我有一个64位的办公室。我很确定我也有一个64位ADO——我的ODAC(如果相同的话)与在线64位版本相同。我在注册表中有一个ODP.NET为2.12,另一个为4.121。我刚刚有一个ODP.NET.Managed的4.12版本


这对我来说没有多大意义,在一种语言中我可以毫无问题地连接,但在另一种语言中我不能

我使用早期的ActiveX数据库进行了回溯测试-这解决了问题


谢谢

如果您有64位Oracle客户端,则需要64位Office和64位ADO。有吗?VBA代码是从64位还是32位进程运行的?大多数VBA主机(如Microsoft Office)在默认情况下仍然是32位的,这可能就是问题所在。如果尝试从64位VBScript而不是VBA将
ADODB.Connection
OraOLEDB
一起使用,会发生什么情况?(
cscript.exe
是64位的)。我有一个64位的办公室。我很确定我也有一个64位ADO——我的ODAC(如果相同的话)与在线64位版本相同。我有一个ODP.NET是2.12,另一个是4.121。我刚刚有一个ODP.NET.Managed的4.12版本。注册表中的2.12 ODP.NET是否抛出了代码?当您收到TNS侦听器错误消息时,您的驱动程序安装似乎正常。尝试不同版本的ActiveX?。?数据对象库