是否可以从MS Access数据库文件(而不是Access应用程序)以某种方式调用C#代码?
我的方案是在某些表中发生某些事情时我必须调用C#代码(例如Web服务)。
我读过MS Access不支持触发器,但它有程序或称为数据宏的东西。
我还不知道Access版本。
答案 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函数因此,例如,如果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代码(具有数据宏的表所在的位置)。我们需要