2011/05/15

access2010 Webデータベース その45 レコードの保存 -5-

** Office365beta(プランP1) 環境 **
前回準備ができたので検証してみる。結論はちょっと問題あり。

フィールドの制約は以下の通り
  1. 一意
  2. フィールドの入力規則 Len([Category])<=25
  3. レコードの入力規則 [Category]<>"test99"
  4. 必須

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 件のコメント: