Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
1つのテーブルを2つのフィールドで使用するには
投稿日時: 19/04/12 12:44:25
投稿者: momomo1227

下記のように1つのテーブルを2つのフィールドで使用する時どうしたらよいでしょうか。
 
 

メインテーブル										
商品名	構成部材1	"構成部材1使用数"	構成部材2	"構成部材2使用数"						
XXXX	 1	         2	      2	        2						
RRRR	 1	         2	      3	        4						
PPPP	 3	         5	      1          2								
										
構成部材テーブル										
"構成部材番号
(外部キー)"	構成部材名	規格	コード番号							
1	           AAA	       TK111	    100							
2	           BBB	       MS123	    101							
3	           CCC	       YS222	    102							
										
選択クエリ										
      構成部材1              構成部材2
XXXX	1	AAA	TK111	100	2	2	BBB	MS123	101	2
RRRR	1	AAA	TK111	100	2	3	CCC	YS222	102	4
PPPP	3	CCC	YS222	102	5	1	AAA	TK111	100	2

[/code]

回答
投稿日時: 19/04/12 13:28:32
投稿者: sk

引用:
1つのテーブルを2つのフィールドで使用する

( SQL ビュー)
----------------------------------------------------------------------------
SELECT [メインテーブル].[商品名],
       [メインテーブル].[構成部材1],
       [構成部材テーブル_1].[構成部材名] AS [構成部材名1],
       [構成部材テーブル_1].[規格] AS [規格1],
       [構成部材テーブル_1].[コード番号] AS [コード番号1],
       [メインテーブル].[構成部材1使用数],
       [メインテーブル].[構成部材2],
       [構成部材テーブル_2].[構成部材名] AS [構成部材名2],
       [構成部材テーブル_2].[規格] AS [規格2],
       [構成部材テーブル_2].[コード番号] AS [コード番号2],
       [メインテーブル].[構成部材2使用数]
FROM ([メインテーブル]
      LEFT JOIN [構成部材テーブル] AS [構成部材テーブル_1]
      ON [メインテーブル].[構成部材1] = [構成部材テーブル_1].[構成部材番号])
LEFT JOIN [構成部材テーブル] AS [構成部材テーブル_2]
ON [メインテーブル].[構成部材2] = [構成部材テーブル_2].[構成部材番号];
----------------------------------------------------------------------------
 
以上のクエリのような結果を得たいということでしょうか。

投稿日時: 19/04/12 14:00:45
投稿者: momomo1227

Skさん
ありがとうございます。
これだと、[構成部材テーブル_1][構成部材テーブル_2]
必要になってこないでしょうか?

回答
投稿日時: 19/04/12 14:20:02
投稿者: sk

引用:
これだと、[構成部材テーブル_1]と[構成部材テーブル_2]が
必要になってこないでしょうか?

要りません。
 
[構成部材テーブル_1]という別名をつけた[構成部材テーブル](のコピー)と
[構成部材テーブル_2]という別名をつけた[構成部材テーブル](のコピー)を
呼び出しているようなものだと考えて下さい。
 
例示したクエリをデータシートビューで開いてみて
正常な結果が返されたことを確認できたら、
デザインビューに切り替えてみてどのような構造に
なっているかを確認されることをお奨めします。

投稿日時: 19/04/12 14:53:06
投稿者: momomo1227

クエリの作成で、SQLビューにいただいたSQLをコピーしたのですが「式で型が一致しません。」と
 
エラーが出てしまいました原因わかるでしょうか?

回答
投稿日時: 19/04/12 15:09:24
投稿者: sk

引用:
クエリの作成で、SQLビューにいただいたSQLを
コピーしたのですが「式で型が一致しません。」と
エラーが出てしまいました

[メインテーブル]の[構成部材1]と[構造部材2]、
及び[構成部材テーブル]の[構成部材番号]のデータ型
それぞれ確認し、それら全てを一致させるようにして下さい。

投稿日時: 19/04/12 16:55:02
投稿者: momomo1227

sk様
ありがとうございます。
できました。
access初心者なので半月位いろいろと試行錯誤していましたが
結局フォームを作る段階や、レポートを作る段階まで行って
逆戻りしていました。
本当にありがとうございます。
 
これからデータベースの作成を進めていきます
またわからないことがあれば教えていただければ幸いです。

投稿日時: 19/04/12 17:12:05
投稿者: momomo1227

申し訳ありません、追加で質問なんですが、フォームを作成して入力してみると
「インデックス、主キー、またはリレーションシップで重複する値が生成されるため、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。」とのエラーが出てきますどうしたらよいのでしょうか。

回答
投稿日時: 19/04/12 17:54:28
投稿者: sk

引用:
フォームを作成して入力してみると「インデックス、主キー、または
リレーションシップで重複する値が生成されるため、テーブルを変更
できませんでした。重複する値のあるフィールドの値を変更するか、
インデックスを削除してください。または重複する値を使用できる
ように再定義してください。」とのエラーが出てきます

仮に[商品名]を主キーとするテーブル[メインテーブル]を
レコードソースとする連結フォームを作成されたとして、
編集されたカレントレコードの[商品名]の値が
他のいずれかのレコードの[商品名]の値と同じである場合、
そのカレントレコードを保存することは出来ません。

投稿日時: 19/04/12 18:04:42
投稿者: momomo1227

ありがとうございます。
構成部材1

構成部材2
に主キーを設定していたからでした。
 
主キーの理解がまだあやふやです・・・・。
 
とりあえず解決しました、本当にありがとうございます。