プロが教えるわが家の防犯対策術!

初めて質問いたします。よろしくお願いいたします。
入力フォームを作成しています。店舗コード、商品コードを入力するとそのコードに該当した商品一覧がサブフォームに表示されるというものです。
メインフォームに入力欄を設けサブフォームに一覧を表示させています。店舗コードも商品コードも複数入力ができるように、二つの入力欄を設け、条件が入るクエリーにBetween演算で出力したものをサブフォームに表示させています。クエリーもサブフォームの元になっているフォームにも結果はきちんと現れますが、メインーサブフォームにはなぜか、正しく表示されません。
from店舗コードとto店舗コード、from商品コードとto商品コードという4つのフィールドでリンクしています。
(親リンクフィールド、子リンクフィールドともにfrom店舗コード;to店舗コード;from商品コード;to商品コードとしています。)リンクの仕方が悪いのでしょうか?
アクセスに詳しい方是非お知恵をお貸しください。

A 回答 (4件)

一般的なサブフォームの使用方法ではないようですが、メイン/サブフォームに分割する意味は?



一つのフォーム上に検索範囲入力できるフィールドを設けて、同じフォーム上で検索条件に一致する商品一覧を一括表示するのではダメなのでしょうか?

この回答への補足

早速のご回答ありがとうございます。
他の画面の兼ね合いなど考えた結果、この結果に行き着きました。やはり、少し強引でしょうか・・・
ひとつのフォームで作成する際の具体的な方法を教えていただけると幸いです。絞込みの条件を入れるまでは明細行には何も表示させたず、条件を入れると該当データが表示され、そのデータを修正するというものがつくれれば、いいのです。よろしくお願いいたします。
が・・・もし、よろしければ、サブフォームのなぞも解いていただけると幸いです。せっかく作ったので・・・
重ねて、よろしくお願いいたします。

補足日時:2005/04/20 17:01
    • good
    • 0

VBAは分りますか?



メインフォームとサブフォームの関係は基本的に「1:多」になります。
キーとなるメインフォームのデータにリンクしたサブフォームのデータは芋弦式に自動的にAccess側で表示されます。
この元となる情報はそれぞれのテーブルを結ぶキーのリレーション定義です。
したがって、サブフォームのデータをプログラムで表示させようとすること自体Accessが標準で提供しているメインーサブフォームの設計概念からはずれてきます。
ですから、通常このような検索データの一覧表示は一つのフォームで行うのです。
あえて、メインーサブフォームに分割して表示させたいのであればAccessの標準で持っている機能を使用するのではなく、まったく別のメインーサブフォームの関係でプログラムで制御し一覧表示させることになるかと思います。
そもそもそこまでしてフォームを分割する意味はあるのでしょうか?
ということで、最初にお聞きした疑問となったわけです。

1.各テーブルのキーは?
2.それぞれのテーブルのリレーションシップはどうなっていますか?
3.また、結合の種類は何を選択されていますか?

この回答への補足

なんどもありがとうございます。
そうなんです。本来のサブフォームの使い方ではないのです。ちなみにメインフォームはどのテーブルとも連結していません。なので、メインーサブフォームの子リンクフィールドなども手入力しました。途中までは強引であっても、うまくいってたのでそのまま進めてしまいました。進めてしまったので、メインーサブフォームにこだわっているだけで、そうまでする必要がないといえばないのですが、もう一工夫で使えそうだったのでアクセスにお詳しい方であればこのまま進める方法をご存知かと思い質問させていただきました。
私のような初心者の質問に専門家であるskikichiさんのような方にアドバイスいただけて幸せです。
一般的な方法で一から作成しなおします。
ありがとうございました。

補足日時:2005/04/25 13:05
    • good
    • 0

そうですね。

一般的な作り方をされるのが後々改良したり別のものと整合性を取ろうとした場合に問題にならない確率は極めて高いです。

