Accessで検索を高速化

このQ&Aのポイント
  • Accessで検索を高速化する方法をご教授ください!
  • 顧客データの検索画面をAccessで作成していますが、最近動きが著しく遅くなりました。サクサク動くようにするための知恵をお教えください。
  • テーブルをSQLサーバに置いてリンクしなおしてみたり、絞り込んでから検索をかけるなど、検索の高速化には色々な試みをしましたが、うまくいきません。どのような方法が有効でしょうか?
回答を見る
  • ベストアンサー

Accessで検索を高速化

顧客データの検索画面をAccessで作成しています。 テーブルの数は全部で9、各テーブルのレコード数は約1万、 各テーブルのフィールド数は多くて20くらいです。 テーブル用のAccessをサーバに置いておいて、 検索画面フォームのAccessはそれぞれの社員のローカルに置いています。 テーブルを参照している社員数は20弱です。 Accessのバージョンは2007や2010、Runtimeを使っている社員もいます。 氏名フリガナと電話番号で検索できるようになっていて、 下の□のなかに、各テーブルの該当のものが抽出されるようになっています。 この検索画面の動きが最近著しく悪いです。 もっとサクサク動くようにしたいです。 色々調べてはみたのですが ・テーブルをSQLサーバに置いてリンクしなおしてみたのですが 余計動きが遅くなりました。 ・「ある程度絞り込んでから検索をかける」というのが高速化のポイントらしいですが 常に全件が検索対象なので、それができません。 ・テーブルのレコードについては常に全社員が新規作成、変更等できる状態でなければならないです。 動きを高速化させる知恵はないでしょうか? ご教授ください!

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

ミスリードが怖いので今回限りとします。 バックエンドの顧客データファイルをローカルにおいて再リンク。 これで試した場合に 共有フォルダに置いた場合とさほど処理時間が変わらなければ Accessでの処理が限界にきていると推察されます。 両者とも他に誰も使用していない状況で試す必要があります。 差が格段に大きければネットワーク上に置いてあるために 問題が発生していると考えても良いのではないかと思います。 じわじわと遅くなったのではなければ 昨年くらいからWindows Update でいろいろとOSにも修正が入っているので MSさん何かまずい事していない?と疑いたくなります。 以下は随分と昔なのですが調べた中で関係ありそうなのをピックアップしました。 [ACC2003] 複数のユーザーでリンク テーブルにアクセスするとパフォーマンスが落ちる http://support.microsoft.com/kb/838670/ja ネットワーク共有上のファイルを開いたとき、開くのに時間がかかる、読み取 り専用で開く、あるいはエラー メッセージが表示される http://support.microsoft.com/default.aspx?scid=kb;ja;814112 Windows Vista を実行しているコンピュータで Microsoft Office Access デ ータベースを開いたとき、または使用しているときに発生することがある問題 http://support.microsoft.com/kb/935370/ja あとは、アンチマルウェアが足を引っ張っているとか・・・。 いずれにしろ、常時20人弱が頻繁に更新・新規レコード作成を行うのですから Accessには荷が重すぎるように思います。 デッドロックに乗り上げたりファイル破損の可能性が常に付きまとうので 念には念を入れて作りこまないと・・・。 それに9万レコードのデータがLANを流れるわけですから。 以上、ご参考まで。

masunona
質問者

お礼

たびたびありがとうございます! >バックエンドの顧客データファイルをローカルにおいて再リンク。 さっそく週明けにでもこれやってみます! どこが遅いのか、なんで遅いのか、まったく見当も付かず、 どうしてなんだろうと考えながらも手が思い浮かばず 何年も経過している次第です。 こうやってやってみれば原因が絞り込めていきますね! 大変参考になります! >常時20人弱が頻繁に更新・新規レコード作成を行うのですから >Accessには荷が重すぎるように思います。 こちらについても大変参考になりました! Accessの限界ってどのくらいなんだろうと、それも知らなかったので・・・。 原因が絞り込めたら、社内システムの新しい運用方法を考えたほうがよさそうですね。 週明けに色々ためしてみてまた結果をお礼に書かせていただきます。 色々とありがとうございます!

masunona
質問者

補足

