0

私は、ODBC 接続に依存する Access 2007 アプリケーションを取り上げて、同じ ODBC 接続を使用する他の機関と共有する任務を負っています。うまく伝えられない場合はご容赦ください。私は開発者ではありませんが、ここまでたどり着いて以来、このプロジェクトを任されています。確かに今までなかったような…

まず、構造のレイアウトを示します。

  • 私は、ODBC を介して他の 31 の学校とデータベースを共有している大学で働いています。
  • すべてのキャンパスのデータベースを維持するシステム オフィスでは、ODBC 経由で接続する共通アクセス ポイント サーバー (CAP) の VPN を介して読み取り専用データにアクセスすることしか許可されていません。
  • CAP サーバー (ODBC にリンクできる唯一の場所) には Microsoft Office があり、インターネット アクセスはありません。
  • 各キャンパスには、accdb が CAP サーバーに配置されたときにテーブルを再リンクする必要がある固有の ODBC 接続があります。
  • Access を起動するたびに、ユーザーは ODBC 接続にもログインする必要があります。
  • CAP サーバーは、ネットワーク ドライブで読み書きできますが、その逆はできません。
  • CAP サーバーに他のソフトウェアをインストールすることはできませんが、ファイルを配置することはできます (これが accdb ファイルを配布できる理由です)。

Access アプリケーションは、ODBC から学生のコース アクティビティを取得し、ロジックを適用して、学生がすべてのコースに参加しなくなったかどうか、またその時期を判断します。現時点では、このロジックはマクロに関連付けられた一連のクエリです。次に、データベースは、学生のレポート (ODBC からの詳細情報を含む) を生成します。アクティブな追跡プロセスが実施されているため、変更が発生しない限りレポートからレコードを消去できます。これにより、レコードが変更とともに再表示されます。ODBC は読み取り専用であるため、データをローカルに保存する必要があります。VBA に基づくさまざまなフォームやレポートもあります。

目標は、ソフトウェアをパッケージ化し、他のすべてのキャンパスでの起動用に配布することです。これまでのところ、accdb ファイルを送信し、リンク テーブル マネージャーを起動するボタンを用意するだけで、小規模な配布を行ってきました。最初の配布の後、accdb にローカルに保存されたデータを保持する必要があるため、ソフトウェアの開発と更新の配布を続けます。

問題は、私が Access の経験と VBA についての十分な知識しか持っていないことです。

私の質問は単純かもしれませんし、複雑かもしれませんが、よくわかりません。基本的に、私が行ってきたこと以外に、より適切なアプローチがあるかどうかを知りたいです: accdb を送信し、ユーザーは持ち越す必要がある唯一のテーブルをコピーして貼り付けます。

明確化

配布されている各バージョンで accdb を実行可能ファイルに変換することは実用的でしょうか? ODBC が再接続を必要とし、ODBC がキャンパス間で一意である場合でも、これは可能ですか?

4

2 に答える 2

1

データベース内のテーブルをループして再接続する再リンク ボタンを追加できます。

dim tdf as tabledef
dim db as database
db = currentdb
db.tabledefs.refresh
for each tdf in db.tabledefs
    with tdf
        if len(.connect)>0 then ' this is a table that has a connect string
           if left$(.connect)="ODBC" then  ' this is an ODBC connection
                .connect = newconnectstring
                .refreshlink
           end if
        end if
    end with
next
于 2012-06-14T01:41:20.660 に答える
1

アップグレードのたびに、ある accdb ファイルから別の accdb ファイルにローカル データを格納するテーブルをコピー アンド ペーストすることをエンド ユーザーに要求すると、最終的にはデータの損失につながります。誰かがアップグレード中にこの手順を忘れてしまう可能性があります。

より信頼性の高い方法は、2 つ目の accdb データベースを作成することです。それを「YourAppName_data.accdb」などと呼び、フロントエンド クライアントと同じディレクトリまたは「Data」というサブディレクトリに配置します。「データ」accdb ファイルのテーブルをフロントエンド クライアントにリンクします。

既知の場所でデータ accdb ファイルを検索することにより、これらのテーブルを自動的に再リンクしようとするフロントエンド クライアントにスタートアップ コードを追加できます。プログラムがそれを見つけられない場合は、ユーザーにそれを見つけるように促すことができます。ちなみに、ODBC テーブルについても同様のことができるはずです。このステップの回答で ChrisPadgham が書いたものと同様のコードを使用できます。

この時点で行ったことは、アプリケーションのデータ (読み取り専用データと各学校が独自に維持できるようにする必要があるデータの両方) をアプリケーションのフロントエンド (フォーム、クエリ、ロジック、および報告)。

これにより、フロントエンド クライアントへの更新の配布が容易になります。エンド ユーザーは、フロントエンド クライアントを正しいディレクトリにコピーし、ディレクトリ内の既存のファイルを上書きして、プログラムを実行するだけです。

これは機能しますが、CAP サーバーにアクセスできる人なら誰でもサーバーからデータ ファイルを削除できる可能性があるため、まだそれほど堅牢ではありません。(各学校がこのマシンの定期的なバックアップを取り、データの損失を防ぐことを願っています。)

HansUp が示唆したように、Access accdb ファイルに保存されているデータを各場所の SQL Server データベースに移動することで、最終的にはより適切なサービスが提供される可能性があります。これにより、誰が情報にアクセスできるかをより適切に制御でき、保護が少し向上します。サーバーの実行中は、SQL Server データベース ファイルがマシン上で「ロック」されているため、データ。(これにより、誰かが誤ってファイルを削除するのを防ぐことができます)。SQL Server の欠点は、学習曲線があり、各学校の CAP サーバーまたは CAP サーバーがネットワーク上でアクセスできる他のマシンにインストールする必要があることです。これは、より良い情報を手に入れたら、時間をかけて取り組むべきものかもしれません.

于 2012-06-14T12:30:51.657 に答える