Microsoft Access 掲示板

グループを作って該当のグループ仲間からデータを抽出する

7 コメント
views
4 フォロー

度々申し訳ありません・・・
自分ではとても解決しきれそうにない問題が出てきたので相談させてください。

【現状】
「T案件テーブル」主キー⇒案件ID/フィールド⇒案件発生日、前回の案件ID、案件グループID
「T案件グループ」主キー⇒案件グループID(オートナンバー)
「T案件案件グループ」主キー⇒案件ID(重複なし)・案件グループID

「F案件グループ」のサブフォーム「サブF案件」で案件IDを登録し、任意の案件同士をグループ化。
 T案件に各案件グループIDを埋め込む。

【やりたいこと】
「F案件」帳票(ソースはQ案件)で以下を実現したい。
⇒「前回の案件ID」フィールドに
  同じ案件グループの中から「案件発生日」が自身より1つ前の案件IDをひっぱる。
 (あまり関係ないとは思いますが、グループに属しない案件もあります。
  また、グループはオートナンバーですが、登録順は案件発生日順とは限りません。)
文章が下手で申し訳ありません…
自身の1つ前というのがどうしたらいいかわからずです・・

どんぐり
作成: 2020/09/09 (水) 10:41:51
最終更新: 2020/09/09 (水) 10:44:50
通報 ...
1
hiroton 2020/09/09 (水) 11:36:26 25184@f966d

DLooukup関数で案件グループIDと一つ前の日を指定すれば案件IDは拾えますね。「一つ前」は自身より小さいものの中で最大のものということでDMax関数で拾えます

ついでに「案件グループID」と「案件発生日」の両方のデータがないと取得できないので共通して使えるように関数化して、それぞれの更新後処理に「=set前回の案件ID()」で呼び出すとかですかね

Private Function set前回の案件ID()
Dim lastDay

If IsNull(Me!案件グループID) Or IsNull(Me!案件発生日) Then Exit Function

lastDay = DMax("案件発生日", "T案件テーブル", "案件グループID=" & Me!案件グループID & " AND 案件発生日<#" & Me!案件発生日 & "#")

If IsNull(lastDay) Then Exit Function

Me!前回の案件ID = DLookup("案件ID", "T案件テーブル", "案件グループID=" & Me!案件グループID & " AND 案件発生日=#" & lastDay & "#")
End Function
2
どんぐり 2020/09/09 (水) 14:31:07 1d451@2d897

ありがとうございます!!とても助かりました。
じっくり確認させていただきます。

この件周辺の仕様が私には難しく、どうしたものかずっと悩みあぐねております…
絡みでもう1件質問よろしいでしょうか…すみません…

サブ案件フォームに新規登録ボタンを作り、そこから案件を登録させようとしているのですが
そのとき、自動で開いた元ページの案件グループIDが入って欲しいです。
新規登録ページへの、値の受け渡しはどうすればよいでしょうか

4
hiroton 2020/09/09 (水) 15:41:07 25184@f966d >> 2

新規登録(登録前)ならフィールドの規定値を書き換えてあげればいいです

Docmd.OpenForm "新規登録ページ"
Forms!新規登録ページ!案件グループID.DefaultValue = Me!案件グループID
3
どんぐり 2020/09/09 (水) 14:48:08 1d451@2d897

悩んでいると書いた件につきまして、
ここ1か月くらい仕様設計を悩んでいますがいい案が思い浮かばないので書かせていただきます。
同じ案件グループに入る案件データにつきまして、期限の終わりに近づいたときに
次の案件データをアクセスで準備したいのですが、すぐには案件IDが発行されない状態です。
そこで、案件フォームの帳票にタブ切り替えで「今回の情報」と「次回の情報」を表示させているのですが
今回の「次回」と次回の「今回」が冗長になってしまうため
なんとか1つで済ませられないかと考えているのですが、
案件IDがすぐに発行されないのが厄介な状態になっています。
(案件IDは主キーから外しましたが、インデックスで重複無に設定しているので、空の状態で
 データ登録ができない。)

もし、この文では意味不明だが教えていただける、という方がいらっしゃったら
モデルデータのようなものを作成してみたいと思います。

5
hiroton 2020/09/09 (水) 16:04:04 25184@f966d >> 3

案件管理IDを別に用意して案件IDはインデックス(重複あり)で運用する

案件IDはなにか別のシステムから案件が正式に決まったときに発行されるとかなんですかね(ACCESSでは正式に決定される前に情報入力したいみたいな)
データとして存在するのに主キーとして設定できるフィールドがないのなら自前で用意するしかないですね

6
どんぐり 2020/09/09 (水) 17:03:42 1d451@2d897 >> 5

>案件IDはなにか別のシステムから案件が正式に決まったときに発行されるとかなんですかね
仰る通りです。書き忘れており申し訳ありません・・

主キーからは外したのですが、インデックス(重複無)に設定していたり、リレーションシップの関係で、空白にしたり、仮で「0000」と入れておけないようです。
(設計に問題があるのか…?)
もう1つ別にテーブルを作った方がいいのかな、など考えております。(案件IDがないもの専用。案件が発行された時点で更新クエリを使って移動?)
他に良い方法があれば何卒ご教示ください😭

7
どんぐり 2020/09/09 (水) 20:06:24 1d451@2d897 >> 5

インデックス(重複)にしたのち、色々設定を確認していたところ
設定に問題があったようで、案件IDなしで追加できるようになりました。
お騒がせして申し訳ありません。これで作っていきたいと思います。ありがとうございました。