2

是否可以从 MS Access 数据库文件(不是 Access 应用程序)以某种方式调用 C# 代码?

我的场景是当某个表中发生某些事情时,我必须调用 C# 代码(例如 Web 服务)。

我读到 MS Access 不支持触​​发器,但它有过程或称为数据宏的东西。

我还不知道 Access 版本。

4

2 回答 2

3

数据宏是在 MS Access 2010 中引入的,是的,您可以从 VBA 代码调用用 C# 创建的 dll 函数。数据宏在 Access 中调用 VBA 函数,VBA 调用 C# dll 函数或使用 shell 命令运行外部应用程序。

更新

不幸的是,如果使用非 Access 前端,则不可能从 DataMacro 运行任何 VBA 代码,Access 需要代码执行环境,如果非 Access 应用程序通过 ODBC 更改表,则环境不存在,并且执行将失败。

于 2016-09-16T08:15:11.580 回答
2

根据 Sergey 的回答,Access 中的事件驱动数据宏只能在以下情况下调用 VBA 函数

  1. 该表正在从 Microsoft Access 本身 (MSACCESS.EXE) 更新,并且
  2. VBA 代码可用于调用表更新的 Access 数据库文件。

因此,例如,如果更改前数据宏调用以下函数来检索当前用户的名称(因此它可以将名称插入该表中的字段,例如 [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 代码。我们需要要么

  • 将 VBA 模块从后端文件复制到前端文件,或
  • 在前端文件中使用 VBA 引用来包含来自后端的代码:

参考资料.png

于 2016-09-18T13:48:24.810 回答