テーブルをリレーションして日付検索時にサブフォームのページが変わる問題

このQ&Aのポイント
  • テーブルをリレーションして作成した単票フォームで、日付検索を行うと、同じ日付でも売上IDごとにサブフォームのページが変わってしまう問題に困っています。
  • 具体的には、同じ会社で同じ日付の売上データが複数ある場合、リレーションの関係により日付で検索しても売上IDごとにフォームのページが変わってしまいます。
  • この問題の解決策について、インターネットで検索しても適切な情報が得られず、質問させていただいています。ご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

大変困っています。

大変困っています。 簡単な事なのかもしれませんが、どなたかお教えください。 説明が拙いかも知れませんが、よろしくお願いします。 テーブルが3つあります。 T01・・・顧客ID(主キー)     会社名 T02・・・顧客ID     日付     売上ID(主キー) T03・・・売上ID     商品名     単価     数量     合計 この3つのテーブルを使って単票フォーム(F01)を作りました。 ただし、T03は帳票でサブフォーム(F02)です。 各テーブルにある同じ名前のもの同士がリレーションされています。 F01のヘッダーに検索できるテキストボックスとボタンがあり、日付検索を行えます。 ここで困っている問題なのですが・・・ 新規登録の時には、各項目を埋めていけばいいわけですが、 検索を行う時に、日付検索を行うと、同じ日付でも売上IDごとにサブフォームのページが変わってしまいます。 例えば (1つ目の登録) 日付:2011/09/30 会社名:○○商事 売上ID:1 商品名他:ボールペン、2個、200円、合計400円 (2つ目の登録) 日付:2011/10/01 会社名:○○建設 売上ID:2 商品名他:省略 (3つ目の登録) 日付:2011/09/30 会社名:○○商事 売上ID:3 商品名他:ホッチキスの芯、3個、50円、合計150円 1つ目と3つ目は同じ会社で同じ日付なので、 サブフォームには売上IDの1と3を同時に表示させたいのです。 ですが、リレーションの関係か何かわからないのですが、 日付で検索しても売上IDごとにフォームのページが変わってしまいます・・・。 インターネットで検索してみましたが、いまいちなんと検索すればいいのかわからず、 ここで質問させていただきました。 ご面倒おかけしますが、どうかお教えください。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

どうしても検索用フォームは作りたくない、と言うことなら以下でどうですか。 何をしたいのかわかりませんが。 コード中にメインフォームのレコードソースを変更したり、 元に戻したりします。サブフォームも行ないます。 元のレコードソースはこちらで設定しましたが、 実際に合わせて変更してください。一応メインフォームにも 日付でフィルタをかけるようにしました。 ただし、リンクをはずしているので親を移動させても 子は移動することはことはありません。もっとも サブフォームにフィルタしたレコードがすべて 表示されています。 ボタンを二つ設定し、日付検索用のテキストボックスを 一つ設定します。それぞれ、 cmd検索設定 cmd売上入力設定 tx日付検索用 という名前にします。 次にクエリを三つ。SQL文中の「Fメイン」はメインフォームの 名前です。実際に合わせて変更してください。 「Q売上入力用」 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID; 「Qメインフォーム検索用」 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 RIGHT JOIN T02 ON T01.顧客ID = T02.顧客ID; 「Q日付検索用」 SELECT T02.日付, T02.売上ID, T03.商品名, T03.単価, T03.数量, T03.合計 FROM T02 INNER JOIN T03 ON T02.売上ID = T03.売上ID WHERE (((T02.日付)=[Forms]![Fメイン]![tx日付検索用])); 次に、ボタンクリック時のイベントで。 なお、「埋め込み0」はサブフォーム表示コントロール名です。 サブフォームそのもの名前ではありません。実際に合わせて 変更してください。 Private Sub cmd検索設定_Click() Dim str As String If IsNull(Me!tx日付検索用) Then MsgBox "日付が入力されていません" Exit Sub End If If Not IsDate(Me!tx日付検索用) Then MsgBox "日付を正しく入力してください" Exit Sub End If str = "[日付] = #" & Me!tx日付検索用 & "#" 'メインフォームのフィルタ 'メインフォームのレコードソースの変更も含む Me.RecordSource = "Qメインフォーム検索用" Me.Filter = str Me.Requery 'サブフォームのフィルタ 'リンクフィールドの無効化 Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付検索用" Me.Requery Me.埋め込み0.Form.Filter = str Me.埋め込み0.Form.FilterOn = True Me.Requery End Sub Private Sub cmd売上入力設定_Click() 'メインフォームのレコードソースを基に戻す Me.RecordSource = "Q売上入力用" 'リンクフィールドを元に戻す Me.埋め込み0.Form.RecordSource = "T03" Me.埋め込み0.LinkChildFields = "売上ID" Me.埋め込み0.LinkMasterFields = "売上ID" Me.Requery End Sub 回答で、勘違い、間違い、不明な点があれば補足してください。

