2016-04-27 3 views
0

Все,Связь OLEDB от Excel до Oracle Issue

Проблема VBA убивает меня последние два дня. У меня есть модель на основе макросов в Excel, которая имеет наборы данных, купленные в электронные таблицы от Oracle через OLEDB. Чтобы проиллюстрировать проблему, я просто создал две функции в Модели. Один использует ODBC («odbc»), а другой - OLEDB («OraOLEDB»). На прошлой неделе код работал совершенно нормально, и он не был изменен.

В настоящее время, однако, появляется сообщение об ошибке «Ошибка времени выполнения» 424: Объект Обязательно, когда я выполняю строку «conn.Open strCon» в разделе «OraOLEDB». Соединение не может быть установлено с помощью база данных! Поэтому, когда я пытаюсь установить соединение с базой данных с этой строкой кода, она терпит неудачу. Интересно, что через ODBC можно установить соединение. Строка «conn.Open strCon» в sub «odbc «Выполняется успешно, и я могу установить соединение с базой данных.

Я ничего не менял в Excel-модели, но недавно у меня появилось множество обновлений Windows. Я не знаю, было ли это повреждено. думаю, что может быть. Причина, по которой я не хочу использовать соединение ODBC, заключается в том, что он значительно медленнее. 0x быстрее, используя OLEDB. Пожалуйста, дайте мне знать, если вы можете помочь.


Sub odbc() 
Dim conn As Object 
Dim strCon As String 

strCon = "Driver={Microsoft ODBC for Oracle}; 
      CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
      (HOST=xxx)(PORT=1521)) 
      (CONNECT_DATA=(SERVICE_NAME=xxx))); 
      uid=xxx;pwd=xxx;" 

Set conn = CreateObject("ADODB.Connection") 

conn.Open strCon 

End Sub 

Sub OraOLEDB() 
Dim conn As Object 
Dim strCon As String 

strCon = "Provider=OraOLEDB.Oracle; 
      Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) 
      (HOST = xxx)(PORT = 1521)) 
      (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = xxx))); 
      User Id=xxx;Password=xxx" 

Set conn = CreateObject("ADODB.Connection") 

conn.Open strCon 

ответ

1

Это означает, что Set conn = CreateObject("ADODB.Connection") ничего не возвращает. Проверьте регистрацию ADODB.dll. В качестве альтернативы вы можете использовать

Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 

и вы увидите, если ADODB доступен в данный момент вы изменить сценарий, не дожидаясь ошибок во время выполнения.

+0

Serg. Определение переменных таким образом фиксировало это. Спасибо. – jp3nyc

+0

@ jp3nyc: Пожалуйста, отметьте ответ, который помог вам лучше всего принять так, чтобы мы, читатели, знали, какой именно ответ решил вашу проблему. – Rachcha

2

Я вижу хост для подключения OLEDB является MODn-ast- fdb1. ... в то время как для соединения ODBC у вас есть modn-ast- tdb1. ... Разве хост не должен быть таким же?

+0

Спасибо mathguy. Сделано изменение. – jp3nyc