最新トピック
8
23 日前
Hatena様にご質問 23 日前
1
2 ヶ月前
排他制御 2 ヶ月前
6
5 ヶ月前
モジュールでカレントフォームのコントロールを使うには 5 ヶ月前
7
6 ヶ月前
日付のテキストボックスからフォームが開けません 6 ヶ月前
9
6 ヶ月前
レポートにおける数値の間隔を広げる方法 6 ヶ月前
12
6 ヶ月前
リストボックスから複数選択しそれをテーブルに格納したい 6 ヶ月前
タグリスト
Markdown テーブル生成
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
テーブル自体必要ないです。クエリをエクスポートします。
エクスポート操作を保存したなら、朝、最初に起動したときに、
そのエクスポートをVBAで実行するようにするといいでしょう。
実行した日時を保存するテーブルを作成しておいて、実行日時を格納しておきます。
ファイルを起動したときは、今日の日付の実行履歴がなければ実行するというようにしておけば、
1日に1回だけ実行できます。
完成前サンプルファイルついて
いろいろ修正点がありますので、一つずつ指摘していきますね。
テーブル設計
T_勤怠 テーブルの 業務No、作業No フィールドの規定値が 0 になってますが、これは削除しましょう。
0に設定してあると、入力せずに保存すると、0 になり未入力チェックができなくなります。
リレーションシップを設定しましょう。
リレーションシップを設定する意義は下記のリンク先を参照してください。
リレーションシップを設定した場合の利点 - hatena chips
リレーションシップを設定して、「参照整合性」にチェックを入れておくと、マスターに存在しない値を入力なるとメッセージが出て入力できないようになります。データベースではデータの不整合が発生すると致命的ですので設定しておいた方がいいでしょう。
サブフォームの設計
業務名、作業名 に関しては、クエリでマスターから引っ張ってくると、そこで編集するとマスターの方を更新してしまうので、メインフォームの方の設計のようにコンボボックスにしてコントロールソースは 業務No、作業No にして、列数、列幅の設定で業務名、作業名を表示させるようにします。
テキストボックスを右クリックして[コントロールの種類の変更]-[コンボボックス]でコンボボックスに変更して、メインフォームのコンボボックスと同じ設定にしてください
レコードソースのクエリに抽出条件を設定していますが、抽出はリンク親フィールド/リンク子フィールドの設定で可能ですので、クエリの抽出条件は削除しておきましょう。
リンク親フィールド/リンク子フィールドの設定は、
社員ID;日付というよう設定にします。複数のフィールドはセミコロンで区切って設定すればOKです。上記のように設定すれば、クエリに業務名、作業名は不要ですし、抽出条件も不要なので、レコードソースは、メインフォームと同じ Q_勤怠 にしてもOKですね。そうすれば、Q_勤怠内訳は不要なので削除しておきましょう。クエリは多くなると管理・メンテナンスが大変になりますのでなるべく少なくなるようにします。
メインフォームに「修正登録」というボタンがあり、そのクリック時で
DoCmd.RunCommand acCmdSaveRecordを実行してますが、実は、これは無意味です。メインフォームのレコード保存になり、サブフォームとは無関係です。
サブフォームで編集した場合、サブフォームでレコード移動するか、メインフォームへフォーカスを移動した時点で自動的に保存されます。
「修正登録」をクリックするとメインフォームにフォーカス移動しますのでそこで自動保存されます。
もし「修正登録」クリックするまでは登録されないとユーザーに誤解を与えますので、このボタンは削除しましょう。
修正したサンプルファイル
完成前_1.zip