前回準備ができたので検証してみる。結論はちょっと問題あり。
フィールドの制約は以下の通り
- 一意
- フィールドの入力規則 Len([Category])<=25
- レコードの入力規則 [Category]<>"test99"
- 必須
1.一意/ユニーク
2.フィールドの入力規則
3.レコードの入力規則
4.必須
エラーメッセージがでない。そのままダイアログフォームは閉じマクロアクションは進行する。一度入力して削除しても同じ。
2のフィールドの入力規則とサンプルにはないけど数値フィールドに数値以外の入力をした場合は問題ない。これら以外について。
4.必須について。
そのままマクロアクションは進行してしまうがレコードは追加されない。ただ未入力であることのメッセージがでないということになっている。
1.一意と3.レコードの入力の規則について。
エラーメッセージ表示された後、Exitコマンドボタン押下
Exitボタンに割り当てたマクロアクションは、フォームがDirtyであればUndoしてフォームを閉じるなのだが、なぜか確認メッセージが出てくる。
いいえを押下してみる。
レコードの保存マクロアクションでエラーが発生した以降。Undoも出来なくなる
そこで、Form.Dirtyプロパティがおかしいのではないかと確認してみる。
エラーメッセージにDirtyの状態追加してみた。
Form.DirtyプロパティがFalseに更新されている。表示させてはいないけれどもレコードの保存/SaveRecordマクロアクションの直前までは、Trueであった。
新規レコードでなければ、Dirty状態のままになっている。
この状況はこれら以外でも発生しているように見受けられる。たとえば、Before Changeデータマクロイベントで生成したマクロエラー。
フォーム上のコントロールがハイライトされるエラー以外で、かつ新規レコードであった場合、エラー発生後Form.DirtyプロパティがFalseに更新されてしまうということだろう。
いろいろ眺めてみた結果、DirtyプロパティがFalseに更新されているときは、ID(オートナンバー)のカウンタが増加しているようだ。
次回この対策へ
0 件のコメント:
コメントを投稿