Access VBA質問箱 IV

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

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


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

【12937】あるテーブルに入力された数字を他クエリに まるこ 16/2/5(金) 14:11 質問[未読]
【12938】Re:あるテーブルに入力された数字を他クエ... まるこ 16/2/5(金) 17:56 発言[未読]
【12939】Re:あるテーブルに入力された数字を他クエ... かるびの 16/2/5(金) 20:03 回答[未読]
【12945】Re:あるテーブルに入力された数字を他クエ... まるこ 16/2/18(木) 16:52 お礼[未読]

【12937】あるテーブルに入力された数字を他クエリ...
質問  まるこ  - 16/2/5(金) 14:11 -

引用なし
パスワード
   こんにちは
よろしくお願いします

下記のような入力用クエリがあります

クエリ1
ID|注文日  |支払予定日 |請求書番号|金額|備考
1|2016/1/4 |2016/2/29 |AZP00001 |3500|あああああ      
1|2016/1/4 |2016/2/29 |AZP00001 |100 |いいい          
1|2016/1/4 |2016/2/29 |AZP00001 |1200|うううう         
2|2016/1/15 |2016/3/31  |AZP00002 |1400|えええ         
2|2016/1/15 |2016/3/31  |AZP00002 |1500|おおおおお         
3|2016/2/1 |2016/3/31 |AZP00003 |1200|かかかか         
3|2016/2/1 |2016/3/31 |AZP00003 |1000|きききき         
3|2016/2/1 |2016/3/31 |AZP00003 |200 |くくくく         
3|2016/2/1 |2016/3/31 |AZP00003 |1780|けけけ         
3|2016/2/1 |2016/3/31 |AZP00003 |80 |こここ

何を入力するかというと
支払予定日(期ずれになる場合があるので手入力します)
請求書番号(購入先の請求書が来て初めてわかります)

これを、下記のように変えてほしいとの要望がありました

クエリ2
ID|注文日  |支払予定日 |請求書番号|金額|備考
1|2016/1/4 |2016/2/29 |AZP00001 |4800|あああああ          
2|2016/1/15 |2016/3/31  |AZP00002 |2900|えええ              
3|2016/2/1 |2016/3/31 |AZP00003 |4260|かかかか         
※請求書番号ごとに集計されています

こうすると請求書ごとに入力は一列で済むし合計金額=請求書の金額なのでわかりやすいとのことです
確かにそうなのですが、集計クエリに直接書き込むことはできません

なのでクエリ2をテーブル作成クエリでテーブルにして書き込む、までは思いついたのですが
それ以降がわかりません
クエリ2から作成されたテーブルのデータが、クエリ1にも同時に入力されるようにしたいのです
つまり、IDが1のレコードにはすべて1の支払予定日と請求書番号が
IDが2の場合は2の、と言った具合です
色々考えたのですが方法がわからなくて書き込ませて頂きました
よろしくお願いします

【12938】Re:あるテーブルに入力された数字を他ク...
発言  まるこ  - 16/2/5(金) 17:56 -

引用なし
パスワード
   >※請求書番号ごとに集計されています

請求書番号ではなくIDの間違えでした すみません

【12939】Re:あるテーブルに入力された数字を他ク...
回答  かるびの  - 16/2/5(金) 20:03 -

引用なし
パスワード
    クエリ1ですが、一対多のテーブルから成るクエリだと思います。
 つまり、一側テーブルは、その名前が例えばT請求書、フィールドがID、注文日、支払予定日、
多側テーブルは、その名前が例えばT請求明細、フィールドが明細ID、ID、金額、備考
となっているはずです。
 これは、好みの問題ではなく、蓄えるデータの性質上、理論に見て、
よほど特殊な事情がない限り、
こういうテーブル構成になるはずだというレベルのものです。


 次に、クエリから入力しているとのことですが、感心しません。
 データベースでは、レコードの入力はフォームで行うものです。
 テーブルやクエリを開いてそこに入力するということは、
むしろやってはいけないことと言っても過言ではありません(テストのときだけは別)。
 
 エクセルでは、データの格納も、データの計算も、データの入力・訂正も、データの表示も、
データの印刷も全てワークシートで行いますが、
アクセスの場合は、それぞれ異なったオブジェクトで行います。
 データの格納はテーブル、データの計算はクエリ、データの入力・訂正・表示はフォーム、
