从Access事件驱动的数据宏调用C#代码?

时间:2016-09-16 07:10:37

标签: database web-services ms-access ms-access-data-macro

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

我的方案是在某些表中发生某些事情时我必须调用C#代码(例如Web服务)。

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

我还不知道Access版本。

2 个答案:

答案 0 :(得分:3)

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

<强>更新

不幸的是,如果使用非Access前端,则无法从DataMacro运行任何VBA代码,如果通过非访问应用程序通过ODBC更改表,则环境不存在,以及执行时,Access需要环境进行代码执行将失败。

答案 1 :(得分:2)

根据谢尔盖的回答,Access中的事件驱动数据宏只能在

时调用VBA函数
  1. 正在从Microsoft Access本身(MSACCESS.EXE)和
  2. 更新该表
  3. VBA代码可用于调用表更新的Access数据库文件。
  4. 因此,例如,如果Before Change数据宏调用以下函数来检索当前用户的名称(因此它可以将名称插入该表中的字段,例如[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前端更新链接表

    Access前端可以更新表,前提是该函数的VBA代码可用于前端文件(.accdb,.accde等)。前端文件无法直接运行存储在后端文件中的VBA代码(具有数据宏的表所在的位置)。我们需要

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

    Reference.png