从VBA连接到Oracle DB

时间:2019-06-16 12:24:55

标签: excel vba oracle database-connection oracle12c

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

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


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

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

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

谢谢

配置为:

环境变量:
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
Microsoft Excel 16.0对象库
Microsoft Forms 2.0对象库
Microsoft ActiveX数据对象2.8库
Microsoft ActiveX数据对象Recordset 2.8库
Microsoft OLE DB简单提供程序1.5库
OraOLEDB 1.0类型库

活动服务:
OracleOraClient12Home1_32bitMTSRecoveryService

我尝试过卸载Oracle Client并重新安装,但没有成功。我还创建了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

1 个答案:

答案 0 :(得分:0)

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

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

@Tim,谢谢您的提示,但这不是问题,我之前已经进行过检查。 >
最后我用新的Connection字符串完成了此操作,如下所示:

strConnection =“ Provider = OraOLEDB.Oracle; Data Source = xxx.xxxx.xxx :1521 / xxxxx;用户ID = user1;密码= 1234;“

再次感谢。