14

2 人のユーザーが、最初は MS Access で作成された同じデータベースを、1 つの MDB ファイルをめぐって競合することなく共有したいと考えていました。

単純な MS Access データベースから MySQL にテーブルを移動するには、Migration Toolkit (ちなみにこれはうまく機能します) を使用し、ODBC 経由でそれらのテーブルにリンクするように Access をセットアップしました。

これまでのところ、次のことに遭遇しました。

  • 主キーがなければ、テーブルの行を挿入/更新/削除することはできません (驚くことではありません)。
  • MS Access の AutoNumber フィールドは主キーである必要があります。そうしないと、MySQL の整数列になってしまいます (ナッチ、なぜ PK ではないのでしょうか?)
  • テーブルは MySQL の InnoDB テーブル タイプに移行されましたが、アクセス関係は MySQL の外部キー制約にはなりませんでした。

データベースが使用されると、他の問題は発生する可能性がありますか? 特に、両方のユーザーが同じテーブルで作業している場合は?

4

7 に答える 7

16

このトピックがあまり新鮮ではないことはわかっていますが、追加の説明がいくつかあります。

特に大規模なマルチユーザー データベースで MS Access を効果的に使用するには、次の手順を実行してください。

  • MDB をフロントエンド アプリケーションとバックエンド (データのみ) ファイルに分割すると、2 つの別個の MDB ファイルが作成されます。

  • データと構造を含むすべてのテーブルを外部データベースに移行します。MySQL (非常にうまく機能し、データベース サイズの制限はありません。MS テクノロジではないため、より多くのスキルが必要ですが、多くの場合に適しています。さらに、より多くの RAM と追加の CPU を使用してバックエンドをスケーリングできるため、すべてのニーズとハードウェア機能によって異なります); Oracle (十分な資金または何らかの企業ライセンスがある場合) または Oracle 10g XE (これが問題にならない場合、データベースのサイズは最大 4 GB に制限されており、常に 1 GB の RAM と 1 CPU を使用します)、 MS SQL Server 2008 (すべての場合において、MS Access フロントエンドと MS SQL Server バックエンドを使用するのは優れたペアですが、ライセンス料を支払う必要があります! - 利点は次のとおりです。緊密な統合、両方のテクノロジが同じベンダーから提供されていること。

  • MS Access フロントエンドをバックエンド データベースに再リンクします。バックエンドに MS SQL Server を選択した場合は、MS Access からウィザードを使用するのと同じくらい簡単です。MySQL の場合 - ODBC ドライバーを使用する必要があります (これはシンプルで非常にうまく機能します)。Oracle の場合 - Microsoft の ODBC ドライバーは使用しないでください。Oracle からのこれらは、はるかに優れた作業を行います (Oracle ODBC および MS Oracle ODBC ドライバーを介して、MS Access から Oracle への SQL クエリの実行に必要な時間を比較できます)。この時点で、堅実なデータベース バックエンドと完全に機能する MS Access フロントエンド - MDB ファイルが得られます。

  • MDB フロントエンドを MDE にコンパイルします。これにより、速度が大幅に向上します。さらに、これは MS Access アプリケーションをエンド ユーザーに配布する唯一の合理的な形式です。

  • 日常業務用 - MS Access フロントエンドで MDE ファイルを使用します。さらにMS Accessのフロントエンド開発には、MDBファイルを使用してください。

  • MS Access のフロントエンド機能を拡張するために、不適切に記述された ActiveX コンポーネントを使用しないでください。自分で書くか、適切なものを購入することをお勧めします。

  • MS Access には多くの問題があるという神話を信じないでください。これは、多くの場合に役立つ優れた製品です。問題は、多くの人がおもちゃだとか、MS Access は一般的に単純だと思い込んでいることです。通常、彼らは自分自身と知識と経験の不足によって多くのエラーと問題を生成します。MS Access で成功するには、このツールを理解することが重要です。これは、他のテクノロジーと同様に、同じルールです。

私は非常に高度な MS Access を MySQL バックエンドの前に使用しており、非常に満足しています (このアプリケーションを維持している開発者として)。ユーザーは、GUI (フロントエンド) と速度 (MySQL) に非常に満足しており、レコードのロックやデータベースのパフォーマンスに問題がないことにも満足しています。

さらに、優れた実践や他の人々の経験について多くのことを読むことが重要です。多くの場合、MS Access は優れたソリューションであると言えます。私は、プライベートな MS Access データベース (MDB ファイル) の形で実験として開始され、その後、分割された MS Access (MDE - フロントエンド、MDB - バックエンド)、そして最終的に: MS Access フロントエンドに進化した、多くの専用のカスタムメイドのシステムを知っています。 (MDE) と「本格的な」データベース バックエンド (主に MS SQL Server と MySQL)。また、MS Access ソリューションを作業プロトタイプとしていつでも使用できることも重要です。データベース (MySQL - と仮定しましょう) でバックエンドを使用する準備ができており、フロントエンドを選択したテクノロジ (Web ソリューション? デスクトップ C# など) に書き換えることができます。アプリケーション - あなたが必要とするもの!)。

MS Access の使用を検討している皆さんの助けになれば幸いです。

よろしく、ワウルジン http://dcserwis.pl

于 2009-09-12T13:27:38.617 に答える
15

同様に機能するアプリケーションがありました。MS Access フロントエンドから MySQL バックエンドへ。代わりにWin32フロントエンドを書くことになったのは非常に苦痛でした。頭のてっぺんから、次の問題に遭遇しました。

  • ODBC リンクの開発はずっと前に終了したようです。さまざまなバージョンが浮かんでいます --- 非常に紛らわしいです。ODBC リンクは Unicode/UTF8 をサポートしていません。他にも問題があったことを覚えています (ただし、慎重に構成することで解決できる問題もあります)。
  • db スキーマを手動で調整して、MS Access と互換性を持たせたいと思うかもしれません。必要な代理キー (つまり、int の主キー) については既にご存知ですね :-)
  • MySQL データベースのより高度な SQL 操作を行うには、パススルー クエリを使用する必要がある場合があることに注意してください。
  • 大量の VBA を使用すると、フロントエンド ファイルが破損する傾向があるため、注意してください。データベースを定期的に圧縮し (メイン メニューの [ツール | データベース ユーティリティ | 圧縮と復元] などを使用します --- 私はオランダ語版を使用しています)、多くのバックアップを作成する必要があります。
  • アクセスは、大量のネットワーク トラフィックを引き起こす傾向があります。のように、本当に巨大なロット。私はそれに対する解決策を見つけることができませんでした。それを監視したい場合は、ネットワークモニターを使用することをお勧めします!
  • Access は、ブール値を 0/-1 として格納することを主張します。私見、0/+1 の方が理にかなっており、MySQL でのデフォルトの方法でもあると思います。大きな問題ではありませんが、チェックボックスが機能しない場合は、これを確認する必要があります。

考えられる代替手段の 1 つは、バックエンド (データを含む) を共有ドライブに配置することです。これはヘルプにもよく文書化されていることを覚えています。フロントエンドとバックエンドへの分割に関する一般的なアドバイスと、起動時にバックエンドに自動的に再接続するコードを確認することをお勧めします。サンプル コードをお送りするか、ここに投稿することもできます。

それ以外の場合は、MS SQL も検討することをお勧めします。私はそれについての経験はありませんが、MS Access と一緒に使う方がはるかにうまく機能すると思います!

于 2008-08-12T20:02:41.557 に答える
3

ガレス・シンプソンは次のように述べています。

ユーザーが 2 人だけの場合、.mdb を共有ドライブに置くと、Access は問題なく動作するはずです。

いいえ。各ユーザーがフロント エンドの専用コピーを持ってはならないマルチユーザー Access アプリケーションはありません。つまり、各ユーザーのワークステーションに MDB が必要です。なんで?フロント エンドのオブジェクトがうまく共有されないためです (バック エンドとして MySQL を使用するこのシナリオではそれらのいずれもありませんが、Jet データ テーブルほどではありません)。

ギャレス・シンプソンは次のように続けています。

Access の推奨される最大同時ユーザー数は 5 だと思いますが、時々、これを超えて動かなくなったことはありません。

いいえ、これは完全に間違っています。MDB のユーザーの理論上の制限は 255 です。もちろん、これは現実的ではありません。約 20 人のユーザーに達すると、適切に動作するように Access アプリを注意深くプログラムする必要があるためです (ただし、Access-to- Jet アプリは、サーバー データベース アプリケーションを効率的にするために行うことと同じ種類のものです (たとえば、使用可能な最小のデータ セットを取得するなど)。

この場合、各ユーザーはフロントエンド MDB の個別のコピーを持つ必要があるため、Access/Jet のマルチユーザー制限はまったく関係ありません。

于 2008-09-15T23:06:32.693 に答える
2

各レコードにいくつかのタイプの時刻/日付スタンプを付けることを忘れないでください。ms accessは、「別のユーザーがレコードを変更または削除した」と見なし、変更を許可しない場合があります。私はこれを難しい方法で見つけました。

于 2009-05-15T04:34:23.507 に答える
2

これがあなたの質問に直接答えるものではないことは承知していますが、Access 用の SQL Server 2005 移行ツールを調べる価値があるかもしれません。このツールを使用したことはありませんが、SQL Server 2005 Express Edition で使用して、MySQL で発生したのと同じ問題があるかどうかを確認する価値があるかもしれません。

于 2008-08-08T12:35:16.377 に答える
1

一般的に、それは依存します:)

アプリケーション側がフォームを介してデータを更新しているときは、あまり問題はありませんでした。同じ行が複数のユーザーによって更新された場合、警告/エラーが発生する可能性があります。しかし、Access はライブ レコード セットを常に更新しているようです。

アリスがすでにレコード 365 で作業していて、ボブがそれを更新し、アリスが自分の変更でそれを更新しようとすると、問題が発生する可能性があります。思い出すと、Alice には不可解なエラー メッセージが表示されます。これらのエラーをトラップして、少なくともわかりやすいエラー メッセージを表示すると、ユーザーにとっては簡単になります。

RecordSets を使用して VB コードのレコードを編集していたとき、特にフォーム上の同じデータの編集と組み合わせたときに、さらに多くの問題が発生しました。これは必ずしもマルチ ユーザーの問題ではありません。ただし、1 人のユーザーが同じデータに複数の接続を持っているため、状況はほぼ同じです。

于 2008-08-12T14:47:16.110 に答える
0

ユーザーが2人だけの場合は、共有ドライブに.mdbを配置すれば、Accessは問題なく動作するはずです。

問題になると思い込むのではなく、最初に試してみましたか。

Accessの推奨最大同時ユーザー数は5人だと思いますが、ときどきこれを超えて行き詰まることはありません。

一方、私はかつて、シングルユーザー環境(私)でMySQLのフロントエンドとしてAccessを使用していました。それは非常に不快な経験でした、私はそれが2人のユーザーでより良くなるとは想像できません。

于 2008-08-11T16:01:53.103 に答える