Это одна из странных проблем, которые я видел в MS Access. У меня есть следующий код в непрерывной форме:
Private Sub thisForm_BeforeUpdate(Cancel As Integer)
If Not Cancel Then
Debug.Print "pre-logging data changes..."
' here we need to doublecheck to see if any values changed.
' we simply iterate through the whole list, re-setting oldValue
' and newValue.
For Each control In thisForm.Section(acDetail).controls
If control.ControlType = acTextBox Or _
control.ControlType = acComboBox Or _
control.ControlType = acListBox Or _
control.ControlType = acOptionGroup Or _
control.ControlType = acCheckBox Then
Debug.Print control.Name
oldValues(control.Name) = control.oldValue
newValues(control.Name) = control.value
End If
Next
End If
End Sub
oldValues и newValues являются объектами Dictionary (хотя, вероятно, не имеет отношения к проблеме).
Моя форма имеет 3 элемента управления текстовым полем и элемент управления флажком. Один из элементов управления текстовым полем отключен и заполняется с помощью результатов простого внутреннего соединения (для получения связанного с ним удобочитаемого имени с внешним ключом). Источник данных поступает из источника записей формы (ни DLookup, ни что-либо еще не используется).
Если я редактирую один из двух других элементов управления текстовым полем, этот код работает абсолютно нормально. ОДНАКО, если я переключу флажок в форме я получаю ошибку времени выполнения 3251. В окне часов я снова получаю сообщение об ошибке, когда пытаюсь просмотреть свойства «элемента управления». Он показывает значение oldValue для отключенного элемента управления как «Зарезервированная ошибка».
Если бы он делал это постоянно, я бы подумал, что это связано с отключением элемента управления; но поскольку он работает с устранить проблему, когда другие текстовые поля получают правки, и ломаются только при переключении флажка; Я в тупике. Я почти склонен полагать, что обнаружил ошибку в доступе, но я мог бы использовать дополнительные данные.
Кто-нибудь еще сталкивался с подобной проблемой?
РЕДАКТИРОВАТЬ: При дальнейшем копании я обнаружил, что на самом деле только одно из 3 редактируемых полей не вызовет эту ошибку. Он содержит строковые данные. Два других элемента управления содержат значение даты и значение «да / нет». Теперь я еще больше запутался.