Я работаю над приложением Access с серверной частью SQL.
У меня есть форма для людей, где каждому человеку нужно проверять или не проверять разные вещи.В форме есть следующие поля и соответствующие элементы управления:
Нет параметров (целое число - логическое значение - флажок)
Параметр A (целое число - логическое значение - флажок)
Параметр AСумма (деньги)
Вариант B (целое число - логическое значение - флажок)
Вариант B Сумма (деньги)
Вариант C (целое число - логическое значение - флажок)
Опция C Сумма (деньги)
Опция D (целое число - логическое значение - флажок)
Командная кнопка опции D (открывает всплывающую форму с раскрывающимся списком типов опций и суммами для ввода нескольких значений).
Меня беспокоит то, что если кто-то отметит один ящик, он может вступить в конфликт с другим флажком или денежными полями.
Если кто-то выберет Без параметров, а один из других вариантов отмечен, янадо снять галочку с тех.Мне также нужно обнулить соответствующее денежное поле.Если в связанной таблице есть записи варианта «Другой вариант», то мне нужно удалить их тоже после подтверждения с пользователем.Я также хочу отключить флажки и элементы управления денежными средствами / кнопками для параметров A - D.
Если я сниму флажок Без параметров, тогда мне нужно включить все это.
Вы можете начатьчтобы увидеть, как каждый раз, когда я проверяю любую из опций «Нет» или опции «A-D», я должен проверить состояние «Без опций» и соответствующую сумму опциона, чтобы подтвердить, что пользователь хочет внести это изменение.
Для этого я установил следующий код для параметра «Нет параметров перед обновлением»:
Private Sub NoOptions_BeforeUpdate(Cancel As Integer)
Dim Msg, Style, Title
Dim delOLiensSQL
If Me.NoOptions = False Then
If (Me.OptionA = True Or Me.OptionB = True Or Me.OptionC = True Or Me.OptionD = True) Then
Msg = "You have chosen No Options, but one or more option is checked." & vbCrLf & _
"Choosing No Options will require removing all Lien amounts." & vbCrLf & _
"Would you like to change this Person to No Options?"
Style = vbYesNo
Title = "All Options Will Be Reset to 0 and False."
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
If Nz(DLookup("ID", "tblPersonOtherOptionsD", "FKPerson = " & Me.ID), 0) Then
delOLiensSQL = "Delete From tblPersonOtherOptionsD Where FKPerson = " & Me.ID
DoCmd.RunSQL delOoptionssSQL, dbSeeChanges
End If
Me.OptionA = False
Me.OptionAAmount = 0
Me.OptionB = False
Me.OptionBAmount = 0
Me.OptionC = False
Me.OptionCAmount = 0
Me.OptionD = False
OptionsAllowPubFunc (False)
Else
Me.Undo
MsgBox "OK, we will leave everything as it is.", vbOKOnly, "Better Safe Than Sorry"
End If
Else
Me.NoOptions = True
End If
Else
Me.NoOptions = False
End If
End Sub
OptionsAllowPubFunc (False) - это открытая функция, которая выглядит следующим образом:
Public Function PlaintiffLiensAllowed(Liens As Boolean)
Forms!frmPerson.OptionAAmount.Enabled = Liens
Forms!frmPerson.OptionBAmount.Enabled = Liens
Forms!frmPerson.OptionCAmount.Enabled = Liens
Forms!frmPerson.OptionDAmount.Enabled = Liens
End Function
Я также настроил перед обновлением общедоступную функцию для OptionA, OptionB, OptionC, OptionD следующим образом:
Public Function ChangeAOption(OptionCheck As Control, OptionAmount As Control, OptionName As String)
Dim Msg, Style, Title
Dim Msg2, Style2, Title2
If OptionCheck = True Then
If Nz(OptionAmount, 0) > 0 Then
Msg = "There is a " & OptionName & " Option amount. Unchecking " & OptionName & " Option, will require the amount to be 0." & vbCrLf & _
"Would you like to uncheck " & OptionName & " Option and make the amount 0?"
Style = vbYesNo
Title = "Confirm No " & OptionName & " Option."
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
OptionAmount = 0
OptionCheck = False
Else
OptionCheck.Undo
MsgBox "Ok, we will leave it as is.", vbOKOnly, "Better Safe Than Sorry."
End If
Else
OptionCheck = False
End If
Else
If Forms!frmPerson.NoOptions = True Then
Msg2 = "No Options is Checked. Checking " & OptionName & " Options will require no Options to be unchecked." & vbCrLf & _
"Would you like to uncheck no Options?"
Style2 = vbYesNo
Title2 = "Confirm No Options False."
Response2 = MsgBox(Msg2, Style2, Title2)
If Response2 = vbYes Then
OptionsAllowPubFunc (True)
Forms!frmPerson.NoOptions = False
OptionCheck = True
Else
OptionCheck = True
End If
Else
OptionCheck = True
End If
End Function
Я проверяю это, и когда я пытаюсь установить флажок No Options, меняюот ложного до истинного, я получаю ошибку времени выполнения '-2147352567 (80020009)':
Макрос или функция, для которых установлено свойство BeforeUpdate или ValidationRule для этого поля, предотвращают [приложение People]от сохранения данных в поле.
Кто-нибудь знает, что я делаю не так?Есть ли более простой способ сделать это?
Спасибо !!!