- 締切済み
Access 複数フォームを別フォームに反映させたい
初めての投稿です。 よろしくお願い致します。 Accessにて店舗ごとの在庫管理をしたいのですが、T_入庫をフォームに作成しようとした所で詰まってしまいました。 以下、作成済みの3つのフォームと連結し、作成したF_入庫に反映させたいと思っています。 どうかご教授の下さいます様よろしくお願い致します。 連結したい3つのフォーム(作成済)です。 3つのフォームを連結させています。 T_商品マスター (メインフォーム) 商品ID 年度ID 商品区分 商品名 包装内容 包装量 単位 単価 適用チェック T_仕入マスター (サブフォーム1) 仕入ID 商品ID 問屋ID メーカーID T_価格マスター (サブフォーム2) 価格ID 仕入ID 納入価格 価格登録日 適用チェック これから作成するフォーム T_入庫 入庫ID 仕入区分ID 店舗ID 入庫日 商品ID 入庫数 金額相違チェック 相違金額 とあります。 T__入庫でクエリを組み、演算子にて実行してみようと思いましたが、 それどころかT_入庫のテーブルとそのIDのフィールドを入れて組んでも表示されません。リレーションが悪いのかそれとも、テーブル設計そのものが悪いのか悩んでいます。 この様な場合、SQL文などわかっていないとダメでしょうか? どうかアドバイスお願い致します。m(__)m
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
動的に抽出条件を変えようということですか? これには2通りの方法があります。 (1)サブフォームを使う 親フォームと子フォームのリンクフィールドで 親フォームと同じ値を持つデータを抽出できる。 但し、「値」なので、「式」は指定できない。 (2)レコードソースを書き換える フォームのレコードソースプロパティのSQLを 書き換える。SQLとして成立するならOKです。 私は(2)の方を多用します。(1)で良いなどという 仕様は滅多にお目にかかれません。顧客の要求は もっと複雑ですからね。 【プログラム例】 Dim SQL As String Dim WHR As String '★クエリの基本部分 SQL = "SELECT * FROM T_入庫" '★画面のテキストにより条件を記述 If Me.商品ID <> "" Then If WHR <> "" Then WHR = WHR & " AND" WHR = WHR & " 商品ID=" & Me.商品ID End If '★条件があれば結合 If WHR <> Then SQL = SQL & " WHERE " & WHR '★SQLを書き換える Me.サブフォーム.form.RecordSource = SQL 当然ですが、SQLのフィールド並び(*)の代わりに 計算式を入れても良く、WHERE句にも式を指定する ことができます。(例えば、Year(入庫日)=2010とか) >SQL文などわかっていないとダメでしょうか? SQLを知らずにDBシステムを使うとすると、ごく簡単な ものに限られてしまいます。遅かれ早かれ、壁にあたる ことは確実です。 尚、リレーションは1:∞が悪いという意味ではありません。 登録/削除に制限ができるという意味です。
- nda23
- ベストアンサー率54% (777/1415)
業務内容が分からないので、答えにくいのですが、 以下の点を補足してください。 (1)>T__入庫でクエリを組み フォームのレコードソースはテーブル(実体あり)か それとも、他のテーブルの参照(実体なし)か? 文面からは「T__入庫」というテーブルがあるように 思える。(画像は小さすぎて判読不能) (2)>演算子にて実行して 意味不明 演算子は算術演算、論理演算の方法を示すもので、 「実行」とかするものではありません。 何をしようとしたのでしょうか? リレーションを設定した場合、親側(1:∞ の1側)と 同じ値を持つデータしか子側(同じく∞側)では登録でき ません。また、参照レコード(子側)が残っている限り、 被参照レコード(親側)は削除できません。 これはどのDBシステムにも共通することです。 具体例を挙げます。 T_入庫の商品IDがT_商品マスターの商品IDとリレーション シップを持つと仮定します。 (1)T_商品マスターに商品IDが1,2,3と登録されていると、 これ以外の商品IDを持つT_入庫のレコードは作成できません。 (2)T_入庫に商品ID=1のレコードがあると、T_商品マスターの 商品ID=1のレコードは削除できません。
補足
nda23 様 早々のご回答ありがとうございます。m(__)m 解りにくくて申し訳ありません。(^^; まず(1)>T__入庫でクエリを組み フォームのレコードソースはテーブル(実体あり)か それとも、他のテーブルの参照(実体なし)か? 文面からは「T__入庫」というテーブルがあるように 思える。(画像は小さすぎて判読不能) の件ですが、フォームのレコードソースはT_入庫をクエリ作成→Q_入庫とし、それをレコードソースとする予定です。実体ありと言う事になります。 まとめますと、T_入庫の作成クエリがレコードソースと言う事になります。 画像を大きく出来ずすいません。 2)>演算子にて実行して 意味不明 演算子は算術演算、論理演算の方法を示すもので、 「実行」とかするものではありません。 何をしようとしたのでしょうか? すいません。良く解らず・・ T_入庫にて作成致しましたクエリの抽出条件にて演算子を入力し、これから作るQ_入庫のフォームに反映させようと思った次第です。 リレーションを設定した場合、親側(1:∞ の1側)と 同じ値を持つデータしか子側(同じく∞側)では登録でき ません。また、参照レコード(子側)が残っている限り、 被参照レコード(親側)は削除できません。 これはどのDBシステムにも共通することです。 T_商品マスターと、T_入庫に関してですが、 T_商品マスター 商品ID 年度ID 商品区分 商品名 包装内容 包装量 単位 単価 適用チェック と、 T_入庫 入庫ID 仕入区分ID 店舗ID 入庫日 商品ID 入庫数 金額相違チェック 相違金額 のリレーションですが、T_商品マスターの商品IDが子(1) で、T_入庫の商品マスターの商品IDを(多) で、リレーションを組んでいます。 T_商品マスター 商品ID (1) → T_入庫 商品ID(多) これだと上手くいかないのでしょうか? お手間おかけ致しますm(__)m
お礼
nda23 様 お返事遅くなりまして申し訳ございません。m(__)m やはりサブフォームを使用するか、ソースを書き換えるかなのですね。 大変勉強になります。。 プログラム例の記述までして頂きありがとうございました! 早速頂いた例を参考に、やってみたいと思います。 本当にありがとうございました。