Автоматизировать ответ на ошибку времени выполнения 3146 ODB C - сбой вызова - PullRequest
0 голосов
/ 12 марта 2020

У меня есть несколько панелей Excel, работающих на моей фабрике, которые обновляют sh каждую минуту, подключаясь к локальной базе данных Access и выполняя ряд запросов.

Сам БД имеет ODB C соединения с парой различных таблиц SQL базы данных. Они работают нормально в большинстве случаев, но у меня проблема со случайными 3146 ODBC--call failed ошибками.

Я работал с ИТ-специалистами и не смог выявить причину root.

Я могу нажать OK во всплывающем окне с ошибкой, и приборная панель может изменить sh отлично для другого дня или более, или это может вызвать ошибку 3146 снова через 10 минут. Кажется, нет никакой реальной последовательности в этом.

Я прочитал несколько сообщений о пропущенных первичных ключах в связанных таблицах относительно причины root. Это также может быть верно и здесь, но, к сожалению, эти таблицы принадлежат сторонним поставщикам, и я не могу изменить их, не создавая проблем с их функциональностью программного обеспечения.

За исключением фактического исправления причины root, мне интересно, есть ли способ через мой VBA, который я могу автоматизировать, нажав кнопку OK во всплывающем окне с ошибкой 3146, чтобы эта ошибка автоматически распознавалась и приборная панель может go о его бизнесе.

1 Ответ

0 голосов
/ 12 марта 2020

Один из способов справиться с ситуацией - перехватить ошибку. Я могу только предложить общий подход, который я использую в подобных ситуациях. Не зная больше о вашем приложении, трудно быть очень конкретным c. В этом ответе предполагается, что вы используете ADO для подключения к Access и извлекаете набор записей, чтобы заполнить панель мониторинга. Кроме того, предполагается, что вы не фиксируете ошибки в настоящее время. Вот шаблон, чтобы проиллюстрировать идею:

Public Sub Dashboard()
   On Error GoTo error

   Dim e As ADODB.error
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset

   Set cn = "however you are connecting"
   Set rs = "however you are retrieving data"  'assuming an error with this line

   Do While Not rs.EOF
      rs.MoveNext
   Loop

cleanup:
   'any code that always has to happen
   Exit Sub

error:
   If Err.Number = 3146 Then
      'do nothing and continue where you left off
      Resume Next
   End If

   'possibly check connection errors, too
   For Each e In cn.Errors
      If e.Number = 3146 Then
         'do nothing and continue where you left off
         Resume Next
      End If
   Next

   'show error and exit sub (which is what it is doing now)
   MsgBox Err.Description
   Resume cleanup
End Sub

Вот еще один вариант, если вы не хотите перехватить указанную ошибку c:

Public Sub Dashboard()
   Dim rs As ADODB.Recordset

   On Error Resume Next
   Set rs = "however you are retrieving data"  'assuming an error with this line
   On Error GoTo 0

   Do While Not rs.EOF
      rs.MoveNext
   Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...