Неизвестная ошибка при открытии соединения ADODB

Я сталкиваюсь с "Неуказанной ошибкой" только на одном ПК моих пользователей.

Ошибка выполнения '-2147467259 (80004005)':
Неизвестная ошибка

Я запускаю приведенный ниже код VBA, чтобы открыть соединение с базой данных Access, расположенной на общем сетевом диске. Но код выдает ошибку всякий раз, когда пытается выполнить оператор .Open.

Я подумал, что это проблема с драйвером, и установил механизм базы данных Access 2007 на ПК пользователя и заменил Provider на «Microsoft.ACE.OLEDB.12.0», но это не работает.

Код:

 Dim cn As ADODB.Connection
 Dim rs As ADODB.Recordset
 Dim retVal As Boolean
 Dim strSQL As String
 retVal = False

    On Error GoTo CatchError
     Set cn = New ADODB.Connection

     With cn
     .Provider = "Microsoft.Jet.OLEDB.4.0"
     .Properties("Jet OLEDB:Database Password") = Initialize.GetDBPwd 'returns pass
     .Open Initialize.GetDbConnectionString 'returns the network DB path
    End With

person tawfiq    schedule 12.08.2015    source источник
comment
Подключен ли общий сетевой диск в Windows? Является ли общий ресурс общим ресурсом Windows/SAMBA? Есть ли у вас надлежащие разрешения на этот общий ресурс, и эти разрешения были введены при сопоставлении общего ресурса? Вы пытались открыть его с помощью базы данных Access на локальном компьютере (например, C:\tmp)?   -  person Ralph    schedule 12.08.2015
comment
Что возвращает Initialize.GetDbConnectionString?   -  person Excel Developers    schedule 12.08.2015
comment
Что происходит, когда вы вручную пытаетесь открыть этот файл с ПК пользователя? Возможно, у пользователя Windows нет доступа. Является ли путь UNC или буквой диска?   -  person Nick.McDermaid    schedule 22.12.2015
comment
Если это Windows 7, существует известная проблема с сетевыми дисками, когда иногда диск все еще обновляется, а файлы блокируются другим пользователем, насколько я знаю, это до сих пор не было исправлено в 2015 году.   -  person SierraOscar    schedule 22.12.2015
comment
Если проблема возникает только на «одном компьютере», то этот компьютер, вероятно, будет источником проблемы. Заглядывали ли вы в журнал событий Windows на этом конкретном компьютере, чтобы получить больше информации о том, что произошло? неправильный? Это один ПК как-то специфичен? Чем этот компьютер отличается от других компьютеров, на которых работает ваш код?   -  person Daniel Dušek    schedule 25.12.2015


Ответы (4)


У меня такая же проблема при подключении ADODB из локального файла Excel к другому локальному файлу Excel.

Единственный способ решить эту проблему — повторно открыть основной файл Excel, из которого я выполняю подключение. Больше ничего не делалось, и функция снова работает.

Моя функция подключения:

Sub SetConReadOnly(ByRef con1 As Object, ByRef rst1 As Object, sFile As String)
    If con1 Is Nothing Then Set con1 = CreateObject("ADODB.Connection")
    If rst1 Is Nothing Then Set rst1 = CreateObject("ADODB.Recordset")

    con1.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
     "Data Source=" & sFile & ";" & _
     "Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
End Sub

(Я использую 32-разрядную версию Office 2013, 64-разрядную версию Windows 7)

person ZygD    schedule 22.12.2015

Какая у вас версия Excel?

У меня была эта ошибка, и решение заключалось в смене провайдера. Попробуйте изменить на это:

On Error GoTo CatchError
 Set cn = New ADODB.Connection

 With cn
 .provider = "Microsoft.Mashup.OleDb.1"
 .Properties("Jet OLEDB:Database Password") = Initialize.GetDBPwd 'returns pass
 .Open Initialize.GetDbConnectionString 'returns the network DB path
End With
person Joana Brandão    schedule 22.12.2015

До сих пор не нашел решения этой проблемы, но, похоже, проблема ограничена только одним пользователем.

Я написал несколько тестовых макросов в том же файле, в котором есть исходные макросы, которые открывают соединение БД с локальным файлом БД и удаленным файлом БД. Тест прошел успешно, но по какой-то причине один конкретный макрос все еще выдает эту «неопределенную ошибку» на этом конкретном компьютере пользователя.

Мы пришли к выводу, что это, скорее всего, связано с повреждением офиса. Мы отремонтируем офис и, надеюсь, это решит проблему. Сообщит вам, если это сработает.

Спасибо.

person tawfiq    schedule 18.08.2015
comment
Есть ли результаты после ремонта Офиса? - person ZygD; 23.12.2015

Я столкнулся с этой проблемой и определил, что эта проблема характерна для 64-разрядной версии Win7 с 32-разрядной установкой Office. Решение, с которым я случайно столкнулся, заключалось в том, что если я сохранил файл вручную и повторно запустил код, он работал без проблем. При попытке включить сохранение в обработчик ошибок и повторном вызове основной функции не получилось. Однако сохранение файла через Application.SendKeys "^s", а затем запуск файла через другой поток может воспроизвести результат ручного сохранения.

При дальнейшем расследовании я определил, что ошибка возникла из-за того, что определенные столбцы в источнике добавлялись во время выполнения перед запросом, и кажется, что механизм sql запрашивает из другого внутреннего необработанного источника, который не обновляется с изменениями, если не происходит сохранение и это было причиной ошибки.

person Anu Abraham    schedule 11.08.2016
comment
Инсайты, приглашенные от людей, которые могут расшифровать причину поведения - person Anu Abraham; 11.08.2016