Microsoft Access 掲示板

サブフォームがうまく作れません

13 コメント
views
4 フォロー

T伝票
T売上データ
T商品マスタ
があり、サブフォームを使い1対多で入力したいです

T伝票とT売上データを日付でリレーション(クエリ1)
T商品マスタと売上データを商品IDでリレーション(クエリ2)
それぞれ必要項目を入れたクエリを作成してフォームウィザードからサブフォームを作ろうとしましたが
クエリ2のフィールドをいれると
”選択したフィールドのレコードソースにアクセスできません。テーブルとそのテーブルを基にしたクエリのフィールドを選択した可能性があります。もしそうであればテーブル加クエリのどちらかのフィールドだけを選択してください”
というエラーがでます

エラー文もよく理解できませんが、どのようにしたら作成できるようになりますか?

日付でリレーションしているのは、データをEXCELからインポートするので、
双方のテーブルにインポートして、簡単に照合できるのが日付だから、です
リレーションの画面では 1-∞ となっていませんが、それも原因のひとつでしょうか?

ろうにん
作成: 2021/12/08 (水) 18:51:29
通報 ...
1
りんご 2021/12/09 (木) 00:21:18 c564b@0e907

T伝票:顧客No, 日付, …
T売上:顧客No, 日付, 商品No, …
T商品:商品No, …
T顧客:顧客No, …
T伝票(クエリ1)・・・・・・・・・・『Q伝票』:T伝票.顧客No, T伝票.日付, T顧客.顧客名, …
T伝票、T売上、T商品(クエリ2)・・・『Q売上』:T売上.顧客No, T売上.日付, T売上.商品No, T商品.商品名, …,

リレーションシップ:

T顧客T伝票T売上T商品
顧客No1一∞顧客No1一∞顧客No
顧客名日付1一∞日付
商品No∞一1商品No

F伝票(レコードソース『Q伝票』)
顧客No:1
日付     :12/1
サブフォーム(F売上:レコードソース『Q売上』)

(顧客No)(日付)(商品No)商品名
(1)(12/1)(1)あああ
(1)(12/1)(2)いいい
2
りんご 2021/12/09 (木) 01:28:00 c564b@0e907

日付でリレーションしているのは、データをEXCELからインポートするので、
双方のテーブルにインポートして、簡単に照合できるのが日付だから、です

 A社としか取引しないから、日付だけ見れば誰に売り上げたか照合出来る、という事でしょうか?

リレーションの画面では 1-∞ となっていませんが。

例えば、
テーブル1.名前:あ,い,う,え,お
テーブル2.名前:あ,か

クエリの画面:テーブル1.名前 一 テーブル2.名前

これは、リレーションシップではありません。結合しただけ。
リンク切れのデータが表示されない仕組みと思っています。

テーブル1,名前テーブル2,名前

結合線を右クリック、設定変更で遊べるので、これはこれで面白いです。
テーブル1,名前 ← テーブル2.名前とかテーブル1,名前 → テーブル2.名前とか。

3
hiroton 2021/12/09 (木) 14:01:47 ea2fd@f966d

T伝票とT売上データを日付でリレーション(クエリ1)
T商品マスタと売上データを商品IDでリレーション(クエリ2)

どちらのクエリにもT売上データが使われているからだと思われます
クエリ1を使わずにそのままT伝票を指定したらどうでしょう

4

双方のテーブルにインポートして、簡単に照合できるのが日付だから、です
リレーションの画面では 1-∞ となっていませんが、それも原因のひとつでしょうか?

これも、1-∞ となるように設計しなおすべきですね。
でないと、データベースとして無意味なデータになります。

1つの売り上げは一つの伝票のみと紐づけられないだめですよね。
複数の伝票に、同じ売り上げが記載されていたら、二重計上になってしまいます。

一側(伝票)のリンクフィールドはユニーク(主キー)でないとダメです。
主キーは、複数のフィールドを組み合わせて設定することもできます。
あるいは、オートナンバー型のフィールドを主キーにするとか。

具体的にどうしたら分からないのなら、現状の伝票テーブル、売上テーブルのフィールド構成を提示してください。

5
ろうにん 2021/12/10 (金) 17:50:49 58219@06dbe

ユニークキーでやりたかったのですが、ACCESSだけで入力するわけではなく
別途EXCELで入力されたデータもインポートする必要があります
そのときに
T伝票に重複のない日付のみをインポートしてユニークキーが作成されるようにして
T売上に、それ以外のデータをインポートするとき、T伝票のユニークキーをT売上にもってくる(紐付ける)方法がわからず
1対多の状態でインポートできませんでした
それで日付でリレーションしようとしていました

6

1日に伝票1枚だけならそれでいいですが、そうではないですよね。

現状の T伝票 と T売上 のフィールド構成を提示してもらえると、何かアドバイスできると思います。

7
ろうにん 2021/12/11 (土) 18:16:26 58219@8ffb0

T伝票
伝票ID(主キー) 売上日 取引先名 請求日 支払日

T売上
売上ID(主キー) 伝票ID 商品名 個数 単価ID

です。日付でリレーションしていたといっていましたが、うまくいかなし、間違った運用みたいなので
T売上からは削除しました

9
りんご 2021/12/12 (日) 14:07:00 c564b@0e907 >> 7

もしかして、伝票IDがExcelの元データに無いから、T売上に直接インポート出来ないって悩んでます?

10
ろうにん 2021/12/12 (日) 18:25:36 58219@8661c >> 7

おっしゃるとおり
インポートするときにそれがないから悩んでます
EXCELにあるならそれぞれのテーブルにインポートすればいいんですけど

8

そのフィールド構成なら、リレーションシップで、下記のように結合して、

T伝票.伝票ID 1→∞ T売上.伝票ID

フォームウィザードで、2つのテーブルから必要なフィールドを選択して進めていけば、自動でメイン/サブフォームが作成されます。

ウィザードを使わない場合は、メインフォームのレコードソースは T伝票、サブフォームのレコードソースは T売上、
リンク親フィールド、リンク子フィールドは 伝票ID に設定しておけばいいはずです。

11
ろうにん 2021/12/12 (日) 18:26:01 58219@8661c

インポートとの兼ね合いでどうしたものかと悩んでおります

12

エクセルのデータはどうなっているのですか。
エクセルのデータには伝票IDはないのですか。
ない場合、伝票と売上はどのように紐づける仕様になっているのですか。

売上日 取引先名 の組み合わせで一伝票という仕様なら、売上日 取引先名 の組み合わせで、複数フィールド主キーを設定すればいいですね。

その辺りの情報を提示してもらわないと、、、、

13
りんご 2021/12/13 (月) 17:39:20 c564b@0e907

 
T伝票
売上日 取引先名(複合主キー) 請求日 支払日

T売上
売上ID   売上日 取引先名(複合主キー) 商品名 個数 単価ID

>> 10
>> 11
 
T伝票
伝票ID(主キー) 日付 …
1 12/13
2 12/14
 Excelから取り込んだテーブル(仮)を作ります。
日付 商品名 個数 単価ID …
12/13 …
12/14 …
 新しいクエリを作って、日付で紐付ければ、
Q売上(仮)
伝票ID(主キー) 日付 商品名 個数 単価ID …
1 12/13 …
2 12/14 …
 これを追加クエリに変更、T売上に追加。