Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


898 / 2272 ツリー ←次へ | 前へ→

【9603】他のテーブルのフィールドを表示したい AT 07/6/22(金) 16:46 質問[未読]
【9608】Re:他のテーブルのフィールドを表示したい 小僧 07/6/24(日) 12:58 回答[未読]
【9609】Re:他のテーブルのフィールドを表示したい AT 07/6/25(月) 14:07 お礼[未読]

【9603】他のテーブルのフィールドを表示したい
質問  AT  - 07/6/22(金) 16:46 -

引用なし
パスワード
   お世話になります。
どなたか、教えてください。

抽象的な質問になってしまいますが、よい方法がありましたら教えてください。
『ロット台帳』テーブルと『素材ミル』テーブルがあります。
『ロット台帳』主キー:ロットNo その他フィールド:ワークNo,チャージNo,etc
『素材ミル』主キー:ミルNo その他フィールド:ワークNo,チャージNo,
      ロット1,ロット2,ロット3,ロット4,ロット5,耐力,引張,伸び,etc
『ロット台帳』の検索フォームで、検索条件を入力してもらい、
ロット情報をリスト表示しています。
このリストに【耐力】、【引張】、【伸び】を追加したいです。
『ロット台帳』には、『素材ミル』のミルNoはフィールドにありません、
つながりは、【ワークNo】、【チャージNo】です。
『素材ミル』には、【ロット1】〜【ロット5】に結びついたロットNoが
どこかに入っています。
『素材ミル』には、同一【ワークNo】& 同一【チャージNo】が複数存在します。
『ロット台帳』と『素材ミル』をLEFT JOIN (ワークNo,チャージNo)で結んで、
クエリを作成し、リスト表示すると同一ロットNoが2件表示されてしまいます。
『素材ミル』データから、DISTINCTなどでクエリを一旦つくって、
そのクエリとLEFT JOIN (ワークNo,チャージNo)で結んでやっても同じでした。

質問です
1.まず、ロットNoは1つなので1件のみの表示にしたいです。
2.方法として、新しいテーブルを作成しておき、『ロット台帳』の
  抽出結果データをこの新しいテーブルに格納して、テーブルの1レコード
  ずつ、『素材ミル』の【ワークNo】、【チャージNo】と一致するものを
  検索し、一致したレコードの【ロット1】から【ロット5】までに
  セットしたロットNoがあるかどうかを調べて、あったらその
  耐力】、【引張】、【伸び】をテーブルに追加する。
  という方法を考えたのですが、抽出結果が多い場合、すごく時間が
  かかってしまうような気がします。
  もっとよい方法はないでしょうか。

ながながと書いてしまい申し訳ありませんが、よろしくお願いします。

【9608】Re:他のテーブルのフィールドを表示したい
回答  小僧  - 07/6/24(日) 12:58 -

引用なし
パスワード
   ▼AT さん:
こんにちは。

まず、仕様面の確認なのですが、
素材ミルテーブル においてロットNoが5つ以上になる事はありえないのでしょうか。

もし現在は 5つまでで足りるけど、
今後6以上になる事もあり得るのでしたら
早めにテーブルの変更をお勧めします。
後からになると、関連するテーブル、クエリ、モジュール、フォーム等
テーブルの仕様変更に伴うAccess全体の修正は結構大変ですよ。


またデータの持ち方もあまり良くありませんよね。
仮にこのままのテーブルで行うにしても
ロット1〜5のフィールドにロットNoが見つかれば
ワークNo、チャージNoは引っ張って来れそうですので
ロット台帳テーブルにも持つ必要はないかと思われます。


> 抽出結果が多い場合、すごく時間がかかってしまうような気がします。

現在のテーブル仕様ですと、時間が掛かってしまう事は
避けられない様に思われます。

AT さんご提示の様に別テーブル(ワークテーブル)に結果を書いていく方法の他、
ユニオンクエリでも対応できるかもしれませんね。


SELECT ロット1 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット2 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット3 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット4 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット5 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル;

このクエリをいったん保存して、
ロット台帳テーブルと結合する方法でもうまく行きそうな気がします。

【9609】Re:他のテーブルのフィールドを表示したい
お礼  AT  - 07/6/25(月) 14:07 -

引用なし
パスワード
   こんにちは、ご連絡遅くなってすみません。
小僧さん、ご教授ありがとうございます。

仕様書段階では、まず5個まで行かないから、大丈夫ということでしたが、
運用段階になって、例外として5つ以上になることが発生してしまいました。
現在、ロット5以上はほとんどが例外ということで、頻繁には起こらない
ということで、ロット1〜ロット5で対応しています。
『素材ミル』は【ミルNo】があり、【ワークNo】、【チャージNo】が重複
しても問題ないので、内容をコピーしたレコードも持たせ、
ロット6に相当するロットNoを、【ロット1】に保存するようにしています。

>まず、仕様面の確認なのですが、
>素材ミルテーブル においてロットNoが5つ以上になる事はありえないのでしょうか。
>もし現在は 5つまでで足りるけど、
>今後6以上になる事もあり得るのでしたら
>早めにテーブルの変更をお勧めします。
>後からになると、関連するテーブル、クエリ、モジュール、フォーム等
>テーブルの仕様変更に伴うAccess全体の修正は結構大変ですよ。

ユニオンクエリの方法で試してみます。
いろいろありがとうございました。

>AT さんご提示の様に別テーブル(ワークテーブル)に結果を書いていく方法の他、
>ユニオンクエリでも対応できるかもしれませんね。
>SELECT ロット1 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット2 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット3 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット4 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット5 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル;
>
>このクエリをいったん保存して、
>ロット台帳テーブルと結合する方法でもうまく行きそうな気がします。

898 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free