2016-10-13 13 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 

Это прекрасно работает, если пароль не содержит символ @. Если это произойдет - я получаю эту ошибку:

[Microsoft] [драйвер ODBC для Oracle] [Oracle] ORA-12154: TNS: не удалось разрешить идентификатор подключения указанного

Как я могу избежать этого символа? Может быть, мне нужно подключиться по-другому?

+0

Вы пытались вставить пароль в двойные кавычки? –

+0

@FlorentB. Я пробовал одиночные кавычки, и это не сработало. Как я могу использовать двойные кавычки? Это не скомпилирует: Rett = Rett & "pwd =" "& mDBPassword & "";" – javagirl

+0

Добавьте еще одну двойную цитату, чтобы избежать двойной цитаты: 'pwd =" "" & mDBPassword & """; ' –

ответ

2

До 11 г вы даже не могли использовать знак @ для входа в систему, поскольку он является частью стандартной строки соединения Oracle (например, sql*plus> connect scott/[email protected] для подключения к экземпляру 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>"

"[email protected]",

" "

См. Guidelines for Securing Passwords для получения полной информации.

+2

Драйвер ODBC «Microsoft ODBC для Oracle» является каменным и устаревшим (https://msdn.microsoft.com/en-us/library/ms713590%28v=vs.85%29.aspx), он говорит: «* Oracle 7.3x поддерживается полностью; Oracle8 имеет ограниченную поддержку *. Установите драйвер ODBC [из Oracle] (http://www.oracle.com/technetwork/topics/dotnet/downloads/net-downloads-160392.html), это должно работать лучше. –

+0

Спасибо @WernfriedDomscheit попытается разобраться в этом направлении. – javagirl

+0

@WernfriedDomscheit Я уже установил клиентское программное обеспечение oracle. Как я могу проверить, что драйвер oracle odbc уже установлен или нет, если он не будет частью установки клиента oracle? – javagirl

1

Драйвер ODBC «Microsoft ODBC для 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 вы не знаете, установлен ли драйвер/поставщик на всех других машинах.

Смежные вопросы