Access VBA выбрасывает незарегистрированный код ошибки - PullRequest
0 голосов
/ 25 января 2011

Я вижу код ошибки, подобный этому, в моем Access 2000 VBA:

-2147352567-Запись в «[SomeTable]» была удалена другим пользователем.

Итак, 2 вопроса:

1) Как мне обработать / избежать такого кода ошибки?

2) Может кто-нибудь объяснить, почему я получаю код ошибки, которого нет в документации MS? И есть ли способ расшифровать этот код? Это комбинация нескольких кодов? Будем благодарны за любые рекомендации по этой теме.

Public Sub Form_Open(Cancel As Integer)

' Check for unposted record / regardless of Date / Shift
' If there is an unposeted record goto it

  Dim lCheck
  Dim sPress As String

On Error GoTo Form_Open_Err

GotoRecord:

  If bPressConsumptionOpenRan = True Then
    lCheck = DLookup("PressConsumptionID", "spI_GetUnPostedRecord")
    If Not IsNothing(lCheck) Then
      Me.txtPressConsumptionID.SetFocus
      DoCmd.FindRecord lCheck
    Else
      DoCmd.SetWarnings False
      DoCmd.OpenQuery ("spI_InsertNewPressConsumption")
      Me.Requery
      DoCmd.SetWarnings True
    End If
  End If

Form_Open_Exit:

  Exit Sub

Form_Open_Err:

  sErrMsg = Err.Number & "-" & Err.Description
  MsgBox sErrMsg, vbCritical + vbOKOnly + vbInformation, "Program Error"

Так что я только что закомментировал

При ошибке GoTo

строк в Form_Open (), Form_Load () и Form_Activate (), и до сих пор нет вызова отладчика. Эта ошибка отображается при открытии БД, поэтому я понятия не имею, где еще ошибка может быть в коде.

А вот код для IsNothing:

Public Function IsNothing(vCheck As Variant) As Boolean

On Error GoTo IsNothing_Err

  If IsNull(vCheck) Then IsNothing = True: Exit Function
  If IsEmpty(vCheck) Then IsNothing = True: Exit Function
  If Trim(vCheck) = "" Then IsNothing = True: Exit Function

IsNothing_Err:

  IsNothing = False

End Function

Теперь я получаю похожую ошибку в Form_Current ():

Private Sub Form_Current()

  Dim sUser As String

On Error GoTo Form_Current_Err

  If IsNothing(Me.dtpUsageDate) Then
    Me.dtpUsageDate = Date   'This line throws error.
  End If

...Ommitted to save space.  Not relevant...

Form_Current_Err:

  sErrMsg = Err.Number & "-" & Err.Description
  MsgBox sErrMsg, vbCritical + vbOKOnly + vbInformation, "Program Error"
  Resume Form_Current_Log

Form_Current_Log:

  On Error Resume Next
  Call LogError(sErrMsg, "PressConsumptions_Form_Current")
  GoTo Form_Current_Exit

End Sub

Сообщение об ошибке:

-2417352567-В этом элементе управления нет объекта.

Связано ли это сообщение с другим, которое мы видели? Есть мысли по поводу исправления?

1 Ответ

0 голосов
/ 27 января 2011

Номер ошибки и сообщение указывают на то, что это проблема извне Access. Тот факт, что вы выполняете сохраненный запрос с именем, предполагающим, что он запускает SPROC на сервере базы данных, подсказывает мне, что серверная часть - это SQL Server или какой-то другой сервер.

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

Но, конечно, это может быть вызвано чем-то другим.

...