VBA:连接到Oracle db,密码有一个特殊的符号

时间:2016-10-13 13:25:13

标签: oracle vba odbc special-characters adodb

我正在使用它连接到Oracle:

Set mDBConnection = New ADODB.connection    
Dim Rett As String
Rett = "CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)"
Rett = Rett & "(HOST=myhost)(PORT=1521))(CONNECT_DATA =(SERVICE_NAME = myservice)));"
Rett = Rett & "uid=" & mDBUser & ";"
Rett = Rett & "pwd=" & mDBPassword & ";"
MsgBox Rett
mDBConnection.Open "DRIVER={Microsoft ODBC for Oracle};" & Rett 

如果密码不包含符号@,则此方法可以正常工作。 如果是的话 - 我收到了这个错误:

[Microsoft] [Oracle的ODBC驱动程序] [Oracle] ORA-12154:TNS:无法解析指定的连接标识符

如何摆脱这个符号?也许我应该以不同的方式联系?

2 个答案:

答案 0 :(得分:2)

在11g之前,您甚至无法在密码中使用@ sign,因为它是标准Oracle连接字符串的一部分(即,sql*plus> connect scott/tiger@test连接到test实例)。在第一个字符达到10g之后,您只被允许_,$和#(在下面称为特殊字符)。显然,如果您使用这样的字符,您使用的驱动程序无法处理所需的双引号,因此我建议您更改驱动程序或密码。

  

您必须将以下密码括在双引号中:

     

包含多字节字符的密码。

     

以数字或特殊字符开头且包含的密码   字母字符。例如:

     

则 “123abc”

     

“#ABC”

     

“123dc $”

     

包含除字母字符以外的任何字符的密码,   数字和特殊字符。例如:

     

“ABC>” 中

     

“ABC @”,

     

“”

有关完整信息,请参阅Guidelines for Securing Passwords

答案 1 :(得分:1)

ODBC驱动程序“Microsoft ODBC for Oracle”多年来都是deprecated,您不应该使用它。文档说“完全支持Oracle 7.3x; Oracle8支持有限”。安装ODBC driver from Oracle,这应该会更好。

你的连接命令就像这样:

mDBConnection.Open "DRIVER={Oracle in OraClient11g_home1};dbq=" & mDBServer & ";" & _
                   "uid=" & mDBUser & ";pwd=""" & mDBPassword & """;"

如果您不知道ODBC驱动程序的确切名称,可以在HKLM\Software\ODBC\ODBCINST.INI\*\Drivers搜索注册表以查找字符串SQORA32.dll。父键告诉ODBC驱动程序的确切名称。

您也可以像这样使用OLE DB提供程序:

mDBConnection.Open "Provider=OraOLEDB.Oracle;Data Source=" & mDBServer & ";" & _
                   "User ID=" & mDBUser & ";Password=""" & mDBPassword & """;"

与ODBC类似,您不知道其他计算机上是否安装了驱动程序/提供程序。