質問

私は、約 5 人のユーザー グループでフロントエンド/バックエンドの分割構成としてセットアップされた MS Access 2003 アプリケーションを作成しました。フロントエンド .mdb はネットワーク ファイル サーバー上にあり、すべてのクエリ、フォーム、レポート、VBA コードに加えて、バックエンド .mdb 内のすべてのテーブルへのリンクと、AS/ などの ODBC データ ソースへのリンクが含まれています。 400。バックエンドは同じネットワーク ファイル サーバー上にあり、テーブル データのみが含まれています。

これは、私が「稼働」し、少数のユーザーが機能強化のリクエストやバグレポートなどを思いつき始めるまではうまく機能していました。私は、別のネットワーク フォルダー (同じバックエンド .mdb にリンクされている) にあるフロントエンド .mdb の独自のコピーで開発/テストし、完成したファイルを「come- and-get-it」フォルダーに移動し、ユーザーに警告すると、ユーザーは新しいフロントエンド ファイルをネットワーク上の自分のフォルダーにコピー/ペーストします。このようにして、各ユーザーは、全員を一度に起動することなく、「停止点」に到達したときにフロントエンドを更新できます。

現在開発をしていると、Access が非常に遅くなることがあります。たとえば、フォームを開発しているときにプロパティ ボックスのドロップダウンをクリックしようとすると、ドロップダウン矢印は押し込まれますが、オプションのリストが表示されるまでに数秒かかります。または、フォーム上のコントロールを選択して移動する際に大量の遅延が発生します。またはキーボードの遅延が多い。

それ以外の場合は、まったく遅れがありません。

私が他のユーザーと同じバックエンドにリンクしているためではないかと思っています。クエリ、フォーム、レポートなどを設定するために合理的な努力をしました。必要に応じて、必要に応じて最小限のレコード ロックを使用します。しかし、何かを見落としているか、対処する必要がある他のパフォーマンスの問題があるのか​​もしれません。

しかし、独自の開発バックエンド .mdb をセットアップして、他のユーザーと同じライブ データではなく、「安全な」データでコードをテストできる、もっと良い方法はないかと考えています。 。おそらく最悪の場合、データが破損するのは時間の問題だと思います。

もちろん、別のバックエンド .mdb をセットアップし、リンク テーブル マネージャーを使用してフロントエンドのテーブル リンクを毎回手動で再構成することもできます。しかし、それよりもエレガントな解決策があることを願っています。

そして、このマルチユーザーの分割データベース構成で考慮すべき他のパフォーマンスの問題があるかどうか疑問に思っています。

編集:私は MS Access (MS-SQL やその他の「本物の」バックエンドではありません) にこだわっていることを付け加えるべきでした。詳細については、この投稿に対する私のコメントを参照してください。

役に立ちましたか?

解決

すべてのユーザーの共有フロントエンド、間違った設定をします。

各ユーザーは個別のコピーをフロントです。共有フロントエンドスーパーバイザーはあなたが頻繁に破損の共通フロントとともに奇汚職の形式とモジュールの目の前です。

では明らかでなおかしてしまう可能性もあります。開発のコピーをフロントエンドのエンドユーザーとのインターフェから、使用開始とA2000、禁止めの"積層保存モデル"が全体のVBAプロジェクトに格納された単一のBLOB分野のシングル記録のシステム。

ないんですけをお考えの問題のご利用にあたり生じる生産データものとなっていない可能性が良いアイデアの開発に対し生産データ、その他い).いると私は思っている.このようコーディングを行が維持のお客様にはフロント終了コード。

  1. offにしてコンパイルしながVBEます。

  2. 必ず必要なオプション顕在化する。

  3. コードのコンパイルが頻繁に、数行のコードにしてもよいことや、追加のコンパイルボタンをVBEツールバーがないので、またの追加を呼び出しスタックのボタン).

  4. 定期的に見直しを行い、バックアップのお客様にはフロントエンジニアリング、逆アセンブルおよび再コンパイルのコードです。このよ立ち上げからアクセスしてください/ンジニアリング、逆アセンブルスイッチ、お客様にはフロント、閉館のアクセスの窓を開き、フロントの末尾にアクセスにSHIFTキーが押さをバイパスの起動時にコード、成形のdecompiled前にSHIFTキーが押され、その編纂プロジェクト全体および成形ます。この前、主要なコードです。

