access2003で検索フォームを作成しています。
リレーションの結ばれた複数のテーブルを対象に、検索語句による検索をしようとクエリを作っています。
基本となるテーブルには数値(ID)が中心となっており、それらの実際の値をDlookUpで参照して結果を作っています。
この際に、DlookUpで指定した参照元について抽出条件を設定すると異様に時間が掛かり、実用的ではなくなってしまいました。
テーブルの構成上、DlookUpを使わざるを得ないので、その参照元も含めて検索語句で抽出できるようにしたいのですが、
どのようにすればレスポンスの良い検索クエリができますでしょうか。
No.4ベストアンサー
- 回答日時:
ついでに、
http://www.accessclub.jp/ado/refresh.html
http://www.amy.hi-ho.ne.jp/banchan/sw/vba/v1.html
ADOにてSQLとは、こんな感じです。 クエリーが作れれば、それをSQLビューにすると(カッコだらけですが)SQL文を見ることができます。 (コピーしてVBAに貼り付けるだけでよいわけです。)
コネクションを変えるとサーバに直接問い合わせることができます。 (dbによりSQL文が多少異なるものもありますので調整が必要になる場合もあります。)
ご丁寧に有難うございます。
現在、複数のクエリと複数のワークテーブルを組み合わせて、
とりあえず思うような結果が出力できるものを製作中です。
完成したら、ADOでのデータアクセスに挑戦してみます。
どの程度負荷が軽減され、動作が軽快になるのか楽しみもありますね。
リンクはScrapBookに保存しておきます。
改めて、ADOに躓いたら質問させて頂きます。
ご回答頂きました皆様、有難うございました。
No.3
- 回答日時:
No2ですが、
リンクテーブルなら、インデックスは設定できません。
MDB内で完結させようとすると、クエリの作成方法に全てがかかってくることになります。
>ワークテーブルを用意し検索の度に削除クエリと追加クエリを実行し最新の状態にし、そのワークテーブルを一つのクエリで抽出するようなイメージのものです。
リンクテーブルであれば、このようなやり方をすることになります。
順番によって速度が変わることがありますのでいろいろやってみるのが良いと思います。
どちらかといえば、ADOでSQLを使う方法をとられたほうが、将来的にデータが増えた際の対応としては楽になると思います。(直にサーバにSQL文で問い合わせをするよう変更するだけですから。)
そんなに難かしいことではありませんので、取り組んでみたらいかがでしょうか?
No.2
- 回答日時:
実際に実験してみないと効果があるかどうかはわかりませんが、
1.インデックスを指定する。 検索されるフィールドにインデックスを振っておくことにより検索が早くなることがあります。
2.パラメータクエリ(選択)を使用した場合とDLookupを使った場合で時間を比べてみる。
>テーブルの構成上、DlookUpを使わざるを得ないので
私は、そんな場合に直面したことはありません。 ほかのやり方が必ずあると思います。
3.ADOのSEEKメソッドを使った際の時間と比べてみる。
4.ADOで直接SQLを使ってレコードセットを作ってみる。
経験上(大したものではありませんが)では結局のところ(2)普通の選択クエリを使うのが一番早いことが多いです。 複数のテーブルがリンクされていて、それぞれに抽出条件がある際は、数が限定されるクエリを先に行い仮テーブルに書き出しておくことにより、レスポンスが良くなることがあります。
データベース構造とは関係ありませんが、Accessをインストールしているドライブと、MDBがおいてあるドライブを物理的に分けると多少早くなるという話があります。(比較したことはありません。)
この回答への補足
ご回答有難うございます。
ADO,SQLのについてまだ理解していないので、1,2項の部分について取組んでみたいと思います。
その場合、、、
1.については、検索対象はLAN内のSQLサーバーのテーブルにリンクさせています。
この場合、現在のmdbのリンクテーブルにインデックスの設定をしても構わないものなのでしょうか?
また、それでインデックスの効果が出るのでしょうか?
2.については、DlookUpを使わないで選択クエリを用いるということは、クエリを階層化するという事でしょうか。
過去に経験があるのは、ワークテーブルを用意し検索の度に削除クエリと追加クエリを実行し最新の状態にし、
そのワークテーブルを一つのクエリで抽出するようなイメージのものです。
この考え方でよいのでしょうか?
フォーム上からの検索契機に対して、2重(3重?)のクエリを実行させる事になりますので、荒業的なのかなとも心配です。
お手数お掛けいたしますが、アドバイス頂けたら幸いです。
3.4についてはスキルアップに伴って検証してみます。
No.1
- 回答日時:
DlookUpで指定した参照元のデータ件数が異常に多い?そうでもなければ、参照元が複雑なクエリになっているとか。
又は、外部のDBを参照してると遅いですけど、そんなことではないですよね?情報が少ないので、何が原因かはよく解らないですね。思い当たりそうな物を書いてみました。
この回答への補足
早速のご回答有難うございます。
漠然としていて申し訳ありません。
どの程度まで表現するとうまく伝わるか、考えてはいるのですが、まだまだ未熟もので。
ちなみにテーブルは全てリンクテーブルで、社内のSQLサーバーにリンクしています。
このテーブルから現場に合わせた情報を検索したいと思っています。
また、件数は15,000レコードを越えているところで、今後も5,000件/年程度増えていくと思われます。
この辺がボトルネックだとすると、構成を考え直さなければいけないなと。
なお、DlookUpの指定によっては条件が複雑すぎるというエラーが出ます。
リレーションのつなぎ方などを再考してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Access(アクセス) Excel や Access のフォームの中でいわゆるインターネットの検索窓のようなものを構築できま 9 2022/05/21 12:39
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) Access DLookup vbaで条件を2件設定したい場合どうすればよいでですか? 現在 If( 1 2023/06/28 14:28
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセス:クエリの結合とリレ...
-
ACCESSでの別のテーブルのデー...
-
ハイパーリンクの抽出・印刷に...
-
ACCESSで2種類に分類してカウン...
-
アクセス クロス集計クエリ→テ...
-
access テーブル作成クエリでテ...
-
accessでクエリの結果だけをリ...
-
アクセス VBA クエリSQL文変更
-
更新不可能なクエリに対して更...
-
ACCESSの指導書でベストは?
-
access2010 テーブル作成クエリ...
-
教えてください! アクセスのac...
-
access2003で軽快な検索クエリ...
-
access インポート時、既にある...
-
Accessでのインポート時アップ...
-
ACCESSのテーブル作成クエリに...
-
Access テーブルAにテーブル...
-
在庫管理と賞味期限管理
-
日付型のフィールドに空白を入...
-
accessvba 複数条件でFilterを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
アクセス 項目毎にデータを横...
-
クエリのデータをテーブルに入...
-
Access「レコードが削除されま...
-
アクセス:クエリの結合とリレ...
-
accessでクエリの結果だけをリ...
-
access インポート時、既にある...
-
教えてください! アクセスのac...
-
デザインビューにてテーブルが...
-
アクセスのクエリでSplit関数は...
-
更新不可能なクエリに対して更...
-
ACCESSで行数指定(5万行目~8...
-
access テーブル作成クエリでテ...
-
Accessのクロス集計→テーブル作...
-
ACCESS テーブル作成の日付付与...
-
ACCESSでの重複レコードの削除
-
アクセス クロス集計クエリ→テ...
-
アクセスで新しいレコードの追...
-
ACCESS2000 クエリをテーブル化...
-
Access2010「クエリが複雑すぎ...
おすすめ情報