第4回で作成したアイテム入力フォームですが、テーブルへの保存をレコードが移動した時に保存される仕組みを利用しました。
この方法だと、入力途中にマウスホイールをコロコロした時など、保存したくない時にフォームの内容を保存してしまうことがあります。そうすると、テーブルにどうでもいいレコードが溜まっていってしまいます。
それを防ぐために、今回は、入力フォームの保存を追加クエリで行う方法を説明します。
「Access起動時にフォームを表示 フォーム同士をつなぐ|DQのアイテムデータベースをAccessで作る10」の続きです。
起動時にナビゲーションメニューの表示をしない設定にしている場合は、元に戻してください この記事を参考にしてください。
アイテム入力フォーム をデザインビューで開きます
フォームのプロパティシートを開きレコードソースを空欄にします
アイテム入力フォームに値段入力欄がないので作っておきます
テキストボックスのアイテム名、分類、攻撃力、守備力、効果のコントロールソースを空欄にしておきます
アイテム入力フォームを上書き保存しておきます(開いたままにしておく)
追加クエリを作っていく
ツールバーの作成→クエリデザインから新規クエリを作成します
テーブルの表示のウインドウが出ますが何も追加しないで閉じるをクリックします
ツールバー→デザイン→クエリの種類 追加をクリック
カレントデータベースが選択されていることを確認して
テーブル名はT-アイテム選択しOKをクリック
これで、選択クエリから追加クエリに変わりました。
フィールド欄で右クリック→ビルド→式ビルダーが起動する
式の要素でForms→読み込まれたフォーム→アイテム入力フォームを選択
式のカテゴリでアイテム名をダブルクリック
OKをクリック
分類、攻撃力、守備力、効果、値段もアイテム名と同様にフィールドに入れていきます
式1の所のレコードの追加をアイテム名を選択
これはT-アイテムテーブルのアイテム名フィールドにアイテム入力フォームのアイテム名テキストボックスのデータを入れ込むという命令です
式2~式6の分類、攻撃力、守備力、効果、値段もアイテム名と同様にレコードの追加欄に該当するフィールドを選択していきます
追加-アイテムと名前を付けて保存します
アイテム入力フォームのVBAを書き換える
開いたままになっているアイテム入力フォームを選択します
保存ボタンのプロパティシートを開きイベントタブのクリック時のイベントプロシージャを開きます
DoCmd.Close acForm, “アイテム入力フォーム”
DoCmd.OpenForm “アイテム入力フォーム”
の部分をいったん消します(後でまた入力します)
代わりに
DoCmd.SetWarnings False
DoCmd.OpenQuery “追加-アイテム”
DoCmd.SetWarnings True
を入力します
このコードの意味は
DoCmd.OpenQuery “追加-アイテム”だけでも、フォームのデータをテーブルに保存することはできるのですが、このようなシステムメッセージがでます
このようなメッセージがでると、ユーザーであるよろずやの店主から苦情がでます
不必要なシステムメッセージは出ないようにしてあげます
DoCmd.Close acForm, “アイテム入力フォーム”
DoCmd.OpenForm “アイテム入力フォーム”
フォームの内容をリフレッシュするために、一度アイテム入力フォームを閉じる命令をして、再度開く命令を入れます
アイテム入力フォームを上書き保存します
動作確認
なんでもいいのですが
アイテム名:どくばり
分類:武器
攻撃力:10
守備力:
効果: 1ダメージを与えるor即死の効果
と入力して、保存をクリックします
T-アイテムテーブルを開いて確認するとしっかりデータが入力されています
今回は入力フォームを追加クエリを使ってデータ保存をするやり方を紹介しました。
ユーザーがシステム開発者の意図しない操作で、変なデータが入力され内容にする工夫です。参考になれば幸いです。
コメント