>バックエンドの顧客データファイルをローカルにおいて再リンク。 上記方法をためしてみました。 すごく速くなったわけではないですが、 サーバー上のテーブルを見にいくよりは速かったです。 いただいたURLを参考にさらに調べをすすめていきたいと思います。 ありがとうございました!

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

出来ることは限られているように思います。 既に試されてはいるかと思いますけど一応。 ・氏名ふりがなフィールドと電話番号にインデックスを設定。 ・『検索』を、Filter で行っているのならクエリの抽出条件で行うように変更。 ・SQL Server にデータを置いてあるなら、パススルークエリを試してみる。 「access sqlserver パススルークエリ」辺りでGoogleって見てください。

masunona
質問者

お礼

ご回答ありがとうございます! >・氏名ふりがなフィールドと電話番号にインデックスを設定。 調べたところあいまい検索ができる場合はインデックスの作成はあまり意味がないと知りました。 また、レコードの新規作成や更新を頻繁にやっていると、インデックスがあると今度はそっちが遅くなると知り、あきらめました。 >・『検索』を、Filter で行っているのならクエリの抽出条件で行うように変更。 現時点でクエリの抽出条件でやっています。 たまたま最初からそうしていただけなんですけど。。。 Filterより抽出条件のほうがはやいんですね!知らなかったです! >パススルークエリ ためしてみたんですが、なぜか余計に遅くなってしまいました。。。 これをやれば簡単に早くできるよ、という具合にはいかなそうですね。 私が不勉強なだけで、 SQLServerを使えば早くなる方法がある気がします。 じっくり時間をかけて勉強していきたいと思います。 ありがとうございました!

