我正在寻找在两个正在运行的MS Access应用程序之间进行有效通信的解决方案。
我到目前为止尝试的方法是使用公共链接表并使用MSMQ服务进行通信。这两种方法都有效,但没有办法将数据或命令从一个应用程序“推送”到另一个应用程序,并且由于MS Access不支持VBA代码的多线程执行,因此在没有性能缺点的情况下实现轮询非常困难。
同时,VBA确实支持addressof
运算符(来自版本2000),这意味着我们理论上也可以在VBA和MS Access中实现回调函数。但我从未见过如何将其用于进程间通信的任何示例,并且非常感谢如何在不监视共享表的情况下将字符串从一个MS Access应用程序发送到另一个应用程序。
答案 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并使其看起来像这些表的前端?