• ベストアンサー

表示が遅くても我慢すべきか(アクセスの共有)

こんばんは。 現在、アクセスファイルを共有しているのですが重くて使い物にならないため回避方法を模索中の者です。 PC-Aを管理者として、mdbファイル(テーブルのみ)を共有フォルダにいれ、 PC-Bからも閲覧できるようにしています。(図上段参照) しかし、 あまりにも重くてテーブルを表示するのに1分かかってしまいます。 なので、元ファイルをPC-Aに置き、 共有フォルダにテーブルリンクをつくり、 PC-Bから共有フォルダに更にテーブルリンクしたのですが 表示できませんでした。(図下段参照) この場合はあきらめて、最初の方法で重くても我慢すべきなのでしょうか? それとも何かいい方法はありますか? やりたいことは以下のとおりです。 ・テーブルの共有 (PC-A・PC-Bから閲覧できるようにしたい。 データの追加、、削除はPC-Aのみから) ・なるべく早く表示させたい。(1分もかかったら仕事にならない) こういう場合はSQLサーバーを使えば回避できるのでしょうか? (SQLサーバーについてはよく知りません) ご教授よろしくお願い致します。

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

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.5

ついでですので、さらに補足します・・・。 (01)~(04)を適用したのちに、サブデータシートと並べ替えの設定を OFFにしたテーブルの速度と、 SQLにADPでリンクしたテーブルの開く速度はそれほど変わりません。 以前、100万件のデータで SQL SErver2000でテストしました。 今は2005、2008ですが重たくなってるので多分遅いと思います。 また、2000などでは、表示件数が限られてきます。(設定が要る) 例えば数万件のレコードをもつテーブルの場合、 デフォルトでは全件表示されません。 Access(JETエンジン)は適切な設定をすればローカルや数十万件程度なら SQL Serverにはひけは取らないです。 ただ、(JETエンジン)にはストアドプロシージャが無いので、 それを使う処理ならやはりSQL SErverのほうが速いです。 ただ、SQL Serverを使うことで「色んな場面での手軽さ」は 確実に失うので、SQL Serverに移行する際は、 十分に試用、テストをしてからにしたほうがいいと思います。 Accessみたいに簡単ではないですから…。

noname#150498
質問者

お礼

SQLは敷居が高いですね。 でもがんばってみます。 ありがとうございます。

その他の回答 (4)

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.4

補足です。 前回答の(01)~(04)は要するに バックグランドでダミーフォーム(ダミーテーブル)を1つでいいので 開きっぱなしにする・・・、ということです。 そうすると、リンクテーブルを開くときの余計なチェックが キャンセルされるのか、リンクテーブルの速度が速くなります。 というか、本来の速度に戻ります。 なお、複数台のクライアントが同時接続することでリンクテーブルが 遅くなる現象はJETの仕様ですので、サービスパックでは治りません。 もし、(01)~(04)の方法をとっても クエリではなくて、単一テーブルで速度が改善しないなら、 設計が悪いか、ネットワークがかしいかのいずれかだと思います。 LANアダプタのドライバや設定変えたり、1000BASE-Tに変えたり することで改善する場合もあります。 (今回のは違う気がしますけど…)

noname#150498
質問者

お礼

しょうがない部分もあるのですね。 ありがとうございます。

  • gadd3
  • ベストアンサー率46% (211/451)
回答No.3

AccessとOSのバージョンがわからないのでなんともいえませんが…、 リンクテーブルを使用する場合、例えばOSがWindows2000やXPなら、 2台目以降の接続からリンクテーブルが過度に遅くなるので(仕様)、 (01)サーバ側にデータの入っていないダミーテーブルを作成   「t_dummy×××」 などの名前でOKです。 (02)(01)をソースにしたリンクテーブルをクライアントのmdbに作成 (03)(02)をソースにしたダミーフォームをクライアントmdb内に作成 (04)(03)をAutoexecマクロで、非表示として起動時にオープンさせる。 で、速度が改善されるはずです。 Windows98ではこの速度低下(仕様)は起こりません。 なお、(01)~(04)をやるかわりに、DAOなどで 直接サーバのダミーテーブルを非表示で開いてもよいのですが VBAに慣れてないなら(01)~(04)でOKだと思います。 なお、(01)~(04)をやりたくない場合は テーブルを、データシートフォームでラップしてやって、 (リンクテーブルをソースにしたデータシート形式のフォームを作成) テーブル直ではなく、データシートフォームで開いてやってもいいかもです。 クエリでラップして、クエリを開いてもOKかもしれません。 クエリでも遅いようなら、IN句を使ったクエリで開くと高速になります。 テーブル直で開くのと、フォームやクエリとして開くのではなぜか 速度が違うときがあります。 大抵はテーブル直で開くほうが遅いです。 (あくまでもリンクテーブルを使って、2台以上のパソコンが  同時接続している場合) さらに、サーバがわのオリジナルのテーブルで サブデータシートの機能をOFFにしたのち、リンクテーブル側も サブデータシートの機能をOFFにしたり、 同じく、サーバがわのオリジナルのテーブルで 並べ替えの機能をOFFにしたりすると、もっと速くなります。 多分1秒以内くらいで開くんじゃないかと思います。 10万件以下なら確実です。 それでも開かない場合は主キーが無いとか、 もしクエリなら、インデックスを設定しているにもかかわらず 使われていないとかの理由かもしれません。 Showplan関数で調べることができます。

noname#150498
質問者

お礼

Access2003、OS2000です。 難しそうですががんばります。 ありがとうございます。

回答No.2

 私も上図で生産管理の仕組みを作りましたが、それなりに動いているはずです。(「遅い」という苦情を聞いていないので...) アプリケーションは15~16台のパソコンにインストールしてありますが、同時使用は2台程度でしょう。更新がぶつかってエラーになることは年に1回あるかないかです。  配慮したことは、(1)テーブルの正規化は必須。データテーブルのうち(2)頻繁に更新するテーブルと更新が少ないテーブル(例えば商品コードとか社員名簿等)のmdbを分け、後者はアプリ起動時に自パソコンに(batファイルで)mdbごとコピーする。(3)解析は、csvファイルに落としExcelで行う で「遅い」をカバーしました。  何といってもクエリーは便利なツールですから...

noname#150498
質問者

お礼

テーブルの正規化ですね。参考になりました。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

アクセスはデータを全部読み込みクライアントでクエリー等を実行しますが、SQLサーバを利用すれば、クエリー等がサーバで行われ結果だけを読み込むようになるため速くなります。(サーバに使うPCの能力に左右はされますが) 現在の起動が遅い状態と言うのがデータが多くて読み込みに時間がかかっているのでしたら、データを分割するなどしてみてはいかがでしょう。 殆どデータがないのに遅いのでしたらフォームの作り方などで重い部分があるのだと思いますので、その部分を改善するしかないと思います。 データが200MBくらいのテーブルを10台くらいのマシンで共有(上段と同じ状態)してましたが起動に1分もかかることはありませんでした。

noname#150498
質問者

お礼

データの分割は考えていないのでSQLサーバを使う価値はありそうですね。 勉強してみます。 ご回答ありがとうございます。

関連するQ&A