申し訳ありませんいくつかの興味深いやりとりがあり、私の熟練したVBAの猫の助言がほしいと思っています。更新前イベントConundrumアクセスVBA
詳細:
- は、フォーム上のチェックボックスを持っています。このチェックボックスは、テーブルにバインドされています。
- 元のフォームのサブフォームにコンボボックスがあります。
- メインフォームのbeforeupdateイベントには、Checkbox = Trueでコンボボックスをnullにすることができないかどうかをチェックするデータ検証があります。これは、必要な更新を行わずにユーザーがレコードを切り替えることを防ぐためのものです。
問題は、データの整合性を強化するとともに、できるだけUIの流れを妨げないようにすることです。 beforeupdateイベントでは、beforeupdateイベントが発生したサブフォームにフォーカスを切り替えるときに、UI FlowでINFロックが作成されるため、Cancel = Trueを使用できないことに注意してください。別の問題は、更新イベントが発生すると、チェックボックスの値がテーブルに書き込まれることです。チェックボックスのチェックを外すと、ソートの別のループが作成されます。これまで
私の解決策:前更新イベント
If Checkbox = True and IsNull(Me!ComboBox) = True Then
lastRecord = Me.CurrentRecord
chkBool = True
end if
で
Form_Currentイベント
currRecord = Me.CurrentRecord
If currRecord <> lastRecord And chkBool = True Then
DoCmd.GoToRecord acDataForm, "form", acGoTo, lastRecord
GoTo Exit_Form_Current
ElseIf currRecord = lastRecord And chkBool = True Then
'do stuff
vbSql = "Update Statement"
DoCmd.RunSQL vbSql
chkBool = False
Me.Refresh
End If
では、このアプローチするより良い方法はありますか?それとも私はそれにアプローチしなければならないのかなんて邪魔な仕事ですか?残念ながら、私はそれを回避するために、サブフォームが連続したサブフォームである必要があるため、再設計できません。
私はちょうど参考のために擬似コードを投稿しました。 –