データの印刷はレポートで行います。

 確かに、テーブルやクエリでレコードの入力をすることもできますが、
元々が入力のためのオブジェクトではないので、人間にとって使いやすい入力の仕方は望めません。


 一対多のテーブルへデータを格納する場合、
メイン/サブの形式のフォームを使って常道です。

 つまり、メインフォームに、上例でいえばT請求書のレコードを表示させ、
サブフォームに、上例におけるT請求明細のレコードを表示させます。
 この場合、サブフォームには、メインフォームに表示されたレコードと紐付けられたレコードだけを
表示するようにするのが一般です。


 どうしても、
>ID|注文日  |支払予定日 |請求書番号|金額|備考
>1|2016/1/4 |2016/2/29 |AZP00001 |4800|あああああ         
>2|2016/1/15 |2016/3/31 |AZP00002 |2900|えええ
>3|2016/2/1 |2016/3/31 |AZP00003 |4260|かかかか 
という形で入力したいというならば、ワークテーブルを使います。

 ワークテーブルというのは、一時的にデータを保管するためのテーブルのことです。
 通常、フォームを開くときに、
1 ワークテーブルの初期化としてワークテーブルの全レコードを削除し、
2 追加クエリによりテーブルからワークテーブルにレコードを読み込み、
3 ワークテーブルをレコードソースとするフォーム上でレコードを入力・訂正し、
4 フォームを閉じるときに、元のテーブルにワークテーブルからレコードを戻します。
 戻し方にはいろいろありますが、最も単純なのは、
ワークテーブルに読み込んだレコードを元テーブルから全て削除し、
ワークテーブルから元テーブルに、ワークテーブルの全レコードを追加するという手法です。

 ワークテーブルは、比較的よく使われる手法ですが、
レコードの削除と追加を繰り返すため、ファイル破損の可能性が少し高まるとも言われており、
他の方法(メイン/サブのフォームなど)が使えるなら、避けたいところです。


 テーブル作成クエリは論外です。
 テーブルそのものの新規作成や削除を繰り返すと、ファイル破損の可能性が飛躍的に高まるため、
この方法はほとんど禁じ手です。

【12945】Re:あるテーブルに入力された数字を他ク...
お礼  まるこ  - 16/2/18(木) 16:52 -

引用なし
パスワード
   ▼かるびの さん:
ご回答ありがとうございます
ご報告及びお礼が遅れて申し訳ありません

> クエリ1ですが、一対多のテーブルから成るクエリだと思います。
その通りです

> 次に、クエリから入力しているとのことですが、感心しません。
> データベースでは、レコードの入力はフォームで行うものです。
> テーブルやクエリを開いてそこに入力するということは、
>むしろやってはいけないことと言っても過言ではありません(テストのときだけは別)。

そうなのですか
実はこの入力フォームは
エクセル的な入力方法でお願いしたいとのリクエストから、最初はデータシート形式のフォームを使っていたのですが、その流れであれこれクエリから直接入力するほうが簡単じゃないか?って思ってしまったのです
駄目だったのですね。

> 一対多のテーブルへデータを格納する場合、
>メイン/サブの形式のフォームを使って常道です。
>
> つまり、メインフォームに、上例でいえばT請求書のレコードを表示させ、
>サブフォームに、上例におけるT請求明細のレコードを表示させます。
> この場合、サブフォームには、メインフォームに表示されたレコードと紐付けられたレコードだけを
>表示するようにするのが一般です。

> テーブル作成クエリは論外です。
> テーブルそのものの新規作成や削除を繰り返すと、ファイル破損の可能性が飛躍的に高まるため、
>この方法はほとんど禁じ手です。

テーブル作成クエリは他の事に使っています
でもあまりよくないのですね
メインフォームとサブフォームの組み合わせは最初のデータ入力フォームがそうなので、そこでサブIDを入力していくようにしようと当初考えていましたが、一つ入力しては次のページ、といった方法が面倒だという声が上がりまして。
色々考えて、入力用フォームから追加クエリを使って入力する方法を取りました
エクセルとはかけ離れていますが、アクセスは本来そうしたものだと言って納得してもらいます

どうもありがとうございました。

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