ちなみに、一つのフォームで作成する場合には・・・

Forms![フォーム1].RecordSource = "SELECT * FROM [テーブル1] WHERE ([店舗コード] >= Forms![フォーム1]![from店舗コード] And [店舗コード] <= Forms![フォーム1]![to_店舗コード]) And ([商品コード] >= Forms![フォーム1]![from商品コード] And [商品コード] <= Forms![フォーム1]![to_商品コード])"

こんな感じでよろしいかと思います。

この回答への補足

申し訳ありません。再度教えてください。
サブフォームの元フォームを再利用しようと考えました。サブフォームはコントロールソースがクエリでそのクエリはSQLで
SELECT マスター1.* FROM マスター1
WHERE (((IIf([Forms]![F_フォーム1]![to店舗コード] Is Not Null,(([マスター1].[店舗コード]) Between [Forms]![F_フォーム1]![倉庫コード] And [Forms]![F_フォーム1]![to店舗コード]),([マスター1].[店舗コード])=[Forms]![F_フォーム1]![倉庫コード]))<>False) AND ((IIf([Forms]![F_フォーム1]![to商品コード] Is Not Null,(([マスター1].[商品コード]) Between [Forms]![F_フォーム1]![商品コード] And [Forms]![F_フォーム1]![to商品コード]),([マスター1].[商品コード])=[Forms]![F_フォーム1]![商品コード]))<>False))
ORDER BY マスター1.店舗コード, マスター1.商品コード;
としてあります。
このSQLをそのままフォームのコントロールソースにすればいいのかと考えたのですが、甘かったようです。
大変恐れ入りますが、もう少し教えていただけますか?
上記の回答を拝見するとForms![フォーム1].RecordSource = ~~ となってますが、これをどこかのイベントに貼り付ければよろしいのでしょうか?
ここ数日こればかり考えていて、ちょっと周りが見えなくなっています。とても初歩的な質問かも知れませんが、ここから抜けられなくて苦しんでおります。是非お知恵をお貸しください。よろしくお願いいたします。

補足日時:2005/04/27 22:32
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
本当に参考になりました。
頑張ってよいものを作り上げたいと思っております。
今後ともご指導いただければ幸いです。
本当にありがとうございました。

お礼日時:2005/04/26 21:07

すみません。

なかなか時間が取れなくてご回答遅くなりました。

こんな感じです・・・

まずフォーム上には、店舗コードと商品コードを入力するフィールドがfromとtoで合計4つあります。
これらの検索条件入力後に検索を開始するボタン「検索」ボタンが必要です。
そして最後に検索結果を表示する商品一覧のフィールドが
複数あるわけですよね!?

1.フォームのコントロールソースには[テーブル1]を指定
2.商品一覧の各フィールドのコントロールソースには、[テーブル1]の該当するフィールド名を選択
3.フォームのコントロールソースを無指定(ブランク)に戻す。
4.「検索」ボタンの「クリック時」のイベントプロシージャーで前記のForms![フォーム1].RecordSource = ~~を記述する。

これによってフォームの初期表示時には一覧は表示されず、検索条件を入力後「検索」ボタンを押してはじめて一覧が表示されます。

kurohiroさんが書かれたSQL文の詳細は検討しておりませんが、基本的にはこれをForms![フォーム1].RecordSource = ~~に記述していただければよろしいかと思います。
    • good
    • 0
この回答へのお礼

なるほど。
お忙しいところ何度もありがとうございます。
ポイントの発行をさせていただきたいのですが、「マスターと準マスターと2人選んでください」とか「同じ人にはできません」とかエラーになってしまってこちらもうまくいきません。よく調べて後ほど発行させていただきますので今しばらくお待ちください。(こちらの使い方も初心者で申し訳ないです。)skikichiさんのような専門家の方にご指導いただけて大変勉強になりました。仕事に還元していきます。ありがとうございました。

お礼日時:2005/04/29 00:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A