どうな思想を貫いています。

  1. だけでWindowsサーバーです。Linuxサーバにアクセスの過去についての問題を過去のもの人々を誓うよ"と言いなが大幅に高速Windowsサーバーなど、歴史的にはNovellサーバーが必要となってい設定を調整するジェットファイルを確実に編集します。また一部の設定のようにOPLOCKS)調整できるWindowsサーバーになります。

  2. ス、ジェット多国間開発銀行株式の短います。\サーバー\Data\MyProject\MyReallyLongFolderName\アクセス\データベース\する遅いデータを読み取り、サーバはデータベースです。この本当に大きな違いがある。

  3. リンクテーブル店舗メタデータとなりました。があり簡単な手順で、一つ抜本的なきめいいじゃないか初書きぐらい。まず、コンパクトの、そしてコンパクトのフロントです。それが簡単です。がない、完全に削除のリンクを再現してゼロから立ち上げました。

  4. いる配信MDEるエンドユーザーの代わりに現場の意見を反映し、uncompileる、現場の意見を反映しております。

  5. Tony ToewsのFAQ その他の一般化します。

他のヒント

1) コードから Access テーブルを再リンクするhttp://www.mvps.org/access/tables/tbl0009.htm

新しい MDE をユーザーに公開する準備ができたら、テーブルを再リンクし、MDE を作成し、MDE をサーバーにコピーします。

2) 私は特に無料の Auto FE Updater ユーティリティを作成しました。これにより、FE MDE に何度でも変更を加えることができ、次回誰かがアプリを実行するときに最新バージョンが取り込まれることを確信できます。エラーまたは Auto FE Updater ユーティリティの詳細については、次の場所にある無料の Auto FE Updater ユーティリティを参照してください。 http://www.granite.ab.ca/access/autofe.htm 私の Web サイトで、各 PC の FE を最新の状態に保ちます。

3) 現在、クライアントの現場で作業しているとき、全員がシステムを離れている時間外にテーブル構造を更新します。「方法」を参照してください:Access 2000 でのユーザーのアイドル時間または非アクティブ状態の検出 (Q210297) http://support.microsoft.com/?kbid=210297 ACC:ユーザーのアイドル時間または非アクティブ状態を検出する方法 (Q128814) http://support.microsoft.com/?kbid=128814

ただし、タイマー イベントで実行されるコードはプログラマに対して無効にする必要があることがわかりました。そうしないと、コードを編集しているときに奇妙なことが起こり始めます。

また、印刷プレビューでは、ユーザーがメニュー項目を実行してレポートを Excel などにエクスポートできないことがありました。そのため、プレビューされたレポートを右クリックして、レポートに何らかの内部フォーカスを戻し、レポートをエクスポートできるようにする必要がありました。これは、タイマーを 5 分に延長することによっても役に立ちました。

タイマーを 5 分に延長することのマイナス面は、人が 1 日のかなりの時間同じフォームと同じコントロールを維持している場合、つまり誰かが同じ質問をしている場合、そのルーチンが実際に何かを行ったことに気づかないことです。プログラム内で何かを行うたびにこのタイマーをリセットするロジックをいつか組み込む予定です。

4) スキーマを更新するためのスクリプトなどについてコメントしている他の人については、「Compare'Em」を参照してください。 http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm. 。癖はありますが、テーブル、フィールド、インデックス、リレーションシップを更新するための VBA コードを作成します。

PRODにDEVからの切り替え時に新しいターゲットに、あなたのテーブルを

を使用するVBAを解除すると再リンクします。私は構文を覚えているのは何年になっています - 。私はただの関数を書くのは簡単だった知っている。

またはODBC経由でMS-アクセス、またはクライアントMDBの外に住んでいるいくつかの他のデータ接続に話をするMS-Accessを使用します。

すべてのファイルベースのデータベースと同じように、あなたは最終的にピーク使用の問題に実行されます。

か、2と30の間のどこかの小さな魔法の数の上に行くときます。

また、アクセスが頻繁に破損する傾向があるので、バックアップ、コンパクトおよび修理が頻繁に行われる必要があります。サードパーティ製のツールは、このタスクを自動化するために存在するのに使用されます。

限りのパフォーマンスが行くように、データはクライアント側に処理されているので、あなたは、ワイヤ上で起こっているどのくらいのデータを見るためにnetmeterのようなものを使用することをお勧めします。インデックスとテーブルスキャンが同様にベースDBSをファイルに適用回避について同じ原理ます。

