доступ к oldValue для элемента управления в непрерывной форме приводит к ошибке 3251 в beforeUpdate при обновлении флажка в форме - PullRequest
6 голосов
/ 14 января 2012

Это одна из странных проблем, с которыми я сталкивался в 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 ​​являются объектами словаря (хотя, вероятно, не связаны с проблемой).

Моя форма имеет 3 элемента управления текстового поля ифлажок управления.Один из элементов управления текстового поля отключен и заполняется с помощью результатов простого внутреннего соединения (чтобы получить удобочитаемое имя, связанное с внешним ключом).Источник данных поступает из источника записей формы (DLookup или что-то еще не используется).

Если я отредактирую один из двух других элементов управления текстовым полем, этот код будет работать абсолютно нормально.ОДНАКО, если я переключаю флажок в форме, я получаю ошибку времени выполнения 3251. В окне часов я снова получаю сообщение об ошибке, когда пытаюсь просмотреть свойства элемента управления.Он показывает значение oldValue для отключенного элемента управления как «Reserved Error».

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

Кто-нибудь еще сталкивался с такой проблемой?

РЕДАКТИРОВАТЬ: При копании дальше, яобнаружил, что в действительности только одно из 3 редактируемых полей не будет вызывать эту ошибку.Содержит строковые данные.Два других элемента управления содержат значение даты и значение да / нет.Теперь я еще больше запутался.

1 Ответ

1 голос
/ 09 июля 2015

У меня есть две идеи по этому вопросу.

Первый: если RecordSource вашей формы представляет собой ODBC-таблицу, связанную с SQL-сервером, вам следует установить стандартное значение для столбца CheckBox.В противном случае он попытается установить для NULL значение False и выдаст ошибку, сообщив, что кто-то еще отредактировал текущую запись.

Вторая идея: иногда Access просто имеет небольшой «сбой» при компиляции кода.Вы можете сделать резервную копию вашей базы данных и затем попытаться декомпилировать ее, используя "C:\Program Files\Microsoft Office 2007\Office12\MSACCESS.EXE" "C:\yourFolder\yourDatabase.accdb" /decompile в окне «Выполнить ...» (конечно, вы должны вставить путь, как он есть на вашем компьютере).Это часто помогает решать странные проблемы.

...