访问VB与oracle数据库连接

时间:2018-01-13 12:29:00

标签: vba oracle ms-access

我尝试使用以下代码连接Access2016 VBA中的远程Oracle数据库:

Public Sub OpenConn()

Dim adConn As ADODB.Connection
Dim myDSN As String

Set adConn = New ADODB.Connection

myDSN = "Provider=OraOLEDB.Oracle;DSN=111.111.111.11:1521/orcl;USER ID=xxxx;PASSWORD=xxxx;Persist Security Info=True"

adConn.Open myDSN

end sub

但它不起作用并给出了

  

'运行时错误3706'

。我试过了

myDSN="Driver=Oracle in OraDb11g_home1;DSN=111.111.111.11:1111/orcl;USER ID=xxxx;PASSWORD=xxxx;Persist Security Info=True"

它没有帮助,并给出了'运行时错误-2147467259(80004005)'

有人可以帮忙吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

DSN是用户创建的text / xml脚本,具有特定的连接设置,以避免直接在代码中编写它们。通常,DNS用于ODBC而不是OLEDB连接。我认为Oracle使用TNS别名。

目前,在您的两次尝试中,您都没有分配命名的DSN文件,而是将其分配给服务器/主机名。您的整体问题可以像替换数据源 DBQ DSN 一样简单。请注意,名为参数的用户和密码也不同。

' OLEDB
myDSN = "Provider=OraOLEDB.Oracle;Data Source=111.111.111.11:1521/orcl;" _
         & "USER ID=xxxx;PASSWORD=xxxx;Persist Security Info=True"

' ODBC
myDSN = "Driver={Oracle in OraClient11g_home1};DBQ=111.111.111.11:1521/orcl;" _
         & "UID=xxxx;PWD=xxxx;Persist Security Info=True" 

对于TNS别名连接,其中 My_OraDB 别名在tnsnames.ora文件中定义。

' OLEDB
myDSN = "Provider=OraOLEDB.Oracle;Data Source=My_OraDB" _
         & "USER ID=xxxx;PASSWORD=xxxx;Persist Security Info=True"

' ODBC
myDSN = "Driver={Oracle in OraClient11g_home1};DBQ=My_OraDB;" _
         & "UID=xxxx;PWD=xxxx;Persist Security Info=True"

或者,在创建命名的DSN后,其中未指定 Driver DBQ 参数:

' ODBC
myDSN = "DSN=My_DSN;UID=xxxx;PWD=xxxx"

确保ODBC驱动程序与您的应用程序位类型对齐。您可以通过位于32位(C \ windows \ sysWOW64)或64位(C:\ Windows \ System32)中的odbcad32.exe构建特定的DSN。