Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

新着の投稿記事


タイトルRe^4: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10869   [関連記事]
投稿日: 2017/07/28(Fri) 20:56
投稿者チャコール
解決済: ON
> おはようございます。
>
> > Q1.
> > 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
> > A1. インデックスになっていません。
> インデックス又は主キーにしていないと、そもそもかなり遅いというか、
> データベースとしての利点を生かしていないことになります。
> 主キー設定をどうするか、まず考えましょう。

承知しました。早速実施します。
>
> > Q2.
> > 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> > いうことですか?
> >
> > A2.
> > 違う受注伝票番号を見るときは再度テーブル作成します。
> その都度テーブルを作成するのはファイルの破損につながるので
> Accessとして好ましい使い方ではありません。
> 全レコード削除→追加にすべきでしょう。

ファイル破損に繋がるのですね。承知しました。
追加に変更します。

>
> >> Q3.
> >> この処理はどの程度の頻度で行われる予定ですか?
> > A3.
> > 問題が発生した時だけ、データの状態を確認したいと思っています。
> 頻繁でないのであれば、それほど速度を気にしなくてもよいのでは、と思います。
> チャコールさんのやりかたでやってみて、それで耐えられないほど遅い(あるいは反応しない)ので
> あれば一時テーブルを使う処理にしてみてはどうでしょうか。
>
> 昔はAccessの処理能力が低かったので一時テーブルを使うことがよくありましたが、
> 最近では適切にインデックスを作っていれば100万件程度のデータでも直接処理できたりします。
>
> ともかく、そのあたりの手法うんぬんより、キーの付け方が第一です。

ナバさん

いろいろとアドバイスいただきましてありがとうございます。とても助かります。

また私のやり方を肯定していただける意見をいただけて嬉しく思っております。もう少しAccessを勉強してナバさんみたいになりたいです。

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

P.S.
お礼の返事が遅くなり申し訳ありませんでした。販売管理システム(oracle,.net)の既存バグ分析のため毎日深夜帰りだったものですから遅くなってしまいました。またAccessやExcelのマクロやフォームの設定及びODBCでの接続先データベースのテーブル定義も変更していないのに突然エラーになるような原因不明のエラーにも遭遇してしまいとんだ1週間でした。

タイトルRe^3: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10868   [関連記事]
投稿日: 2017/07/24(Mon) 10:07
投稿者ナバ
解決済: ON
おはようございます。

> Q1.
> 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
> A1. インデックスになっていません。
インデックス又は主キーにしていないと、そもそもかなり遅いというか、
データベースとしての利点を生かしていないことになります。
主キー設定をどうするか、まず考えましょう。

> Q2.
> 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> いうことですか?
>
> A2.
> 違う受注伝票番号を見るときは再度テーブル作成します。
その都度テーブルを作成するのはファイルの破損につながるので
Accessとして好ましい使い方ではありません。
全レコード削除→追加にすべきでしょう。

>> Q3.
>> この処理はどの程度の頻度で行われる予定ですか?
> A3.
> 問題が発生した時だけ、データの状態を確認したいと思っています。
頻繁でないのであれば、それほど速度を気にしなくてもよいのでは、と思います。
チャコールさんのやりかたでやってみて、それで耐えられないほど遅い(あるいは反応しない)ので
あれば一時テーブルを使う処理にしてみてはどうでしょうか。

昔はAccessの処理能力が低かったので一時テーブルを使うことがよくありましたが、
最近では適切にインデックスを作っていれば100万件程度のデータでも直接処理できたりします。

ともかく、そのあたりの手法うんぬんより、キーの付け方が第一です。

タイトルRe^2: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10867   [関連記事]
投稿日: 2017/07/24(Mon) 01:22
投稿者チャコール
解決済: ON
> こんにちは。
>
> > 環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。
>
> いくつか確認を。
>
> Q1.
> 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
>
> Q2.
> 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> いうことですか?
>
> Q3.
> このの処理はどの程度の頻度で行われる予定ですか?
>
> 余談ですが、2。を説明するときは箇条書きにしましょう
>
> 2-1.受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成しテーブルを受注伝票テーブルBとして作成する
> 2-2.受注明細テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成したテーブルを受注明細テーブルBとして作成する 
> ・
> ・

ナバさん

早速ご返答いただきましてありがとうございます。また返答が遅くなり申し訳ありません。
ご指摘いただいた、初期に入力した内容を一応箇条書きぽくしました。
また、いただいた質問について以下に記します。

Q1.
「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
A1. インデックスになっていません。

Q2.
2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
いうことですか?

A2.
違う受注伝票番号を見るときは再度テーブル作成します。

Q3.
このの処理はどの程度の頻度で行われる予定ですか?
A3.
問題が発生した時だけ、データの状態を確認したいと思っています。

補足ですが、テーブル作成クエリーを実行する前は各テーブル15万件以上のデータがあり、PCのメモリーは4GB、CPU 2.5Ghzです。

お手数ですが再度ご回答いただけますとありがたいです。よろしくお願いいたします。

タイトルRe: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10866   [関連記事]
投稿日: 2017/07/21(Fri) 14:25
投稿者ナバ
解決済: ON
こんにちは。

> 環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。

いくつか確認を。

Q1.
「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?

Q2.
2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
いうことですか?

Q3.
このの処理はどの程度の頻度で行われる予定ですか?

余談ですが、2。を説明するときは箇条書きにしましょう

2-1.受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成しテーブルを受注伝票テーブルBとして作成する
2-2.受注明細テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成したテーブルを受注明細テーブルBとして作成する 


タイトル複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10865   [関連記事]
投稿日: 2017/07/21(Fri) 00:33
投稿者チャコール
解決済: ON
OS:Windows7/10
Access Version:Access 2003/2016

