1

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

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

同时,VBA 确实支持addressof操作符(从 2000 版开始),这意味着我们理论上也可以在 VBA 和 MS Access 中实现回调函数。但是我从未见过任何示例如何将其用于进程间通信,并且希望有任何最小的示例如何在不一直监视共享表的情况下将字符串从一个 MS Access 应用程序发送到另一个应用程序。

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。如果应用程序已经在运行,将其 Visibility 设置为 True 将无效。

于 2012-02-24T15:47:20.737 回答
0

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

于 2012-02-24T09:37:41.867 回答