1

実行中の2つのMSAccessアプリケーション間で効果的に通信するためのソリューションを探しています。

これまでに試したアプローチは、共通のリンクテーブルを使用し、通信にMSMQサービスを使用することです。どちらのアプローチも機能しますが、データまたはコマンドをあるアプリケーションから別のアプリケーションに「プッシュ」する方法はありません。MSAccessはVBAコードのマルチスレッド実行をサポートしていないため、パフォーマンスを低下させずにポーリングを実装することは非常に困難です。

同時に、VBAはaddressofオペレーター(バージョン2000以降)をサポートします。つまり、理論的にはVBAおよびMSAccessでコールバック関数を実装することもできます。しかし、これをプロセス間通信に使用する方法の例は見たことがありません。共有テーブルを常に監視せずに、あるMSAccessアプリケーションから別のアプリケーションに文字列を送信する方法の最小限の例をいただければ幸いです。

4

2 に答える 2

1

を使用して、実行中の別のデータベースからオブジェクトGetObject()を返すことができます。Access.Applicationアプリケーションオブジェクトを使用すると、必要になる可能性のあるほぼすべてのものにアクセスできます。フォームを開くための工夫された例を次に示します(ただし、Applicationオブジェクトを使用して他の無数のことを行うことができます)。

Sub TestInterop()
Const mdbPath As String = "C:\OtherApp.mdb"
Dim OtherApp As Access.Application

    Set OtherApp = GetObject(mdbPath)
    OtherApp.Visible = True
    OtherApp.DoCmd.OpenForm "Accounts"
End Sub

プログラムがまだ実行されていない場合、GetObject()呼び出しによってアプリケーションが起動します(Accessの複数のバージョンがインストールされている場合は、実行時にどのバージョンが実際に.mdbを開くかを知るのが難しいため、注意が必要です)。ただし、GetObject()アプリを起動する必要がある場合は、可視性をFalseに設定して起動するため、明示的にTrueに設定します。アプリがすでに実行されている場合、その可視性をTrueに設定しても効果はありません。

于 2012-02-24T15:47:20.737 に答える
0

それはワイルドなアイデアだと考えてください。しかし、すべてのテーブルをsqlexpressやsqlceに入れて、それらのテーブルのフロントエンドのように見せることができますか?

于 2012-02-24T09:37:41.867 に答える