MEのHigeさんのためになる話

4児のパパ臨床工学技士が綴るお役立ち情報、初心者向けMicrosoftAccessについて

第13 回臨床工学技士(ビジネスマンの方も)のためのAccess講座 入力フォームの保存を追加クエリで行う

f:id:me-hige:20200202200632j:plain
MEのHigeです

第4回で作成したアイテム入力フォームですが、テーブルへの保存をレコードが移動した時に保存される仕組みを利用しました。
この方法だと、入力途中にマウスホイールをコロコロした時など、保存したくない時にフォームの内容を保存してしまうことがあります。そうすると、テーブルにどうでもいいレコードが溜まっていってしまいます。

それを防ぐために、今回は、入力フォームの保存を追加クエリで行う方法を説明します。

第 12回の続きです

第12回で、起動時にナビゲーションメニューの表示をしない設定にしている場合は、元に戻してください

この記事を参考にしてください


この回だけの内容を試してみたい方は、ダウンロードボタンからファイルを保存して、試してみてください。

f:id:me-hige:20200202163021g:plain

アイテム入力フォーム をデザインビューで開きます

f:id:me-hige:20200202171613p:plain

フォームのプロパティシートを開きレコードソースを空欄にします

f:id:me-hige:20200202171957p:plain

アイテム入力フォームに値段入力欄がないので作っておきます

f:id:me-hige:20200202180202p:plain

テキストボックスのアイテム名分類攻撃力守備力効果のコントロールソースを空欄にしておきます

f:id:me-hige:20200202183921p:plain

 

 アイテム入力フォームを上書き保存しておきます(開いたままにしておく)

追加クエリを作っていく

ツールバーの作成クエリデザインから新規クエリを作成します
テーブルの表示のウインドウが出ますが何も追加しないで閉じるをクリックします

f:id:me-hige:20200202173006p:plain

 

ツールバー→デザイン→クエリの種類 追加をクリック

f:id:me-hige:20200202174702p:plain

カレントデータベースが選択されていることを確認して
テーブル名はT-アイテム選択しOKをクリック

f:id:me-hige:20200202174931p:plain

これで、選択クエリから追加クエリに変わりました。


フィールド欄で右クリック→ビルド→式ビルダーが起動する
式の要素でForms読み込まれたフォームアイテム入力フォームを選択
式のカテゴリでアイテム名ダブルクリック
OKをクリック

f:id:me-hige:20200202173411p:plain f:id:me-hige:20200202173701p:plain

 

分類攻撃力守備力効果値段もアイテム名と同様にフィールドに入れていきます

f:id:me-hige:20200202174348p:plain

式1の所のレコードの追加をアイテム名を選択
これはT-アイテムテーブルアイテム名フィールドにアイテム入力フォームアイテム名テキストボックスのデータを入れ込むという命令です

f:id:me-hige:20200202175409p:plain

 式2~式6の分類攻撃力守備力効果値段もアイテム名と同様にレコードの追加欄に該当するフィールドを選択していきます

f:id:me-hige:20200202190908p:plain

追加-アイテムと名前を付けて保存します

f:id:me-hige:20200202180734p:plain

 

アイテム入力フォームのVBAを書き換える

開いたままになっているアイテム入力フォームを選択します

f:id:me-hige:20200202181039p:plain

保存ボタンのプロパティシートを開きイベントタブのクリック時のイベントプロシージャを開きます

f:id:me-hige:20200202181402p:plain

DoCmd.Close acForm, "アイテム入力フォーム"
DoCmd.OpenForm "アイテム入力フォーム"

の部分をいったん消します(後でまた入力します)

 代わりに

DoCmd.SetWarnings False
DoCmd.OpenQuery "追加-アイテム"
DoCmd.SetWarnings True

 を入力します

f:id:me-hige:20200202182143p:plain

このコードの意味は

f:id:me-hige:20200202183107p:plain

 

f:id:me-hige:20200202183213p:plain

f:id:me-hige:20200202183302p:plain

 

DoCmd.OpenQuery "追加-アイテム"だけでも、フォームのデータをテーブルに保存することはできるのですが、このようなシステムメッセージがでます

f:id:me-hige:20200202183448p:plain

このようなメッセージがでると、ユーザーであるよろずやの店主から苦情がでます

不必要なシステムメッセージは出ないようにしてあげます

f:id:me-hige:20200202184912p:plain

DoCmd.Close acForm, "アイテム入力フォーム"
DoCmd.OpenForm "アイテム入力フォーム"

フォームの内容をリフレッシュするために、一度アイテム入力フォームを閉じる命令をして、再度開く命令を入れます

 

アイテム入力フォームを上書き保存します

 

動作確認

f:id:me-hige:20200202184500p:plain

なんでもいいのですが

アイテム名:どくばり
分類:武器
攻撃力:10
守備力:
効果: 1ダメージを与えるor即死の効果

と入力して、保存をクリックします

 

T-アイテムテーブルを開いて確認するとしっかりデータが入力されています

f:id:me-hige:20200202190050p:plain

 

今回は入力フォームを追加クエリを使ってデータ保存をするやり方を紹介しました。

ユーザーがシステム開発者の意図しない操作で、変なデータが入力され内容にする工夫です。参考になれば幸いです。