• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESS2007 DMaxについて)

ACCESS2007のDMaxについて

このQ&Aのポイント
  • WinVistaでACCESS2007を使用しており、顧客との取引履歴のデータベースを作成しています。
  • 顧客Tと取引Tというテーブルを作成し、顧客フォーム内に取引履歴サブフォームを配置しています。
  • フォームを開いた際に、サブフォーム内の取引日の中で最新の日付をメインのフォームの「最終取引日」フィールドに自動的に更新したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

細かいフォーム構成がわからないのですが、単に「取引T」の最新日付を求めるのなら DMax("日付","取引T") で出来ると思います。 デーブルが空だった場合、今日にするには、 Nz(DMax("日付","取引T"),Date) で出来ると思います。 親フォームは「顧客T」をソースとしているようですが、親で表示した顧客の最新日付を求めるのなら、 Nz(DMax("日付","取引T","顧客ID = " & Me.顧客ID),Date) を、レコード移動時で求めればよいと思います。 (「顧客ID」が数値型の場合の記述例となってます) 「顧客T」内の「最終取引日」を更新するものとすると、 ・毎回更新する必要はない ・今日の処理はいらない となると、レコード移動時の処理は、以下のようになるのでしょうか。 Dim vTmp As Variant If (Not Me.NewRecord) Then   vTmp = DMax("日付","取引T","顧客ID = " & Me.顧客ID)   If (Nz(Me.最終取引日) <> Nz(vTmp)) Then     Me.最終取引日 = vTmp     DoCmd.RunCommand acCmdSaveRecord ' ★   End If End If ※ ★部分は、いったん変更を確定するためのもの(不要なら削除を) ※ 未検証 「顧客T」のレコードを移動した時っていうやり方ですよね。 「取引T」の新規レコード登録時に「顧客T」を更新っていう方法もあると思います。 いや、「顧客T」に「最終取引日」は、いらないっていうことも・・・ 参考にする/しない等々、自己責任でお願いします 追記) >「実行時エラー'-2147352567(800200009) このオブジェクトに値を代入することは出ません」とエラーが出ました。 フォームをデザインで表示後、プロパティシート内で確認していきます。 親のテキストボックス「最終取引日」のコントロールソースはどうなっていますか? レコードソースに記述し、そこで得られるフィールドと連結するためには、 コントロールソース部分は、「最終取引日」にします。 もし「=」で始まる書き方になっている場合、上記のエラーが出ます。 上記のエラーがでる一例という事で・・・

neve33609
質問者

お礼

こんにちは、ご回答ありがとうございます。 細かく、具体的なコードも掲載していただき感謝いたします。 結果はバッチリでした。 まだ、内容が理解できていない部分もありますが、他にも応用できるように、しっかり勉強させていただきます。 本当に感謝しております。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Access2003のヘルプからの引用ですが...  Dmax関数の引数2は、テーブル名またはクエリ名ですよね。 取引履歴サブフォームのレコードソースは、取引T ですよね。  とすれば、DMax("[取引日]","取引T") ではまずいですか?

neve33609
質問者

補足

アドバイスありがとうございます。 おっしゃる通り、引数2をフォームではなく取引Tにしてみました。 「実行時エラー'-2147352567(800200009) このオブジェクトに値を代入することは出ません」とエラーが出ました。 非連結フィールドも作ってみたら、そちらは見事に最新の日付を取得できました。 引数2はテーブル、クエリ名というのがわかったのでもう少し頭を悩ませてみます。

すると、全ての回答が全文表示されます。

関連するQ&A