入力フォームの保存を追加クエリで行う|DQのアイテムデータベースをAccessで作る11

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

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

「Access起動時にフォームを表示 フォーム同士をつなぐ|DQのアイテムデータベースをAccessで作る10」の続きです。

起動時にナビゲーションメニューの表示をしない設定にしている場合は、元に戻してください この記事を参考にしてください。

目次

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

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

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

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

よかったらシェアしてね!

この記事を書いた人

こんにちはAccessの壺です。
臨床工学技士としてどこかの病院で働いています。
夜な夜なMicrosoftAccessで遊びたおして、独学で病院内のいろんなシステムを開発してきました。
透析患者さんの透析条件管理システムやME機器管理システム、アンケート集計などなど作ってきました。
Accessの楽しさを発信するために、このサイトを運営中。

コメント

コメントする

目次
閉じる