2016-10-13 58 views
0

我使用這個連接到Oracle:VBA:連接到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 

這工作正常,如果密碼不包含符號@。 如果確實如此 - 我得到這個錯誤:

[微軟] [ODBC驅動程序用於Oracle] [甲骨文] ORA-12154:TNS:無法解析指定

我怎樣才能逃避這個符號連接標識符?也許我應該以不同的方式連接?

+0

你是否試圖用雙引號括起密碼? –

+0

@FlorentB。我嘗試了單引號,它根本不起作用。雙引號如何處理?這不'編譯:Rett = Rett&「pwd =」「&mDBPassword & "";」 – javagirl

+0

添加另一個雙引號轉義雙引號:'pwd =「」「&mDBPassword & """;' –

回答

2

在11g之前,由於它是標準Oracle連接字符串的一部分(即,連接到test實例的sql*plus> connect scott/[email protected]),您甚至不能在密碼中使用@符號。在第一個字符後,只允許有_,$和#(以下稱爲特殊字符)至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>"

"[email protected]",

" "

有關詳細信息,請參閱Guidelines for Securing Passwords

+2

ODBC驅動程序用於Oracle的Microsoft ODBC是stone-age和[不建議](https://msdn.microsoft.com/en-us/library/ms713590%28v=vs.85%29.aspx),它說「* Oracle 7.3x完全支持; Oracle8支持有限*「。[從Oracle安裝ODBC驅動程序](http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html),這應該會更好。 –

+0

謝謝 – javagirl

+0

@WernfriedDomscheit我已經安裝了oracle客戶端軟件,如何檢查oracle odbc驅動程序是否已安裝,是否應該不是oracle客戶端安裝的一部分? – javagirl

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 & """;" 

如果你不知道,你可以在搜索HKLM\Software\ODBC\ODBCINST.INI\*\Drivers註冊表字符串SQORA32.dll ODBC驅動程序的確切名稱。父鍵告訴ODBC驅動程序的確切名稱。

你也可以使用OLE DB提供程序像這樣的:

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

ODBC一樣,你不知道司機/提供者是否被安裝在所有的其他機器。