多くの良いご提案います。たった2millicentsにつながるのです。私のバックエンドのデータをサーバにアクセスを通じてドライブマッピングしました。私の場合は、Yます。生産ユーザーにマッピングによりログインを利用して、スクリプトをアクティブディレクトリです。これにより,以下のようなシナリオも簡単に行うことができるバッチファイル:

  • の開発に対し現地のコンピュータをすることによってsubstコマンドのバッチファイル
  • 実行した報告書前連泊データによる指Yへのバックアップサーバー(読み取りのみ)
  • 実行した報告書月末データによる指摘を右にディレクトリ
  • 試験専門のシナリオを特別ディレクトリ

私の環境で平均5の同時のユーザー、1000の数は10,000です。 腐敗は起こるもので、大丈夫です。一度だけではここ数年でま護の前日にリンクを表示しております。を使用していまSQL Serverのための当社の高い量ものでないとして便利な開発に対応するかのようにどのような人が住んでいますかSQL adminます。

また、<のhref = "https://stackoverflow.com/questions/698839/how-to-extract-the-schema-of-an-access-mdb-database/700852に答えのいくつかを見つけるかもしれません#700852" >この質問は(アクセスからのスキーマを抽出する方法)としても有用であることがを。あなたは簡単に「クリーン」なテスト環境を構築することができることだけでなく、スキーマにソースコントロールを使用する機能のような新しいオプションの全範囲を得る提案された技術の一つを使用してスキーマを抽出したら。

編集コメントに応答します: そこには、ネイティブ形式だでAccessデータベースを制御調達する簡単な方法はませんが、スキーマファイルは、他のどのような単なるテキストファイルです。したがって、あなたは簡単にバージョン管理/ロールバックのためのお好みのソース管理ソフトウェアの内外にそれらを確認することができます。

やコース、それはあなたがスキーマから再構築し、データベースに設定する一連のスクリプトを持つに依存しています。あなたがやると、それはあなたがスキーマのいずれかの以前にコミットさバージョンからのテスト環境を構築することができ、別の場所でそれを再構築オプション/代替バージョンを作成するために、通常は些細なのです。私はそれが少し明確に願っています!

あなたがクライアントに新しいFEを離すと自動的にバックエンドのMDBスキーマを更新したい場合は、Compare'Em <のhref = "http://home.gci.net/~mike-noel/CompareEM-を参照してくださいLITE / CompareEM.htm」のrel = "nofollowをnoreferrer"> http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm には喜んでVBAコードを生成しますMDBを再作成する必要があります。それとも、既存のBE MDBのバージョンアップを行うことができますように、2つのMDBの違いを作成するためのコード。それは少し風変わりですが、動作します。

私はそれをすべての時間を使用します。

あなたは、データの共有のmdbファイルが堅牢なソリューションではないことを理解する必要があります。マイクロソフトは、SQL Serverや他のいくつかのサーバーベースのデータベースは、はるかに良い解決策になるとあなたは同じアクセスフロントエンドを使用することができるようになることをお勧め。移行ウィザードを使用すると、その道を行くことを望んでいた場合は、切り替えを行うことに役立つだろう。

別の用途が指摘したように、

、破損が発生します。それはない場合は、単にどのくらいの頻度の問題である。

は、サーバーに内のデータとのmdbファイルは、単にその、ファイルであることを理解する必要があり、パフォーマンス上の問題を理解するために。何のコードがサーバー上で実行されていないので、サーバーは、それは単に人々の束を読み、simultaniously書き込みをしようとしているファイルがあることを知っているトランザクション、レコードロックなどを理解していない。

などSQL ServerやOracle、DB2などのデータベースシステムでは。 MySQLのデータベース等のプログラムがサーバー上で動作し、データベースファイルにアクセスして、単一のプログラムのようにサーバに見えます。これは、レコードロック、トランザクション、同時実行、ログ、データのバックアップ/リカバリー、もう1つは、データベースから望んでいる他のすべての素敵なものを扱うデータベースプログラム(サーバー上で実行されているが)である。

サーバー上で実行するように設計されたデータベースプログラムがそれをすると、それだけでは、それははるかに良いとそれを行うことができますように設計されているので、よりefficentlyアクセスのようなプログラムは、共有ファイル(MDB)を読み書きすることをます。

ライブデータに対して開発のための2つのルールがあります。

  

最初のルールがあります。 。 。開発したことがありません   ライブデータに対して。ない、これまでます。

     

二番目のルールです。 。 .never開発   ライブデータに対して。ない、これまでます。

あなたが新しいバージョンを展開しているときにあなたのリンクを変更するマクロを書くことができるように、

あなたはプログラム的に、リンクテーブルのバインディングを変更することができます。

それはMS Accessのだからアプリケーションが遅い、それは(多くは任意の数> 1である)多くの同時ユーザーが好きではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top