関連するQ&A

  • Accessのフォームにて顧客番号を検索して無ければ新規作成したい

    Access2003のフォームで社員管理システムを作ろうとしていますが、VBAの記述でわからないことがあるので、教えてください。 まず、テキストボックス「txt_検索」に社員番号を入力し「cmd_検索」ボタンを押すと、社員管理テーブルの社員番号フィールドより検索をします。 社員管理テーブルに該当するレコードがある場合は、レコードの編集となり、社員番号がない場合はテキストボックス「txt_社員番号」に「txt_検索」の値を入れた新規レコードの作成としたいのです。 入力した値でレコードの検索をして、無いなら新規作成といったコードは どのような記述になるのか教えてください。 よろしくお願いいたします。

  • テーブル内のレコードを別のテーブルに移す良い方法を教えてください

    SQLサーバー7.0(ADO)とAccess97のVBAでアプリケーションの開発を行っております。SQLサーバー7.0(サーバー側)にあるテーブルの中身(レコード全件)をAccess97(ローカル)にあるテーブル(テーブル名とその中のフィールド名は全く同じだが中身はからっぽ)にまとめて移しかえる良い方法があれば教えてください。いま私はフォームオープンイベントでフィールドとレコードをループでまわして移しかえているのですが、テーブル数も多いため記述も長くなりますし、何よりもパフォーマンスが良くありません。テーブル単位で中身を別のテーブルに移す方法などがあれば是非教えてください。 (例) SQLサーバー(ホスト側)---テーブル名「T_社員マスター」フィールド数100項目、レコード数500件 ↓ ↓ フォームオープン時にそのまま移しかえたい ↓ ↓ Access97(端末側)-------テーブル名「T_社員マスター」フィールド数100項目、レコード数0件 よろしくお願いします。

  • Accessで検索フォームを作成したいです。

    いつもお世話になっています。 Accessで検索フォームを作成したいのですが、webで調べてあてはめても上手くいきません。どうか、ご指導の程宜しくお願い致します。 (成分:テーブル) ID     成分 1    AAA 2     BBB 3     CCC 合計14レコードです。 (薬品と品番:テーブル) 薬品名    成分 あああ AAA いいい BBB えええ BBB あああ    CCC           合計200レコードです。 検索フォームを作成したいのですが、薬品名(例:「あああ」)を入力すると同じフォーム内で「AAA」「CCC」・・・とすべて一覧表示されるようにするにはどうしたらいいのでしょうか? Access初心者で、説明も物分りも悪いですがご指導の程宜しくお願い致します。 Access2002を使っています。

  • Access2007Runtimeについて

    Access2007Runtimeを作成するソフトは販売されていないでしょうか。 検索したのですが見つかりません。 Access2007Runtimeをダウンロード出来る事は知っていますが、 自社で作成出来るソフトが希望です。 数年前、Access2003Runtimeを作成するソフトは10万円前後で購入しました。 Access2007Runtimeを作成するソフトは存在しないのでしょうか。

  • Accessで検索画面を作る方法

    Accessで簡単な検索ができる画面を作りたいのですが 大まかにどのような画面を作成すればいいのかわかりません。 例えば得意先コードを入力すると得意先名がでるような 画面を作りたいのですが・・・ 得意先コードと得意先名がのったテーブルとクエリを1つ作成しました。 その後はどうしたらいいのかわかりません。 フォームで検索できるようにしたいのです。 よろしくお願いします!!

  • ACCESS内の検索

    お世話になります。できるのどうかわからないのですが宜しくお願いします。 ACCESSを利用し在庫管理などを行っているのですがその際、例えばクエリ名「A」というクエリをレコードソースとしフォームを作るとします。さらに同じクエリをレコードソースとしレポートを作ります。こういったように同じクエリやテーブルを使用する場合、システムの規模が大きくなるとクエリやテーブルがどこでどのように使用しているか把握しきれなく、また時がたつにつれ忘れていってしまいます。そこで、クエリやテーブルがどこで(クエリ、フォーム、レポート、マクロ、モジュールなど)使用されているか検索できるようにするにはどうしたらよいでしょうか? 宜しくお願いします。

  • Accessでテーブルにあるレコードが、選択クエリで抽出されない

    Accessについての質問です。 社員名簿を作ろうと思い入力用のフォームを作成して、そこから新入社員の氏名や部署などを入力しました。 それで、テーブルの内容を見ると新入社員の氏名や部署などは入っているのですが、 選択クエリを使って、新入社員の氏名で検索をしても引っ掛かりません。 テーブルに存在しているレコードを検索しても、引っ掛からないのはなぜでしょう?

  • アクセス2000でのレコード新規追加

    アクセス2000です。 社員名簿を毎年更新してIDを作成しています。 データはCSVでもらうので、エクセルで「固有ID」「フリガナ」「漢字氏名」「性別」「生年月日」フィールドを作成し、アクセスのテーブルにインポートします。 貰うデータは既存の社員、新入社員が混ざっています。 なので、新入社員だけを追加して、固有IDを割り付けたいと思います。 そこで、生年月日、性別、さらにフリガナの後ろ3文字をマッチング(結婚などによる改正に対応する)して、同じならば同一人物と判断し、追加しない、マッチングしなければ新規としてレコード追加、更にIDを自動的に入力したいのですが、どうすればよいでしょうか? 新規IDは半角でアルファベット1文字+9桁の数字にしたいです。 最大値+1でよいです。(例えば、現在使っているIDが[y900000001]ならば[y9000000002]を割り付ける。 名簿テーブルを作って、クエリを作成し、そのクエリに計算式フィールド「フリガナ2: Right([フリガナ],3)」を作成しフリガナの後ろ3文字を表示させる事はできましたが、今度はそのクエリから重複クエリで「フリガナ2」フィールドを重複項目に指定するとエラーが発生してしまいました。 「集計関数の一部として指定された式'Count(*)>And[性別]=[クエリ1].[性別]And[フリガナ2]=[クエリ].[フリガナ2]And[生年月日]='を含んでいないクエリを実行しようとしました。」 上記エラーです。 欲を言えば、生年月日、性別、フリガナ後ろ3文字がマッチしたデータは同一人物として判断し、名前に書き換えたいです。IDは変更しないです。 解決方法、宜しくお願いします。

  • ACCESSで他テーブルから複数の値を検索したい

    WINDOWS XP MSACCESS2003です。 以下、DDDテーブルの中からAAAテーブルのIDOと一致するものを DDDテーブルの項目種類と同様に全件抽出したいのですが、 どのようにすれば宜しいでしょうか?ご教示願います。 いろいろ検索したのですが、うまくいかなくて困っています。 (1)テーブル名:DDD 項目:SOFU_COD、IDO、TEL レコード件数18万件 (2)テーブル名:AAA 項目:IDO レコード件数47件

  • アクセスについて

    アクセスのレコード数483件のテーブルをクエリーで抽出しフォームで表示しているのですが、480件しか表示出来ません、どこか作成、設定で間違えがあるのか教えてください。

専門家に質問してみよう