Предотвращение случайного перезаписи данных в Access 2007 - PullRequest
0 голосов
/ 25 октября 2011

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

По умолчанию у меня AllowEdits, AllowAdditions и AllowDeletions установлены наложный.Нажатие на кнопку «Редактировать режим» меняет это.

Я также добавил несколько событий формы, так что при изменении отображаемой записи режим редактирования отменяется.

Я сейчас нахожучто я не могу создать новые записи, так как, когда я нажимаю BtnNew (стандартный макрос добавления новой записи прилагается), я получаю сообщение об ошибке «Вы не можете перейти к указанной записи».

Код VBУ меня в базе есть следующее, кто-нибудь может увидеть, что я делаю не так, или с чего начать искать?(Мои знания VB / Access отсутствуют, но я понимаю концепции, поскольку являюсь разработчиком на C #).

Private Sub BtnEdit_Click()
    If lblEditMode.Caption = "Edit Mode" Then
        Disable
    Else
       Enable
    End If
End Sub

Private Sub Form_AfterDelConfirm(Status As Integer)
    Disable
End Sub

Private Sub Form_Current()
    Disable
End Sub

Private Sub Disable()
    AllowEdits = False
    AllowAdditions = False
    AllowDeletions = False
    BtnNew.Enabled = False
    BtnDelete.Enabled = False
    lblEditMode.Caption = ""
End Sub

Private Sub Enable()
    AllowEdits = True
    AllowAdditions = True
    AllowDeletions = True
    BtnNew.Enabled = True
    BtnDelete.Enabled = True
    lblEditMode.Caption = "Edit Mode"
End Sub

Меня поражает, что я почему-то не устанавливаю для параметра AllowAdditions значение True, но мой ярлык четкоправильно отображает «Режим редактирования».

1 Ответ

1 голос
/ 25 октября 2011

Ваша проблема в том, что при переходе к новой записи Access устанавливает для параметра AllowAdditions значение false через Form_Current, что делает пребывание в новой записи недействительным (по существу). Я не уверен, что это лучшее решение, но я бы установил переменную состояния в качестве уровня формы, затем при выборе новой кнопки установите эту переменную и задайте Form_Current, чтобы пропустить функцию отключения.

Enum ValidStates
    Locked = 0
    Edit = 1
    NewRecord = 2
End Enum

Dim formState As ValidStates

Затем для btnNew используйте [Процедура обработки события]

Private Sub btnNew_Click()
    On Error GoTo Err_btnNew_Click

    formState = NewRecord
    DoCmd.GotoRecord , , acNewRec

    Exit Sub

Err_btnNew_Click:
    MsgBox Err.Description
End Sub

И в событие Form_Current добавьте это:

Private Sub Form_Current()
    If formState <> NewRecord Then Disable
    formState = Edit
End Sub

Это позволит вам редактировать новую запись. Каждая из функций Enable и Disable также добавит строку для установки правильных состояний формы:

formState = Locked ' for Disable
formState = Edit ' for Enable
...