• 締切済み

accessの処理が遅い

accessの処理が遅く困っています。 何か良い解決方法があればご教授お願いいたします。 まずは現状を説明いたします。 仕事でaccessを使用していますのでどこまで話していいのか迷うとこですがなるべく詳しく書きたいと思います。 まずは私の現状を ・accessは利用歴半年ほどでまだまだ全然理解していない ・職場で必要に迫られて独学で勉強しています ・私的には頑張ってネットや書籍で色々と調べてみました 仕事場で行なっていること ・職場の基幹システム(これが何で作られているとかはさっぱり分かりません)は次のようなデータを処理しています。顧客データ、在庫管理、作業履歴、入出庫管理などなど ・上記の基幹システムが毎日「データ」という名前の圧縮ファイルを本社サーバにエクスポート?していきます ・私はのそ「データ」という圧縮ファイルを使って作業を(主にデータ分析)を行なっています ・「データ」を回答すると「データ1」「データ2」「データ3」「データ4」という4つのMDBファイルが出てきます ・私はその「データ1~4」のMDBファイルを自分の支店の共有フォルダにコピーして作業を行なっている ・ローカルのPC上ではなくネットワーク上にファイルを置くのは、支店内の全員のパソコンからアクセス出来るようにとのことです 問題となっている処理に時間のかかる処理内容というのが クエリを多重で行う(言い方が合っているのか?^^;)ということを5段位行っています 遅いのは当たり前というのはわかって入るのですが、1度のクエリで目的のものを表示させられないので結果こうなりました(ーー; 他にも遅くなっている理由があります 「データ1」などの元となるMDBファイルに入っているテーブルを全てリンクデーブルで参照しています(言い方あってるかな?) なぜ普通にインポートして使わないのかという理由を説明します。 ・「データ」というファイルは毎日、新しくシステムから落ちてきます ・私としては毎日行うクエリを再利用したい ・「データ1」というファイルをある場所に置いておき、自分のデスクトップにMDBファイルを作成し(これを作業ファイルと呼ぶ)、そこに「データ1」の中のデーブルをリンクさせておく。 そして作業ファイル内にクエリを作製する あとは毎日の新しい「データ」ファイルを過去のファイル(作業ファイルにインポートしたリンク先)に上書き保存する。 こうすることでクエリを作製し直さないで同じクエリを再利用し、表示されるデータは毎日最新をキープする。これが理由なんです。 (本当は作業ファイルもネットワーク上に置きたいのです、というか置いていました。しかし遅すぎるため今は取り敢えずデスクトップ上に置いています) しかしこのクエリが多重で行われているためか結果を表示するのに3分~5分かかります。 これを早くしたいのです。 上記の方法におかしな所や、こうしたほうがより早くなるなどのアドバイスがあればお願いします。 そして別件ですが、こういった状況ですので個人的に色々調べてみました。 どうもaccessは大きなデータには向いていない?というような情報を目にします。 「データ1」などのMDBファイルにあるデーブルは100万行などのテーブルもあります。 MDBファイルの容量も2GBギリギリです。 こういう場合はMYSQLやsqliteなどを使用したほうが良いのでしょうか? そういったものを使用した場合は今のaccessのようにGUIで簡単にクエリなどを作成できますでしょうか? そういたものを使用してMDBファイルを扱えるのでしょうか? 非常に分かりにくい質問で申し訳ございませんが宜しくお願い致します。

みんなの回答

noname#189141
noname#189141
回答No.4

> そのソフトを私のデスクトップにインストールするのでしょうか? はい、そうなります。 > SQL Serverというソフトなら基幹システムから落ちてくるMDBファイルを今のように扱えるのでしょうか? MDBにあるデータ(テーブル等)をインポートして使うことになります。 単体ではもしかすると使い辛い部分があるので、フロントエンドはAccessをお使いになられた方が良いかもしれません。 参考書など多数出てますので・・・それぐらいは経費でなんとか・・・ 現在サポートされている(といってもセキュリティパッチがダウンロードできますよの意味)SQL Server Expressは以下にあります。 バージョンが新しいほど、必要なスペックはあがるとお考えください。また、対象OSも異なりますので、それぞれリンク先を確認してください。 Microsoft SQL Server 2005 Express Edition Service Pack 3 http://www.microsoft.com/ja-jp/download/details.aspx?id=15291 Microsoft® SQL Server® 2008 R2 SP2 - Express Edition http://www.microsoft.com/ja-jp/download/details.aspx?id=30438 Microsoft® SQL Server® 2012 Express http://www.microsoft.com/ja-jp/download/details.aspx?id=29062

noname#189141
noname#189141
回答No.3

> ・インターフェース→access > ・データーベースエンジン→sqlite > ・ファイル(データそのもの?)→mdb 大抵のデータベースは、エンジンとファイルは一体化しています。エンジンが理解できるファイル形式であることが、一番の効率化となりますので、高速化という要件から外れます。 同じことはインターフェースにも言えますので、分けてしまうことは、高速化から外れてしまいます。 条件が厳しいようですが、高速化および簡便化を目指して、稟議を掛けるなど検討されてはいかがでしょうか。 --- どうしてもデスクトップでやるなら・・ ・64bitOSにする(メモリたくさん使うなら必須、サーバーでなくともOK) ・メモリを積む(複数テーブルのクエリなどはメモリが多いほど早くなるはず) ・mdbと親和性の高いSQL Server (Expressなら無償)導入 でしょうか。

cafetabaco
質問者

補足

有難うございます。 稟議を掛けることは残念ながら不可能でございます(;; 64bit、メモリは理解できます。 >・mdbと親和性の高いSQL Server (Expressなら無償)導入 >でしょうか。 この部分がよくわからないのです。 そのソフトを私のデスクトップにインストールするのでしょうか? SQL Serverというソフトなら基幹システムから落ちてくるMDBファイルを今のように扱えるのでしょうか?

noname#189141
noname#189141
回答No.2

cafetabacoさんがやろうとしている処理は、データ量からして基幹側で処理するべき作業と思われます。 それが出来ないのは、そのクエリ実行が、cafetabacoさんの部門でしか使えない個別要件のものなのか、情シス部門が能力がないのか、ガチガチパッケージを導入しているのかどれかです。 (おそらく一番後者で、解析・レポートは別オプションで馬鹿高い) 手っ取り早く感じるのは、上位のデータベースソフトに乗り換えることですが、件数からすると、「デスクトップでやっている限りでは早くならない」と感じられました。 少なくとも専用サーバーを準備して、メモリをたくさん積んで、システム構築するのが近道でしょうか。 でも、mdbからインポートが面倒な気がしますので、SQL Server Expressが一番手っ取り早いのでは? --- 小手先のチューニングとしては、クエリーの最適化とかあるやも知れませんが、Accessではすぐ限界に達します。

cafetabaco
質問者

補足

有難うございます。 私も本社の考えはさっぱりわからないのです(ーー; しかし何にせよ、 本社側では分析をしない 基幹システムに変更は不可 サーバを用意するなども不可 あくまでも私のデスクトップと支店の共有ネットワークだけを使用する この条件でやらなくてはなりません sqliteやMYSQLは速いとネットで書かれているのですが MDBファイルをそれらの速いソフトで処理することは不可能なのでしょうか? 調べてもいまいちその辺が理解できません データーベースソフトと言うのは3つに分かれているのでしょうか? ・インターフェース ・データーベースエンジン ・ファイル(データそのもの?) それならば ・インターフェース→access ・データーベースエンジン→sqlite ・ファイル(データそのもの?)→mdb こんな仕様方法は出来ないものでしょうか?(^^;

回答No.1

単に遅いのであれば高性能のマシンに置き換えれば解決します。ACCESSは比較的小規模のシステム用でかつ個人で使う事を想定した物ですのでこのままでは無理な可能性が有ります。全体最適を狙った場合は基幹システム側に現機能を統合する方法が一番良いと思います(私ならそうします)。基幹システムで統合できない場合は共有利用を想定したRDBMSに落として対応すると良いと考えます、お勧めはMicrosoftSQL Server2012(または2008)Express Editionです,無償ですしACCESSで動くレベルの小規模システムであれば十分使えます。尚、SQLだけではシステムが作れないので他のプログラミング言語が必要です。ちなみに、私もSQLでシステムを作るための言語(ツール)を作っています。

cafetabaco
質問者

補足

有難うございます。 基幹システムの変更は出来ません^^; >基幹システムで統合できない場合は共有利用を想定したRDBMSに落として対応すると良いと考えます、お勧>めはMicrosoftSQL Server2012(または2008)Express Editionです,無償ですしACCESSで動くレベルの小規>模システムであれば十分使えます。尚、SQLだけではシステムが作れないので他のプログラミング言語が必>要です。ちなみに、私もSQLでシステムを作るための言語(ツール)を作っています。 私の能力が低いため、よく理解できませんでした。 基幹システムを作り変えるということでしょうか? 基幹システムは毎日「データ」という名のMDBファイルを落としてきます。 これは変えることはでいません。 私はあくまでもこのMDBファイルを使用して仕事をするしかありません。 自分が使っているPCのグレードアップも出来ません。 上記状態でMDBファイルをaccessで行なっているような。GUIで同じようなクエリを行い、現状より早く結果を手に入れる方法を見つけたいのです^^; やっぱりsqliteやMYSQLなどを使用してもそうはならないのでしょうか?^^;

関連するQ&A

  • ACCESSに変わるレポーティングツール探しています

    基幹システム(Oracle10g)のデータをもとに、ACCESSを使用していろいろな帳票や集計を行っているのですが、同じようなことを他の市販ツールを用いてできないかと考えており、いい製品があれば教えていただけないでしょうか。 ■現在の使用法(ACCESS) ・基幹データ(Oracle)をACCESSからODBCリンク接続して、リアルな情報を元に帳票(ACCESSレポート)出力やデータのクエリ集計出力(csv出力)を行っている。 ・帳票出力やデータ集計出力に必要な情報について、基幹データに存在しないものもあるので、それらについてはACCESSのフォームから直接データを入力しており、それらのデータをクエリにてマージして出力している。 ■市販ツールの要件 ・現在ACCESSで行っていることが実現可能 ・大量の基幹データでも高速処理が可能(現在処理性能が低くて困ってます) ・エンドユーザ(ACCESSは問題なく使用できるレベルの人)が、ある程度の説明を実施すれば帳票や集計クエリなどの開発を行うことが可能 ・帳票やデータ集計クエリのサーバーでの一元管理も可能

  • (ACCESS) サーバー・クライアント間の処理について

    ACCESSのインストールされていないPC(サーバー)上にmdbを置き、 ネットワークを介して各クライアント(ACCESSインストール済み) でmdbを開いて操作を行おうとしています。 その操作内容は、 mdbで作成されたデータを、 各クライアントのローカルドライブ上に置いてある 規定のEXCELファイルへコピーする というものです。 (コピーの際には、EXCELファイルのシートとセルを指定しています。) これが、OS:Windows2000/Office2003のPCでは難なく処理できるのですが、 OS:Windows2000/Office2000、OS:Windows2000/OfficeXP のPCではテーブルからクエリーでデータを作成後での処理(EXCELファイルへの書き込み)のところで『パスが見つかりません』のエラーが出てしまい、処理できません。 この現象はどうして起こってしまうのでしょうか? 対処法を教えていただけますか? ちなみに、OSにはSP4があたっています。

  • ACCESS

    ACCESSのデータをEXCEL上にリンクさせる方法を教えてください。 現在ACCESSで作成咲いたデータ(クエリ、デーブル)をEXCELにエクスポートして、編集後、Word文章に画像にて転記させていますが、この作業EXCEL上にリンクで反映させる方法を教えてください。またここでのACCESSとEXCELの関係は、他のACCESSとEXCELの関係で使用できれば幸いです。

  • ACCESSをMacで使用するには?

    ACCESSのmdb(データ、クエリ、フォーム)を、 Mac版のファイルメーカーで使用するには どうしたらよいのでしょうか?

  • Accessでデータ数が増えるとクエリで「無効な処理です。」エラー

    Access2000で選択クエリを作成していますが、データ数が少ない場合は問題ないのですが、データ数が数千件に増えるとデータシートビュー表示時に「無効な処理です。」とエラーが発生し、開けません。 クエリにはリンクテーブルを使用したクエリを使用しています。 また、mdbでは出来るのに、mdeにすると出来なくなったり、一度出来なくなるとデータ数が10件でも出来なくなったりと症状が不安定で現象が特定できません。 Accessの何かの制限かバグでしょうか? ご存知の方がいればお教え下さい。

  • Accessのデータ共有について

    現在社内の顧客管理システムをAccessにて構築しており、データテーブルファイル(mdb)をファイルサーバに置き、クライアントPCはフォームやクエリだけのmdbを使用してテーブルのリンクでデータ共有しています(Accessのデータ分割ツールにてテーブルとフォーム、クエリを分離しただけの状態で運用しています)。これまでは、この状態でも運用出来ていましたが、データ量が多くなるにつれ、段々動作が重くなってきた為、処理速度改善の為に、以下の二案を検討していますが、どちらの案が効果的なのでしょうか? 【案1】 クライアント用mdbファイルに同じテーブル構成の一時テーブルを作成し、mdbファイル起動時と、「更新」ボタンを別途作成し、「更新」ボタンが押下されたタイミングで、ファイルサーバのデータベースからADOにて一時テーブルに全データを読み込む。更新系の処理は、各クライアントの一時テーブルとファイルサーバのデータベースに対して行う。 【案2】 現状フォームの遷移については、 「DoCmd.OpenForm」関数の引数に検索条件を指定する方法で行っている為、この部分を ・ADOにてデータを取得  ↓ ・遷移後のフォームに値をセット と言った処理に変更する。 また、上記以外の方法で何か良い方法がありましたらご指摘頂ければと思いますので、よろしくお願いします。

  • Access2003でメモリ不足になります。

     Access2003をクライアントに、Oracle9iをDBサーバとして2層クライアントサーバシステムを会社で運用しています。しかし、Access2003のMDBを4つ同時に立ち上げて業務を行うためか、3時間でメモリ使用量が500MBになります。端末の物理メモリ容量は512MBのため、3時間で動作がとても緩慢になってしまいます。  MDBからDBサーバへのアクセス作業を行ううちに、メモリが完全に解放されずに残るケースがあり、それが蓄積されているようです。データベースへの参照(SELECT)よりも、書き込み処理(INSERT, UPDATE,DELETE)を行った後に使用メモリの蓄積が発生しやすいです。  また、フォームの開閉時よりも、別のMDBにフォーカスを移すと、メモリの解放が行われず、メモリの蓄積が発生しているようです。複数のMDBを起動している場合、一番最後のMDBを終了させるとメモリ使用量が元に戻ります。  背景としましては、最近、会社の基幹システムを刷新しました。刷新したといっても、ソースコードは変更せずに、Oracle7.2 Server/Access97で動作していたクライアントサーバシステムを、Oracle9.2 Server/Access2003に変更し、その変更に伴い動作がおかしくなる部分を修正しただけです。  MDBを複数立ち上げなくてはならないのは、とても基幹システムの規模が保守につぐ保守で大きくなってしまったため、MDBを機能単位で分割しているからです。  Access2003からOracle9.2へのアクセスはODBCを利用しています。クライアントのOSはWindows2000Professional sp4、サーバOSはWindowsServer2003、Oracle9.2はStandard Editionです。  Access97時代にはこれほどのメモリ使用量にはならず、現在はお昼休みに全てのMDBをいったん終了してから再度使用する運用でなんとか切り抜けています。  どなたか解決のヒントをご教授いただければ幸いです。

  • Accessでリンクテーブルのパス変更

    Accessで処理mdbとデータmdbに分けて、データmdbをリンクテーブルとして読み込んでいるのですが、データmdbのパスが変わったとき、処理mdbでデータmdbのパスを変更しなければなりません。 それが、面倒なので、手軽に変更できるように作っているのですが、「MSysObjects」の「Database」を書き換えるようと、VBAでADODB処理をしているのですが、アップデートすると「更新可能なクエリであることが必要です。」となり、書き換えることが出来ません。 strSQL = "SELECT * FROM MSysObjects;" ~ data.open strSQL ~ data("Database") = NewDatabase data.Update といった感じの処理です。因みに環境はAccess2000です。 何か、リンクテーブルを自動で書き換える簡単な方法は無いものでしょうか。

  • MS Accessが時間と共に重くなる

    MS Accessでシステムを構築したのですが、同じ画面を使い続けるとパフォーマンスが悪くなります。 <システムの構成> ファイルサーバにテーブルを持つmdbファイル(サーバmdb)を置き、 各PCに置かれた、フォーム、レポート、クエリ、VBAを持つmdb(クライアントmdb)から接続します。 各PCのクライアントmdbのフォームを何時間か使い続けていると、サーバからデータを取得するのが遅くなります。 (調べてみると並び替え(order by)が主な原因のようです。参考までに遅くなった時のデータ取得件数は2万件程でした。) ただし遅くなっても、1度フォームを閉じて開き直すと、同じデータでも再び速くなります。 どうすれば速くなるかは別途考えなければいけませんが、そもそも何が原因なのでしょうか。 ・朝(使い始め)は速い ・同じフォームをずっと使い続けるとデータ取得が遅くなる ・フォームを閉じて開き直すと再び速くなる メモリが関係してそうな気がしますが、MS Accessではこういうことは起こるもの(仕様)なのでしょうか。原因が知りたいのですが、何か情報はないでしょうか。

  • Microsoft Accessのデータが、別々のmdbファイルとして

    Microsoft Accessのデータが、別々のmdbファイルとして2つあります。Accessを持っていないので、OpenOfficeで開いています。このmdbファイルにあるテーブルをまとめてOpenOfficのBaseで開くことはできないでしょうか? 具体的には、Microsoft Accessのデータ、「aaa.mdb」「bbb.mdb」というファイルがあります。 「既存のデータベースに接続」>「Microsoft Access」で、「aaa.mdb」や「bbb.mdb」に、個別に接続して新規データベースを作成することはできたのですが、どちらのmdbファイル内にあるテーブルも参照してクエリを作りたいんです・・・。 また、過去に無理矢理「bbb.mdb」のテーブルをCtrl+c>Ctrl+vで「aaa.mdb」にコピー&ペーストしていたこともありましたが、今回はテーブルサイズが大きいせいか、エラーになります(メッセージ:エラーが発生しました。コピー処理を続行しますか)。 データベースに関する基礎知識が足りないので、そもそもそれができるかどうかも分かりません。 Webで検索しても参考になるサイトを見つけられませんでした。 よろしくお願いいたします。