VBA:连接Oracle db,密码有特殊符号
VBA: connect to Oracle db, password has a special symbol
我正在使用它连接到 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:could 无法解析指定的连接标识符
如何转义这个符号?也许我应该以不同的方式连接?
在 11g 之前,您甚至不能使用 @ 登录密码,因为它是标准 Oracle 连接字符串的一部分(即,sql*plus> connect scott/tiger@test
连接到 test
实例)。在第一个字符后最多 10g,您只能使用 _、$ 和 #(以下称为特殊字符)。显然,如果您使用这样的字符,您使用的驱动程序无法处理所需的双引号,因此我建议您更改驱动程序或密码。
You must enclose the following passwords in double-quotation marks:
Passwords containing multibyte characters.
Passwords starting with numbers or special characters and containing
alphabetical characters. For example:
"123abc"
"#abc"
"123dc$"
Passwords containing any character other than alphabetical characters,
numbers, and special characters. For example:
"abc>"
"abc@",
" "
有关完整信息,请参阅 Guidelines for Securing Passwords。
ODBC 驱动程序 "Microsoft ODBC for Oracle" 是 deprecated for many year, you should not use it. Documentation says "Oracle 7.3x is supported fully; Oracle8 has limited support". Install 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 一样,您根本不知道 driver/provider 是否安装在其他机器上。
我正在使用它连接到 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:could 无法解析指定的连接标识符
如何转义这个符号?也许我应该以不同的方式连接?
在 11g 之前,您甚至不能使用 @ 登录密码,因为它是标准 Oracle 连接字符串的一部分(即,sql*plus> connect scott/tiger@test
连接到 test
实例)。在第一个字符后最多 10g,您只能使用 _、$ 和 #(以下称为特殊字符)。显然,如果您使用这样的字符,您使用的驱动程序无法处理所需的双引号,因此我建议您更改驱动程序或密码。
You must enclose the following passwords in double-quotation marks:
Passwords containing multibyte characters.
Passwords starting with numbers or special characters and containing alphabetical characters. For example:
"123abc"
"#abc"
"123dc$"
Passwords containing any character other than alphabetical characters, numbers, and special characters. For example:
"abc>"
"abc@",
" "
有关完整信息,请参阅 Guidelines for Securing Passwords。
ODBC 驱动程序 "Microsoft ODBC for Oracle" 是 deprecated for many year, you should not use it. Documentation says "Oracle 7.3x is supported fully; Oracle8 has limited support". Install 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 一样,您根本不知道 driver/provider 是否安装在其他机器上。