その他の回答 (6)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

兼用できるクエリを作ればクエリの数を減らすことができます。 以下の二つのクエリを作ります。 Qメインフォーム日付OR会社名検索用 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID WHERE (((T01.会社名)=[Forms]![Fメイン]![会社名入力])) OR (((T02.日付)=[Forms]![Fメイン]![日付入力])); Q日付OR会社名検索用 SELECT T02.日付, T02.顧客ID, T01.会社名, T02.売上ID, T03.商品名, T03.単価, T03.数量, T03.合計 FROM (T02 INNER JOIN T03 ON T02.売上ID = T03.売上ID) INNER JOIN T01 ON T02.顧客ID = T01.顧客ID WHERE (((T02.日付)=[Forms]![Fメイン]![日付入力])) OR (((T01.会社名)=[Forms]![Fメイン]![会社名入力])); 「Qメインフォーム日付OR会社名検索用」を 「Qメインフォーム日付検索用」と「Qメインフォーム会社名検索用」 の代わりに。 「Q日付OR会社名検索用」を 「Q日付検索用」と「Q会社名検索用」 の代わりに。 No6のVBAを以下に。クエリ名の入れ替えだけですが。 Private Sub cmd複合検索_Click() If Not IsNull(Me!日付入力) And IsNull(Me!会社名入力) Then If IsDate(Me!日付入力) Then Me.RecordSource = "Qメインフォーム日付OR会社名検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付OR会社名検索用" Me.Requery Else MsgBox "日付を正しく入力してください" Exit Sub End If ElseIf IsNull(Me!日付入力) And Not IsNull(Me!会社名入力) Then Me.RecordSource = "Qメインフォーム日付OR会社名検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付OR会社名検索用" Me.Requery ElseIf Not IsNull(Me!日付入力) And Not IsNull(Me!会社名入力) Then If IsDate(Me!日付入力) Then Me.RecordSource = "Qメインフォーム日付会社名検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付会社名検索用" Me.Requery Else MsgBox "日付を正しく入力してください" Exit Sub End If End If End Sub 使用するクエリは、 Qメインフォーム日付OR会社名検索用 Q日付OR会社名検索用 Qメインフォーム日付会社名検索用 Q日付会社名検索用 です。

nmt3942
質問者

お礼

こちらでもきちんとできました!! ありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

