Microsoft Access 掲示板

非連結テキストボックスデータの取り込み

8 コメント
views
4 フォロー

月々のtodoをチェックするためのフォーム「月TODOフォーム」について
レコード毎に様々なTODOが入っているのですが
各レコード内のテキストボックスに、ヘッダーで選択した「年」と「月」を引っ張ってきたいです。
また、レコード毎にメールテンプレを作成するためのボタンも配置し、テンプレ内でも「年」「月」の情報を使用します。

ヘッダーの「年」「月」については今月と限らない(TODOが次月に持ち越す可能性あり)ため、手動のコンボボックスで選択します。
非連結の状態で、レコードに情報を引っ張ってくることはできますでしょうか?
それとも、新たに1つテーブルを作成する必要がありますでしょうか?

ふせん
作成: 2020/10/20 (火) 13:09:39
最終更新: 2020/10/20 (火) 13:10:21
通報 ...
1
ふせん 2020/10/20 (火) 14:22:07 0029a@1c915

追記
次月にTODOを持ち越した際、別のTODOが追い越す可能性はないため、年月を変更する際はリセット(リセットボタンを押す)してから変更する予定です。

2

とりあえず、現状のテーブル設計を提示してください。

テーブル名、フィールド名、主キー設定

3
ふせん 2020/10/20 (火) 15:36:06 0029a@1c915

失礼いたしました。
月TODOテーブル
「ID」(主キー)
フィールドは「txtタイトル」「txt担当者」「txtメールテンプレID」「txt完了日」になります。
また「btnメール作成」も設置予定です。

ちなみに主キーについてですが、オートナンバーにすると希望の順番に並ばないので現在は手動でIDを設定しているのですが、今後、慣れないユーザーに使わせる際には意図が伝わらないかと思っています…ID発行について良いアイデアはありませんでしょうか。

8
hiroton 2020/10/21 (水) 10:30:50 989d9@f966d >> 3

その「ID」は本当に必要ですか?
例えば「タイトル」は主キーになりませんか?

任意の並び順が欲しいのであればそのまま「並び順」フィールドを作って数値で管理し並び替えればいいと思います

これ以上は「ID」をどう使いたいのかも分かりませんし、当初の質問の内容ともずれているので運用の想定も含めて新しく質問を作ってもらえればと思います

4

フィールドは「txtタイトル」「txt担当者」「txtメールテンプレID」「txt完了日」になります。

これはテーブルのフィールド名で間違いないですか。フォーム上のコントロール名のような感じですが。
あと「txt完了日」フィールドのデータ型は日付/時刻型ですか。

月TODOテーブル

名前からテーブルが月ごとにあるような感じの名前ですが、そういうわけではないですよね。

以上、ご回答お願いします。

5
ふせん 2020/10/20 (火) 15:51:41 0029a@1c915 >> 4

間違いました…すみません。テーブルのフィールド名はそれぞれのプレフィックスを外した名前になります。

「完了日」は日付/時刻型です。

テーブルの名づけが良くないのですが、月毎にあるわけではありません。
月毎のTODOで、例えば完了日は終わったことを自覚するために入力するためのもので
次の月になったら上書きしていく予定です。

色々説明不足でお手数をおかけします。

6

下記のサンプルような感じのフォームではどうでしょうか。

月単位でデータ入力する場合の日付入力の効率的なUIを考える - hatena chips

年と月を別のコンボボックスにするのは必ずしも使いやすいとか限らないかも。

別のコンボボックスにしたとしても、年月でフィルターをかける、既定値を設定する、などの部分は参考になると思います。

7
hiroton 2020/10/21 (水) 10:17:34 989d9@f966d

次月にTODOを持ち越した際、別のTODOが追い越す可能性はないため、年月を変更する際はリセット(リセットボタンを押す)してから変更する予定です。

「年月を変更する際は~変更する」だと、それ以外の場合は変更したくないということですよね?データはどこかに記録しておかないと消えてしまいます。データの記録が必要ならやはりテーブルを持つべきでしょう

システム上で1つだけあればいいデータを保持したいのならたとえば「TsystemProperty」というテーブルを作って
name(テキスト型・主キー)
num(数値型)

namenum
月TODO開始年2020
月TODO開始月10

とすれば、フォーム上からなら

=DLookup("num","TsystemProperty","name='月TODO開始年'")
=DLookup("num","TsystemProperty","name='月TODO開始月'")

の形で参照することができます。

非連結のコントロールで読み込み、変更もしたいならVBAでフォームの読み込み時にデータの読み込み、各コントロールの更新後処理でテーブルのデータ更新を行えば実現できます

Private Sub Form_Load()
    Me!年 = DLookup("num", "TsystemProperty", "name='月TODO開始年'")
    Me!月 = DLookup("num", "TsystemProperty", "name='月TODO開始月'")
End Sub

Private Sub 年_AfterUpdate()
    CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!年,"NULL") & " WHERE name = '月TODO開始年'"
End Sub

Private Sub 月_AfterUpdate()
    CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!月,"NULL") & " WHERE name = '月TODO開始月'"
End Sub