#vba #ms-access
#vba #ms-access
Вопрос:
Я использую a listbox
для навигации между записями в форме, но иногда я Error Update or CancelUpdate without AddNew or Edit
Run-time Error 3020
продолжаю Me.Bookmark = rs.Bookmark
. Кажется, я не могу понять, в чем проблема, и мне было интересно, может ли кто-нибудь помочь мне с тем, как это исправить.
Option Compare Database
Option Explicit
Dim rs As DAO.Recordset
Private Sub listBox_AfterUpdate()
Dim rs As DAO.Recordset
If Not IsNull(ItemNo) And Not IsNull(itemName) Then
Set rs = Me.RecordsetClone
rs.FindFirst "[ItemNo] = '" amp; Me![listBox] amp; "'"
If Not rs.NoMatch Then Me.Bookmark = rs.Bookmark
Else
Exit Sub
End If
If IsNull(ItemNo) Or IsNull(itemName) Then
Exit Sub
End If
rs.Close
Set rs = Nothing
End Sub
Комментарии:
1. Убедитесь, что поле списка не привязано.
2. @Andre сегодня я просматривал весь модуль, а затем заметил, что у меня было
Dim rs As Dao.Recordset
вверху. Удаление его сверху и кода работает хорошо и еще не привело к ошибкам. Может ли это быть причиной? Поскольку поле списка используется для навигации между записями, оно привязано к одному столбцу, то есть кItemNumber
полю.
Ответ №1:
Вероятно, вы начали редактировать запись в форме. Сохраните ожидающие изменения перед переходом к другой записи.
If Not rs.NoMatch Then
Me.Dirty = False 'Saves any pending changes.
Me.Bookmark = rs.Bookmark 'Navigate to another record.
End If
Комментарии:
1. @Oliver Jacot-Descombes
Me.Dirty
, как вы указали, оцениваетFalse
, что всеMe.Dirty = False
еще выдает ту же ошибку.2. У вас есть другой код, который вызывает
rs.AddNew
илиrs.Edit
?3. Совсем нет. Приведенный выше единственный код, который у меня сейчас есть в модуле. Разве эта строка в текущем событии формы
Me!listBox = Me.ItemNo
может быть виновником?4.Я должен признать, что я не знаю, почему это происходит. Что-то еще:
rs.Close
Set rs = Nothing
должно быть вThen
регистре послеIf Not rs.NoMatch Then Me.Bookmark = rs.Bookmark
строки. ТогдаElse
с theExit Sub
и последнееIf
с другимExit Sub
являются излишними.5. @Oliveir Jacot-Decombes у меня был
Dim rs As DAO.Recordset
в верхней части модуля. Удаление, похоже, решает проблему, и с тех пор ошибка не возникала. Спасибо!