- ベストアンサー
access 絞込みフォーム
初心者です、よろしくお願いします。 仕様環境 WinXP access2002 請求管理のフォームを作っているのですが、壁に当たっています。 メインとサブのフォームがあってメインは顧客情報を 乗せています。サブにその顧客の簡単な請求履歴をのせています。 更に詳しくみるために別に「請求明細フォーム」というものを設けています。 これは請求書の内訳がのっています。 さてサブフォームの話ですが、このようになっています↓(簡単に書いてます) 請求番号 「詳細ボタン」 A0001 「詳細ボタン」 A0002 「詳細ボタン」を押すことにより、該当する請求番号の請求明細フォームに 飛ぶようにしたいのですが、うまくいきません。 パラメータを使えばできたのですが、パラメータを使わず、 ボタンを押すと該当する請求明細フォームに飛びたいのです。 請求番号に該当する情報だけ載せた請求明細フォームに飛ぶにはどうすれば よいのでしょうか?ちなみに請求明細フォームはクエリを返しています。 誰かお知恵をおかしください!
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>主キーは「請求番号」フィールドになります。 これはメインのほうのソースの主キーですね サブで選んだレコードを表示するにはサブの主キーを渡す必要があります 主キーが請求番号と枝番の2つならその2つを渡します >上記の式はどこに入力すればよいのでしょうか? >クエリや詳細ボタン内のコードに記述したのですが、うまくいきません。 パラメータクエリは分かるのですよね Forms!顧客請求!顧客請求サブ!請求番号 Forms!顧客請求!顧客請求サブ!枝番 もパラメータです クエリの該当フィールドの抽出条件欄に書きます ボタンでクエリをソースにしたフォームを開いてやります
その他の回答 (5)
- CHRONOS_0
- ベストアンサー率54% (457/838)
>[Forms]![顧客請求フォーム]![顧客請求サブフォーム]![請求番号] >最後にもしよろしければ、この文章は何を言っているのか教えてください! フォームコレクションの顧客請求フォームのメンバーである顧客請求サブフォームの請求番号 コントロールの値 >またこれはSQLの構文なんでしょうか?VBAなんでしょうか? SQLを実際に走らせるのはデータベースエンジンJETですが Forms!・・・を解釈するのはJETのインタフェースである狭義のAccessでしょう AccessというのはデータベースエンジンJET、それのインタフェースであるデータベースウィンドウのもろもろを管理している狭義のAccess、もう一つのインタフェースVBAなどのプログラムの集合です
お礼
CHRONOS_0様 回答ありがとうございます! うーん、難しいですね。 理解するにはまだまだ時間がかかりそうです・・。 >フォームコレクションの顧客請求フォームのメンバーである顧客請求サブフォームの請求番号 上記はなんとなくわかりました。 少しずつ理解を深めたいと思います。 ありがとうございました!
- Dxak
- ベストアンサー率34% (510/1465)
う~ん・・・パラメータは判ります? そもそも、 > 同じようにA0003やA0004、はたまたB0006などもあり、 > 一つ一つの詳細ボタンに、「"[請求番号] =A0001"」とか、 > 「"[請求番号] =A0002"」は後々増えていくことを > 考えると設定できません。 と、設定することは出来ません 要は、そう言う文章になるように作成すると言う話 フォーム名、サブフォームコントロール名、フィールド名、データの型が、判らないところでは何ともしようが無いです 例えばで言えば・・・ "[請求番号] = '" & [サブフォームの請求書番号のフィールド] & "'" と、いうような感じで生成してくると言う話 [請求番号]が、テキストと言う前提で例は提示してありますよ
お礼
Dxak様 できました! 他の方の回答ですが、該当するクエリの「請求番号」の抽出条件に 以下を入力したらできました! [Forms]![顧客請求フォーム]![顧客請求サブフォーム]![請求番号] 私のつたない説明の中、ご理解頂きまして本当にありがとうございました!
- Dxak
- ベストアンサー率34% (510/1465)
#1です OpenForm メソッド - MSDN http://msdn.microsoft.com/ja-jp/library/cc346827.aspx と、言う話で・・・ WhereCondition で、「"[フィールド名] = xxxxx"」を渡してやればOK パラメータクエリが判るなら、このあたりの条件は判るとして・・・省略
補足
Dxak様 回答ありがとうございます! 試してみましたが、おしいところまできています。 私の説明不足が大きいでしょう。 実際は・・ 請求番号(主キー) 「詳細ボタン」 A0001 はA0001に関しての詳細を出したいと思います。 「詳細ボタン」 A0002 はA0002に関しての詳細を出したいと思います。 同じようにA0003やA0004、はたまたB0006などもあり、 一つ一つの詳細ボタンに、「"[請求番号] =A0001"」とか、 「"[請求番号] =A0002"」は後々増えていくことを 考えると設定できません。 良いサイトを教えて頂きありがとうございます。 差し支えなければ良い方法を教えてください。
- CHRONOS_0
- ベストアンサー率54% (457/838)
サブフォームの主キーをパラメータとして渡してやればいいじゃないですか =Forms!フォーム名!サブフォーム名!主キーフィールド名 ボタンを押したときにそのレコードがカレントになりますから フィールド名だけでボタンが押されたレコードの主キーを渡せます
補足
CHRONOS_0様 回答ありがとうございます! 主キーは「請求番号」フィールドになります。 上記の式はどこに入力すればよいのでしょうか? クエリや詳細ボタン内のコードに記述したのですが、うまくいきません。 ちなみに フォームはメインが顧客請求フォーム、サブが顧客請求サブフォーム。 飛ばしたいフォームがメインは請求明細フォーム、サブが明細サブフォームです。 請求番号でつなげて1対多のリレーションをしています。 トンチンカンなことを言っていたらごめんなさい。 「ボタンを押したときにそのレコードがカレントになりますから」 ↑この通りにしたいです。 差し支えなければご教授お願いします!
- Dxak
- ベストアンサー率34% (510/1465)
パラメータを使用せずって?クエリ上の話? DoCmd.OpenForm で、フォームを開く時に、フィルタ条件使って、フォームを開く ので、十分だと思うけど?
補足
Dxak様 回答ありがとうございます。 DXak様のご想像通りだと思います。 しかし・・ 当方初心者なのでVBAやフィルタ条件がわかりません。 今まで何かとあるとパラメータクエリでかわしてきました。 よろしければフィルタ条件の構文やマクロを記述頂ければ と思います。 よろしくお願いします。
補足
CHRONOS_0 様 できました! ありがとうございます! 該当するクエリの「請求番号」の抽出条件に以下を入力したら できました! [Forms]![顧客請求フォーム]![顧客請求サブフォーム]![請求番号] 最後にもしよろしければ、この文章は何を言っているのか教えてください! 特によくでてくる「!」がわかりません。 またこれはSQLの構文なんでしょうか?VBAなんでしょうか? SQLだと思うんですが・・ 私の持っているaccessの本は入門書とVBAやマクロの高度なテクニックが乗っている本があるのですが、 「こういう風に書く」というだけで構文の持っている意味がわかりません。 初心者の質問ですいません・・。