ついでなので、補足の分も含めて改造します。 No2はいらないものを数々残していたりしていたので すっきりさせます。No1の検索設定ボタンクリック時のイベント、 Private Sub cmd検索設定_Click() ・ ・ End Sub は残していてもいいですが。一応、新たに設定しなおすので 削除してもかまいません。 (1) まず、クエリを作成します。 Qメインフォーム会社名検索用 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID WHERE (((T01.会社名)=[Forms]![Fメイン]![tx会社名入力])); Qメインフォーム日付会社名検索用 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID WHERE (((T01.会社名)=[Forms]![Fメイン]![tx会社名入力]) AND ((T02.日付)=[Forms]![Fメイン]![tx日付入力])); Qメインフォーム日付検索用 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID WHERE (((T02.日付)=[Forms]![Fメイン]![tx日付入力])); Q会社名検索用 SELECT T02.日付, T02.顧客ID, T01.会社名, T02.売上ID, T03.商品名, T03.単価, T03.数量, T03.合計 FROM (T02 INNER JOIN T03 ON T02.売上ID = T03.売上ID) INNER JOIN T01 ON T02.顧客ID = T01.顧客ID WHERE (((T01.会社名)=[Forms]![Fメイン]![tx会社名入力])); Q日付会社名検索用 SELECT T02.日付, T02.顧客ID, T01.会社名, T02.売上ID, T03.商品名, T03.単価, T03.数量, T03.合計 FROM (T02 INNER JOIN T03 ON T02.売上ID = T03.売上ID) INNER JOIN T01 ON T02.顧客ID = T01.顧客ID WHERE (((T02.日付)=[Forms]![Fメイン]![tx日付入力]) AND ((T01.会社名)=[Forms]![Fメイン]![tx会社名入力])); Q日付検索用 SELECT T02.日付, T02.売上ID, T03.商品名, T03.単価, T03.数量, T03.合計 FROM T02 INNER JOIN T03 ON T02.売上ID = T03.売上ID WHERE (((T02.日付)=[Forms]![Fメイン]![tx日付入力])); (2) フォームにボタン一つと、テキストボックスを一つ 設定します。 cmd複合検索設定 tx会社名検索用 複合検索のボタンクリック時のイベントに、以下を設定します。 Private Sub cmd複合検索設定_Click() If Not IsNull(Me!日付入力) And IsNull(Me!会社名入力) Then If IsDate(Me!日付入力) Then Me.RecordSource = "Qメインフォーム日付検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付検索用" Me.Requery Else MsgBox "日付を正しく入力してください" Exit Sub End If ElseIf IsNull(Me!日付入力) And Not IsNull(Me!会社名入力) Then Me.RecordSource = "Qメインフォーム会社名検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q会社名検索用" Me.Requery ElseIf Not IsNull(Me!日付入力) And Not IsNull(Me!会社名入力) Then If IsDate(Me!日付入力) Then Me.RecordSource = "Qメインフォーム日付会社名検索用" Me.埋め込み0.LinkChildFields = "" Me.埋め込み0.LinkMasterFields = "" Me.埋め込み0.Form.RecordSource = "Q日付会社名検索用" Me.Requery Else MsgBox "日付を正しく入力してください" Exit Sub End If End If End Sub 以上です。使い方は、 (1) 日付入力のみデータが入っている場合は   日付で検索 (2) 会社名のみデータが入っている場合は   会社名で検索 (3)日付入力、会社名入力の両方にデータが入っている場合は   日付と会社名で検索

nmt3942
質問者

補足

ありがとうございます!!! できました!!! ただ、テキストボックスは2つにしてモジュールの Me!の後ろをそれぞれテキストボックスに合う名前に変更したらできました! もう十分の回答をいただいたのに、さらに回答していただいて 本当にありがとうございます。 もう一つも作ってみます! この度は大変ありがとうございました。 もしまたわからないことがあって、自分ではどうにもならず 質問する機会がありましたらまたご助力頂けると助かります(^^) ありがとうございました!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

サブフォーム表示コントロール名 というのは、メインフォームにサブフォームを 設定するときに最初にツールボックスから サブフォーム/サブレポート というコントロールを 貼り付け、そのコントロールのソースオブジェクトに サブフォームを設定します。 このときの 「サブフォーム/サブレポート」 というコントロール が「サブフォーム表示コントロール名」という表現を しています。 普通は、初期値は「埋め込み0」というような名前に なっています。 ウイザードで作るとサブフォーム名がそのまま コントロールの名前になっているかもしれません。 デザインビューでサブフォームの端っこで右クリックして プロパティで確認してみてください。

nmt3942
質問者

補足

できました! 涙がでるほど嬉しいです!! ありがとうございます! 返答も早く、詳しい説明でとってもわかりやすかったです! 日付で検索できるだけなく、元の状態にも戻すことができるなんて piroin654さんの聡明さだけでなく、アクセスの奥深さというか アクセスでできる可能性の広さに感動いたしました。 本当にありがとうございます。 重ねがさね申し訳ないのですが、よろしければもうひとつお教えください。 この検索システムに、会社名のテキストボックスを増やし、 会社名と日付と両方で検索することも可能ですか? お手が空いていて、しょうがないなと思われましたよろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

訂正です。 No2の「Qメインフォーム検索用」のSQL文の張り間違いです。 以下にしてください。 「Qメインフォーム検索用」 SELECT T02.顧客ID, T01.会社名, T02.売上ID, T02.日付 FROM T01 INNER JOIN T02 ON T01.顧客ID = T02.顧客ID WHERE (((T02.日付)=[Forms]![Fメイン]![tx日付検索用]));

nmt3942
質問者

補足

