我尝试使用以下代码连接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)'
有人可以帮忙吗?
非常感谢
答案 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。