开箱即用的 Ms Access 数据宏调用 VBA 函数

Ms Access Data Macro Call VBA Function Out of Box

我正在为我的 Access table 的 After Insert 事件之一使用 Data Macro。在这个数据宏中,我使用 SetLocalVar 来调用我在 vba 中编写的函数之一,以将相同的插入记录集插入到我的 SQL 数据库中。

当我在 Access 中输入数据时它起作用,但是如果我从我的一个基于 C# 的应用程序插入一条记录,插入后事件不会调用我的 Access 函数,因为我没有打开我的 Access 应用程序的实例。

可能有一种方法,这个 After Insert 事件可以以某种方式触发我的 vba 函数,即使记录是从 Access 外部插入的?

数据宏位于“ace”数据库引擎中,因此与 SQL 服务器中的存储过程非常相似。但是,如果您调用 + 使用 VBA 例程(这是合法的),那么您将引入 VBA 依赖项并且该设置仅适用于 Access。因此,如果您通过 ODBC 或任何其他方式从 FoxPro 或什至 .net 打开 table,Access 存储过程仍将 运行,但 VBA 依赖项将不起作用并且确实如此需要访问。所以你可以随意安装数据库引擎(以前叫JET,现在叫ACE)。像过去几年那样安装数据引擎不会安装 VBA,数据库引擎也不使用或依赖 VBA。

所以数据宏和数据触发代码可以从 c# 开始工作。但是,调用 VBA 代码需要安装 Access(安装 VBA)。更重要的是,当您有此类触发器调用时 VB代码是您必须仅从 Access 更新数据的那一刻。

因此ACE中可用的循环和存储过程甚至可以调用其他存储过程,只要它们只用DATA宏语言编写即可。

拥有这样的 table 触发器调用 VBA 代码因此意味着除了安装数据库引擎之外,您还需要依赖 VBA。因此,虽然您可以调用 VB 代码,但这种设置仅在使用 MS-Access 作为客户端程序时有效。

因此,如果您希望从 C# 或其他外部语言进行更新,则必须将 VBA 代码重写为数据宏代码。

您确实拥有“大多数”VBA 函数,但您没有记录集(每个都使用)。

编辑: 我还应该指出,由于在从 c# 使用 ACE 时不能调用 VBA,另一条路是让数据宏在链接的 table 到 SQL 服务器上运行,但是数据宏不能对链接的(外部)tables 进行操作。因此,如果数据是从 Access 更新的,那么您的设置肯定可以正常工作。但是,使用 FoxPro、VB、vb.net、c# 等。确实允许 运行 数据宏代码,在这些情况下,您不能让数据宏代码调用 VBA 或任何其他类型的外部代码 - 并且需要外部代码来更新 SQL 服务器,因为数据宏仅在本地本机 tables 上运行(对于 SQL 触发器也非常相同)