2013-09-16 2 views
1

У меня есть лист в Excel 2010, который извлекает данные в QueryTables из базы данных Oracle, подключенной через DSN ODBC.Обновление таблицы Oracle из Excel VBA Macro с использованием соединения ODBC

Мне нужно взять данные из электронной таблицы и использовать ее для обновления таблицы в той же базе данных Oracle. Я не могу выполнить обновление из QueryTable, но это единственный метод подключения, с которым я смог работать с ODBC.

Я попытался создать соединение ADODB, но я получаю

'Run-time error '-2147467259 (80004005'): 

Automation error 
Unspecified error 

Вот код, который я использовал:

Sub Upload_Click() 
    Dim cn As ADODB.Connection 
    Set cn = New ADODB.Connection 

    With cn 
     .Provider = "MSDASQL" 
     .ConnectionString = "DSN=xcognosD;" 
     .Open 
    End With 

    cn.Close 
End Sub 

Добавлено примечание, я на Windows 7 с помощью 64 бит odbc, подключившись к базе данных Oracle 11.

+0

Вы могли бы найти понимание с помощью записи макросов и копирования, как это делает соединение – enderland

+0

Какие действия я должен выполнить, чтобы записать макрос, который соединяет без запроса? – Damienknight

+0

http://www.connectionstrings.com/oracle – SeanC

ответ

4

Провайдер "MSDASQL" является Microsoft's OLE DB Provider for ODBC Drivers. Он довольно старый, и теперь он устарел. Это действительно только для использования со старыми базами данных, для которых нет поставщиков OLE DB. Он также 32-битный, поэтому он не будет работать с 64-разрядными провайдерами (например, тот, который вы пытаетесь использовать). Вам лучше попробовать драйвер OLE DB.

MS OLEDB provider for Oracle является «MSDAORA» (который должен быть предварительно установлен на вашей машине), а Oracle's own OLEDB provider - «OraOLEDB.Oracle». Лучше всего посоветовать загрузить последний поставщик, предоставляемый Oracle, поскольку MSDAORA также устарела.

Вам необходимо загрузить и установить поставщик Oracle (если вы еще не)

.Provider = "OraOLEDB.Oracle" 

Вы также должны установить .ConnectionString. Посмотрите на http://www.connectionstrings.com/oracle-provider-for-ole-db-oraoledb/ для некоторых примеров.

0

По-видимому, ошибка «Run-time error» -2147467259 (80004005) «is excel по умолчанию». Была проблема с Oracle, и я не знаю, что это такое.

Сначала я узнал, что мой odbc указывал на старую БД, которая больше не существовала. После обновления odbc я все равно получаю ту же ошибку.

Однако ошибка больше не произошла в разделе «.Open», но в .Execute, где я пытался выполнить обновление. В конце концов я понял, что у пользователя нет доступа к обновлению таблицы, на которую я нацелился.

Поэтому, когда вы получаете сообщение об ошибке «Ошибка во время выполнения» -2147467259 (80004005), проверьте свои подключения и разрешения, скорее всего, они ошибаются.

Вот окончательный код, который я использовал, который работал после фиксации разрешений:

Sub Upload_Click1() 
    Dim Oracon 
    Dim recset 
    Dim cmd 

    Set Oracon = CreateObject("ADODB.Connection") 
    Set cmd = CreateObject("ADODB.Recordset") 

    Oracon.Open "Data Source=xcognosD;" 

    Oracon.Execute "update xstore set last_update_date = sysdate where store_cd = '0000'" 

    Oracon.Close 

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