詳しい説明ありがとうございます! お返事が遅くなってしまった大変もうしわけありません… 今、NO2でご回答いただいたものを急いで作ってみていますので、 また困るか、解決するかしましたら、すぐにお返事いたします! >「埋め込み0」はサブフォーム表示コントロール名です。 というところが、よくわかりません… 表示コントロール名というのは、どこの設定?なのでしょうか? それともサブフォーム全体の[プログラム]の名前か何かなのでしょうか? せっかくご説明いただいているのに、わからないことだらけで大変恐縮に思います。 すみませんが、どうかよろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

補足の中の、 >おそらく、T03にも日付レコードを作成し ならば、もう少し簡素になるかもしれませんが。 こちらもしてみますか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

>新規登録の時には、各項目を埋めていけばいいわけですが、 つまり、売上が発生したときに売上伝票を新規に 起こし、売上を入力していくことができる、 というのは正常処理できている、ということですね。 それならば、メインフォームとサブフォーム表示コントロールは 売上IDでリンクされているのでしょうから、 検索を行う時に、日付検索を行うと、同じ日付でも 売上IDごとにサブフォームのページが変わってしまいます。 というのは、至極当然だと思います。 もし、日付で検索して複数の売上IDを抽出して サブフォームにその売上明細の売上IDにかかわらず 日付の範囲のデータを表示したいと思えば、検索用の フォームを新たに作ったほうが早いです。 そのときは、メインフォームとサブフォーム表示コントロール にリンクフィールドを設定せずにクエリ、あるいは VBAで抽出のロジックを組むようになります。

nmt3942
質問者

補足

さっそくのご回答ありがとうございます!! >検索を行う時に、日付検索を行うと、同じ日付でも >売上IDごとにサブフォームのページが変わってしまいます。 > >というのは、至極当然だと思います。 ですよね…笑 検索用のフォームを作ることも考えたのですが、 できるだけ窓を移動することを避けたいというのと、 検索したら反映するという形にしたかったため、検索フォームを別では作りませんでした。 クエリからの検索も作ってみたのですが、 一度検索を行うと二度目の検索からは一度目の検索結果レコードの下から 検索してしまうという壁にぶつかりました…。(わかりにくい説明ですみません) ということで、今は↓のHPさんから参考にさせていただいた検索方法を使用しています。 http://hatenachips.blog34.fc2.com/ VBAは↓です。 Private Sub 検索_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsNull(Me.会社名入力) Then strFilter = strFilter & " AND " & BuildCriteria("会社名", dbText, _ "*" & Replace(Me.会社名入力, " ", "* And *") & "*") End If If Not IsNull(Me.日付入力) Then strFilter = strFilter & " AND " & BuildCriteria("日付", dbText, _ "*" & Replace(Me.日付入力, " ", "* And *") & "*")★ End If Me.Filter = Mid(strFilter, 6) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If End Sub おそらく、T03にも日付レコードを作成し、 ★を入れたIF文章のところをT03の日付を指定するようにしたら 良いのではないかと思っているのですが… どういう文章にしたら良いのかもわからず、上手くいきません。

