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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
ACCESSでテーブルの一部だけを...
-
デザインビューにてテーブルが...
-
Access クエリ、計算について
-
クエリについて教えてください
-
アクセス 項目毎にデータを横...
-
Access2010「クエリが複雑すぎ...
-
Accessでテキストが合体できる...
-
アクセスのスイッチボードで最...
-
ACCESS テーブル作成の日付付与...
-
ACCESS2000 クエリをテーブル化...
-
担当者別にレコードを抽出して...
-
ACCESSのテーブル作成クエリに...
-
アクセスのクエリでSplit関数は...
-
Access「レコードが削除されま...
-
ACCESSで行数指定(5万行目~8...
-
Access DAOのExecuteメソッドの...
-
Accessクエリで分類ごとの累計...
-
アクセスで新しいレコードの追...
-
accessでクエリの結果だけをリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
デザインビューにてテーブルが...
-
アクセスのクエリでSplit関数は...
-
アクセス 項目毎にデータを横...
-
クエリのデータをテーブルに入...
-
アクセス:クエリの結合とリレ...
-
Access「レコードが削除されま...
-
教えてください! アクセスのac...
-
access インポート時、既にある...
-
accessでクエリの結果だけをリ...
-
Access2010「クエリが複雑すぎ...
-
access テーブル作成クエリでテ...
-
更新不可能なクエリに対して更...
-
ACCESSでの重複レコードの削除
-
Access DAOのExecuteメソッドの...
-
テンポラリファイルのための空...
-
ACCESSで行数指定(5万行目~8...
-
Accessクエリで分類ごとの累計...
-
Access 末尾に0を追加したい
-
ACCESS2000 クエリをテーブル化...
おすすめ情報