两个MS Access应用程序之间的通信?

时间:2012-02-24 09:24:40

标签: ms-access communication inter-process-communicat

我正在寻找在两个正在运行的MS Access应用程序之间进行有效通信的解决方案。

我到目前为止尝试的方法是使用公共链接表并使用MSMQ服务进行通信。这两种方法都有效,但没有办法将数据或命令从一个应用程序“推送”到另一个应用程序,并且由于MS Access不支持VBA代码的多线程执行,因此在没有性能缺点的情况下实现轮询非常困难。

同时,VBA确实支持addressof运算符(来自版本2000),这意味着我们理论上也可以在VBA和MS Access中实现回调函数。但我从未见过如何将其用于进程间通信的任何示例,并且非常感谢如何在不监视共享表的情况下将字符串从一个MS Access应用程序发送到另一个应用程序。

2 个答案:

答案 0 :(得分: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”将无效。

答案 1 :(得分:0)

认为这是一个疯狂的想法,但可能将所有表放入sql express和/或sql ce并使其看起来像这些表的前端?