是否可以从 MS Access 数据库文件(不是 Access 应用程序)以某种方式调用 C# 代码?
我的场景是当某个表中发生某些事情时,我必须调用 C# 代码(例如 Web 服务)。
我读到 MS Access 不支持触发器,但它有过程或称为数据宏的东西。
我还不知道 Access 版本。
是否可以从 MS Access 数据库文件(不是 Access 应用程序)以某种方式调用 C# 代码?
我的场景是当某个表中发生某些事情时,我必须调用 C# 代码(例如 Web 服务)。
我读到 MS Access 不支持触发器,但它有过程或称为数据宏的东西。
我还不知道 Access 版本。
数据宏是在 MS Access 2010 中引入的,是的,您可以从 VBA 代码调用用 C# 创建的 dll 函数。数据宏在 Access 中调用 VBA 函数,VBA 调用 C# dll 函数或使用 shell 命令运行外部应用程序。
更新
不幸的是,如果使用非 Access 前端,则不可能从 DataMacro 运行任何 VBA 代码,Access 需要代码执行环境,如果非 Access 应用程序通过 ODBC 更改表,则环境不存在,并且执行将失败。
根据 Sergey 的回答,Access 中的事件驱动数据宏只能在以下情况下调用 VBA 函数
因此,例如,如果更改前数据宏调用以下函数来检索当前用户的名称(因此它可以将名称插入该表中的字段,例如 [CreatedBy] 或 [UpdatedBy])
Public Function GetUserName()
Dim wshNet As Object ' WshNetwork
Set wshNet = CreateObject("WScript.Network") ' New WshNetwork
GetUserName = wshNet.UserName
Set wshNet = Nothing
End Function
那么以下条件适用:
从非 Access 应用程序更新表
非 Access 应用程序(例如,使用 System.Data.OleDb 或 System.Data.Odbc 的 .NET 应用程序)根本无法更新表。它会抛出一个错误说
函数“GetUserName”对数据宏中使用的表达式无效。
从 Access 前端更新链接表
如果该函数的 VBA 代码可用于前端文件(.accdb、.accde 等),Access 前端可以更新表。前端文件不能直接运行存储在后端文件(带有数据宏的表所在的位置)中的 VBA 代码。我们需要要么