関連するQ&A

  • Access2000でメインサブフォーム

    テーブル1 商品ID 数値型(主キー) 商品名 テキスト型 ------------------ テーブル2 売上ID  数値型(主キー) 商品ID  数値型 月日   日付型 売上個数 数値型 --------------------- 以上のようなテーブルがあり、テーブル1を「メイン」テーブル2を「サブ」のメインサブフォームを作成しました。 しかし、「サブ」のデータが多いため、さらに、サブフォームの日付フィールドを使い、抽出をしたいのですが、方法がわかりません。(例えば、9/1以上9/10以下のような抽出) いろいろやってみは見たのですが、思うようにできません。メインサブフォームでさらにサブフォームのデータを抽出するということは無理なのでしょうか?

  • 至急Accessでフォームで検索できるようにしたい

    Accessのフォームで店舗IDと日付(例:201501-201502まで)を入力して検索ボタンを押したら、A店B店C店の過去1年分の売上履歴を蓄積したテーブルから(仮:テーブル名:全店舗売上履歴)その月の売上履歴がサブフォームにエクセルのような形式(表形式)でレコードが出てきて 別の枠に集計金額を表示させるような「売上履歴検索ツール」を作りたいのですが、どうしてもうまく行きません。 サブフォームを作りましたが どうしてもエクセルのような表形式でみれるように作れません。 また、店舗IDと日付で検索させるには VBAみたいな命令文が必要でしょうか? 作り方をアドバイスいただけると助かります。 (1)サブフォームに履歴をレコードごとに表示させたい (2)店舗ID、日付で検索させたい (3)検索範囲での集計金額を表示させたい (4)月の売上履歴をテーブルに蓄積させたい この4つのやり方を探しています。 【フォーム】 店舗ID→検索入力 日付→年月の検索入力 サブフォームに 日付(年月) 店舗ID 店舗名 販売商品名 数量 金額 をレコードごとに表示 その他(枠:フレーム) 集計した金額を表示 手順的な形で教えていただけると分かり良いです。 よろしくお願いいたします。

  • ACCESS教えて下さい。

    こんにちは。お願いします。 T_1 テーブル 企業名 売上合計 T_2サブ テーブル 売上内容 売上金額 仕入金額 を作成し、T_1のフォームを作成しT_2サブは、サブフォームにします。 入力していき、テーブル1の合計にサブフォーム上で入力した売上金額の合計が、計算されるようにしたいのですが・・・。 どうすれば良いでしょうか? 教えて下さい・・。

  • Access フォームのデータがテーブルに反映されない

    こんにちは。 現在、アクセスを使って簡単なデータベースを 作っていたのですが、ひとつわからないことがございます。 テーブルを二つリレーションを組んで、 フォームを作ったのですが、 うまく二つのテーブルにデータが 保存できません。 フォーム:顧客ID、名前、電話番号 サブフォーム:商品ID、商品名、納期、など。。。 こういった二つのテーブルで、サブフォームの方のテーブルに 顧客のデータも保存したいんですが、できるものなのでしょうか? 初心者でわかりづらくて、 大変申し訳ございませんが、よろしくお願い致します。

  • phpmyadminでのデータ挿入について

    phpmyadmin(ver3.4.9)を利用しています。 リレーションビューを用いて、以下のようなリレーションを組んだとします。 【商品テーブル】 id name 【売上テーブル】 syouhin_id uriagegaku ※商品テーブルのidと、売上テーブルのsyouhin_idがリレーション 売上テーブルのデータ挿入において、 現在は、syouhin_idのセレクトボックスには、 商品テーブルのidの値が出てきます。 これだと何の商品かよくわからないため、 データ挿入の効率を上げるため、 syouhin_idのセレクトボックスに商品名(nameの値)が出るような方法はありますでしょうか。 あくまでも、データ挿入時に商品名を参照したいのであって、 実際のデータは商品id(idの値)をsyouhin_idに入れたいのです。 つたない説明ですが、ご教授ください。 社内プログラマが急病のため、 プログラムを組んだりすることができず、 phpmyadmin画面内でのデータ挿入となりました。 なにとぞ宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • access 2000フォーム検索 サブフォームじゃだめ?

    access 2000でフォームにリレーションされたサブフォームを設置したのですが、使う段になってから気づいたのですが、サブフォームの検索できないんですね。 できないというか、リレーションされた結果が表示されるので、その中での検索となってしまう。 フォーム内容が1体多となっている。 テーブルA id name 1 aoki 2 sasaki テーブルAのidとテーブルBのuidはリレーションされている。 テーブルB uid book 1 辞典 2 漫画 1 ノート テーブルAのid1 aokiを表示しているフォームで、テーブルBの「漫画」で検索した際に検索できるようにするにはどうすればいいでしょうか。

  • Access、同じテーブルの2つの項目対他のテーブルで1つの項目のリレーションは可能?

    Accessで販売管理をしています。 以下のテーブルを作成し(*は主キーです)、 [売上T]  [商品M]  [顧客M]  [受注T] *売上NO  *商品ID  *顧客ID1  *受注NO 商品ID   商品名    *顧客ID2  商品ID 日付    顧客ID1     顧客名    受注日 金額    顧客ID2            受注金額        受注先1        受注先2 参照整合性にチェックを入れリレーションでつないでいます。 リレーションシップは下記のとおりです。 [売上T]商品ID―[商品M]商品ID―[受注T]商品ID [商品M]顧客ID1及び2―[顧客M]顧客ID1及び2―[商品M]受注先1及び2 ここで顧客と受注先が重複することもあるので、顧客Mから顧客ID及び受注先IDの2つのテーブルにリレーションシップを設定しているのですが、 クエリで  [受注T]受注NO及び受注金額、[顧客M]顧客名で抽出したところ、 5000件以上[受注T]にデータがあるはずのものが、1200件ほどしか抽出できませんでした。 ちなみに[顧客M]と[受注用顧客M]というまったく別のテーブルを作成し、 [商品M]受注先1及び2―[受注用顧客M]顧客ID1及び2 とリレーションを作成し、クエリで抽出するとうまくいきました。 しかしこの方法だと、[顧客M]と[受注用顧客M]という2つのテーブルを管理しなければならなくなるので面倒です。 そこで質問です。 同じテーブルの2つの項目対他のテーブルの1つの項目とでは、うまくリレーションが設定できないのでしょうか。 もし出来ない場合、[顧客M]と[受注用顧客M]の2つのテーブルを管理しなければならない訳ですが、 なんとか簡単に管理できる方法(ひとつのテーブルを変更すると簡単にもうひとつが変更できる設定)はないでしょうか。 非常にわかりにくく長い文章で申し訳ありません。 VBA等はさっぱりわかりませんので、普通の設定の範囲内で、できるかどうかよろしくお願いします。

  • ACCESS 2つのテーブルの最大値を選択クエリで抽出

    1週間以上悩んでいます。よろしかったらお知恵をお貸し下さい。 3つのテーブルがあります。 1.商品データT(商品ID、商品名)20件 2.売り上げデータT(商品ID、日付、場所、備考)9000件・・1日2回更新されます。 3.商品更新T(商品ID、更新内容、日付)1000件・・・1日1回更新されます。 この中から、1の商品名、2の最新の日付とそれに対応している場所と備考、3の最新の日付とのその更新内容を取り出したいのです。 3のテーブルにデータがない商品IDもあります。その場合は2の売り上げデータの最新のみ表示し、商品更新Tの更新内容や日付は空白にしたいです。 商品IDでグループ化にすると、20件の商品IDに、9000件もの場所や更新内容が表示されてしまったりしてうまくいきません・・・ なにぶん初心者ですので、クエリで作りたいです。 どなかたお分かりになる方、助けて下さい!!!

  • Access2003 リレーションされたサブフォームの抽出

    Access顧客情報のデータベースを正規化(VBA)している初心者です。リレーションされているテーブルを元にクエリ(3つのテーブルをつなげただけ)を作成しメインフォームにサブフォームを作りました。3つのテーブルは、1対多でリレーションされています。テーブルAのGR_IDやグループ名で検索しそれに紐づいているCOmpanyは抽出できるのですが、サブフォームのテーブルBのCOmpany nameから抽出することができません。メインフォームからオプションボタンを使用してメインとサブの両方のテーブルを検索したいので、子・親リンクの設定をはずせませんよね?以前の類似質問で「サブフォームのフィルターに入力し、フィルター実行でうまくいきました」とありましたが、具体的にどのように設定(マクロやVBA、再クエリ?)すればいいのかわからず悩んでいます。どうぞ初心者向きのアドバイスをよろしくお願いいたします。 テーブルA GR_ID グループ名 ※テーブルA(1):テーブルB(多) テーブルB GR_ID Company_ID Company name ※テーブルB(1):テーブルC(多) テーブルC Company_ID salesman

  • ファイルメーカー 同一IDと日付への番号振り当て

    Aテーブル(伝票)とBテーブル(明細1商品で1レコード)があり A 受注シリアル 日付 顧客ID 合計金額 B 受注シリアル 受注ID 日付 商品名 色 数 小計 フィールドがあり 受注シリアルでリレーションをはり、AにBの内容(商品名、数、色など)をポータル表示させようと考えております。 今回の質問は今まで一つのテーブルで作業をしていたので一度2つのテーブルに別ける事にしました。 今までのデータをBテーブルのフィールド(顧客ID、日付、商品名、数、小計)へ振り分ける事はできたのですが、受注シリアルへ番号を振り分ける作業でつまづいてしまいました。 同日付と顧客IDに番号(受注シリアル)を振り当てるにはどうすればいいでしょうか? 現在Bテーブルに約20000レコードあります。 よろしくお願いいたします。

専門家に質問してみよう