プロが教える店舗&オフィスのセキュリティ対策術

顧客データの検索画面をAccessで作成しています。
テーブルの数は全部で9、各テーブルのレコード数は約1万、
各テーブルのフィールド数は多くて20くらいです。

テーブル用のAccessをサーバに置いておいて、
検索画面フォームのAccessはそれぞれの社員のローカルに置いています。
テーブルを参照している社員数は20弱です。

Accessのバージョンは2007や2010、Runtimeを使っている社員もいます。

氏名フリガナと電話番号で検索できるようになっていて、
下の□のなかに、各テーブルの該当のものが抽出されるようになっています。

この検索画面の動きが最近著しく悪いです。
もっとサクサク動くようにしたいです。
色々調べてはみたのですが
・テーブルをSQLサーバに置いてリンクしなおしてみたのですが
余計動きが遅くなりました。
・「ある程度絞り込んでから検索をかける」というのが高速化のポイントらしいですが
常に全件が検索対象なので、それができません。
・テーブルのレコードについては常に全社員が新規作成、変更等できる状態でなければならないです。

動きを高速化させる知恵はないでしょうか?
ご教授ください!

「Accessで検索を高速化」の質問画像

A 回答 (2件)

ミスリードが怖いので今回限りとします。


バックエンドの顧客データファイルをローカルにおいて再リンク。
これで試した場合に
共有フォルダに置いた場合とさほど処理時間が変わらなければ
Accessでの処理が限界にきていると推察されます。
両者とも他に誰も使用していない状況で試す必要があります。
差が格段に大きければネットワーク上に置いてあるために
問題が発生していると考えても良いのではないかと思います。

じわじわと遅くなったのではなければ
昨年くらいからWindows Update でいろいろとOSにも修正が入っているので
MSさん何かまずい事していない?と疑いたくなります。

以下は随分と昔なのですが調べた中で関係ありそうなのをピックアップしました。

[ACC2003] 複数のユーザーでリンク テーブルにアクセスするとパフォーマンスが落ちる
http://support.microsoft.com/kb/838670/ja

ネットワーク共有上のファイルを開いたとき、開くのに時間がかかる、読み取
り専用で開く、あるいはエラー メッセージが表示される
http://support.microsoft.com/default.aspx?scid=k …

Windows Vista を実行しているコンピュータで Microsoft Office Access デ
ータベースを開いたとき、または使用しているときに発生することがある問題
http://support.microsoft.com/kb/935370/ja

あとは、アンチマルウェアが足を引っ張っているとか・・・。

いずれにしろ、常時20人弱が頻繁に更新・新規レコード作成を行うのですから
Accessには荷が重すぎるように思います。
デッドロックに乗り上げたりファイル破損の可能性が常に付きまとうので
念には念を入れて作りこまないと・・・。
それに9万レコードのデータがLANを流れるわけですから。
以上、ご参考まで。

この回答への補足

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

補足日時:2013/12/09 09:26
    • good
    • 0
この回答へのお礼

たびたびありがとうございます!
>バックエンドの顧客データファイルをローカルにおいて再リンク。
さっそく週明けにでもこれやってみます!

どこが遅いのか、なんで遅いのか、まったく見当も付かず、
どうしてなんだろうと考えながらも手が思い浮かばず
何年も経過している次第です。
こうやってやってみれば原因が絞り込めていきますね!
大変参考になります!

>常時20人弱が頻繁に更新・新規レコード作成を行うのですから
>Accessには荷が重すぎるように思います。
こちらについても大変参考になりました!
Accessの限界ってどのくらいなんだろうと、それも知らなかったので・・・。

原因が絞り込めたら、社内システムの新しい運用方法を考えたほうがよさそうですね。

週明けに色々ためしてみてまた結果をお礼に書かせていただきます。
色々とありがとうございます!

お礼日時:2013/12/06 16:28

出来ることは限られているように思います。


既に試されてはいるかと思いますけど一応。
・氏名ふりがなフィールドと電話番号にインデックスを設定。
・『検索』を、Filter で行っているのならクエリの抽出条件で行うように変更。

・SQL Server にデータを置いてあるなら、パススルークエリを試してみる。
「access sqlserver パススルークエリ」辺りでGoogleって見てください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

>・氏名ふりがなフィールドと電話番号にインデックスを設定。
調べたところあいまい検索ができる場合はインデックスの作成はあまり意味がないと知りました。
また、レコードの新規作成や更新を頻繁にやっていると、インデックスがあると今度はそっちが遅くなると知り、あきらめました。

>・『検索』を、Filter で行っているのならクエリの抽出条件で行うように変更。
現時点でクエリの抽出条件でやっています。
たまたま最初からそうしていただけなんですけど。。。
Filterより抽出条件のほうがはやいんですね!知らなかったです!

>パススルークエリ
ためしてみたんですが、なぜか余計に遅くなってしまいました。。。

これをやれば簡単に早くできるよ、という具合にはいかなそうですね。
私が不勉強なだけで、
SQLServerを使えば早くなる方法がある気がします。
じっくり時間をかけて勉強していきたいと思います。

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

お礼日時:2013/12/06 09:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A