環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。
以下の方法でクエリーの作成し実行する場合、どちらがより良いと考えますでしょうか。
理由(処理スピード、作業効率など)を教えていただけないでしょうか。 

Accessにすこし詳しいものが2が正しいといってうるさくて仕方なく、わたし的にはSELECT文はSELECT句から読まれるのではなくて文の最後例えばWhere句から実行されると認識しているため、恒久的に実行しなければいけない場合以外、スピードや手間がかからないので1が正しいと考えています。今回はあくまでもシステムの動作の問題点をテーブル内のデータを確認することが目的なので1で十分かと思っています。アドバイスいただけないでしょうか。それぞれのテーブルのレコード件数は60万件を想定しています。

1.これらを4つのテーブルをGUIを使って受注伝票テーブルの受注伝票番号をリンクし、それを抽出条件とし値を設定しクエリーを実行する

2.まず、受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成しテーブルを受注伝票テーブルBとして作成する。
次に、受注明細テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成したテーブルを受注明細テーブルBとして作成する。
次に、売上伝票テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成したテーブルを売上伝票テーブルBとして作成する。
次に、売上明細テーブルに対してクエリーを作り受注伝票番号をキーとした作成したテーブルを売上明細テーブルBとして作成する。
最後に、受注伝票番号ですべてをリンクし、受注伝票番号テーブルの受注伝票番号に抽出条件を設定しクエリーを実行する。

タイトルRe^3: 【Access】2つのテーブル 複数条件 引き算
記事No10864   [関連記事]
投稿日: 2017/05/25(Thu) 17:26
投稿者tkawn
> >                        "予算CD = " & 予算CD & " AND 月 = " & 月) AS 予算残額
ここの書式が、各フィールドのデータ型によって違ってきます。
こちらをご参考にしてみてください。

抽出条件文の書式
https://accesskid.wordpress.com/2010/10/12/%E6%8A%BD%E5%87%BA%E6%9D%A1%E4%BB%B6%E6%96%87%E3%81%AE%E6%9B%B8%E5%BC%8F/
2. 定義域集計関数やFind系メソッドのCreteria引数あるいは レコードセットやフォームのFilterプロパティの条件をVBAで指定する。

タイトルRe^2: 【Access】2つのテーブル 複数条件 引き算
記事No10863   [関連記事]
投稿日: 2017/05/25(Thu) 17:19
投稿者1232
クエリのSQLビューで入力してみましたが、クエリの結果「予算残額」フィールドが
全て空白で返されてしまいました…。

まだまだ初心者で、試行錯誤しながら作成してますので
イチから勉強しなおしてきます。

ありがとうございました!
今後の参考にさせて頂きます。

> テーブルではなくクエリですが、
>
> SELECT 予算CD,
> 月,
> 予算金額 - DSum("実行金額",
> "テーブル2",
> "予算CD = " & 予算CD & " AND 月 = " & 月) AS 予算残額
> FROM テーブル1;
>
> ではどうですか?

タイトルRe^2: 【Access】2つのテーブル 複数条件 引き算
記事No10862   [関連記事]
投稿日: 2017/05/24(Wed) 09:30
投稿者1232
ご回答ありがとうございます!
ちょっと、明日にならないとPC触れないので、明日試してみてまたご報告させて頂きます!


テーブルではなくクエリですが、
>
> SELECT 予算CD,
> 月,
> 予算金額 - DSum("実行金額",
> "テーブル2",
> "予算CD = " & 予算CD & " AND 月 = " & 月) AS 予算残額
> FROM テーブル1;
>
> ではどうですか?

タイトルRe: 【Access】2つのテーブル 複数条件 引き算
記事No10861   [関連記事]
投稿日: 2017/05/23(Tue) 19:18
投稿者tkawn
テーブルではなくクエリですが、

SELECT 予算CD, 
       月, 
       予算金額 - DSum("実行金額",
                       "テーブル2",
                       "予算CD = " & 予算CD & " AND 月 = " & 月) AS 予算残額
  FROM テーブル1;

ではどうですか?

タイトル【Access】2つのテーブル 複数条件 引き算
記事No10860   [関連記事]
投稿日: 2017/05/23(Tue) 16:59
投稿者1232
OS:Windows7
Access Version:2016


下記のような、2つのテーブルが存在していて
テーブル1の金額から、テーブル2の金額を引き算した結果の
テーブル3を表示させたいのです。
引き算をする条件は、同じ(予算CD)&同じ(月)に対応するレコードです。
仕様上、二つのテーブルを結合はさせたくありません。

テーブル1は、CD別・月別で既に金額が振り分けてあり
テーブル2は、CD別・月別で一旦集計をし(重複レコードが発生するため)、
テーブル1の対応するレコードより引き算をしたいです。

■テーブル1
予算CD 月 予算金額
=======================
 1   1 \100,000
 1   2 \200,000
 2   1 \100,000
 2   2 \200,000

■テーブル2
予算CD 月 実行金額
=======================
 1   1 \50,000
 1   1 \10,000 ←重複レコード発生あり
 2   1 \50,000
 2   2 \10,000 
 1   1 \0    ←こんなのが発生することもあり

■テーブル3(これを出したい)
予算CD 月 予算残額
=======================
 1   1 \40,000
 1   2 \200,000
 2   1 \50,000
 2   2 \190,000


恐らくSQLで解決するのかな…と思うのですが、色々例を見てみても
複数条件での引き算となると、理解が追い付きません。
勉強不足で大変恐縮なのですが、どうぞご教授頂きますよう、お願い致します。

ページの先頭へ 前ページへ戻る