更新一行后的 MS Access 运行代码
Posted
技术标签:
【中文标题】更新一行后的 MS Access 运行代码【英文标题】:MS Access run code after a row is updated 【发布时间】:2016-05-17 18:25:09 【问题描述】:我是 MS Access 的新手,请原谅我提出这个简单的问题,但我对当前的问题感到非常困惑。
所以我想在表接收到其中一个字段的更新后运行 VBA 函数。我所做的是:
在CREATE->Macro下创建一个名为Macro_update的宏,动作为RunCode,它的参数是我想运行的VBA函数。该函数没有错误。
选择我的表格,在表格->更新后,我写了
IF [Old].[status]=0 And [status]=1 THEN
RunDataMacro
MacroName Macro_update
但是在我更新表中的状态字段后,什么也没发生...我怀疑在第 2 步中我的操作是 RunDataMacro,但我实际上正在运行一个宏(有区别吗?)...任何帮助表示赞赏!
【问题讨论】:
表中的字段是如何更新的?通过表单还是通过编辑表格字段本身? 现在只是手动,因为我正在测试它。以后会通过网络服务更新。 我会说 MS Access 的数据事件宏可能不支持运行 VBA 函数。我建议用宏命令替换函数调用来实现函数的作用。 经过大量的试验和错误 - 并且没有让宏工作 - 我偶然发现了一种调试过程的方法。请参阅以下链接,靠近“调试数据宏”下的底部。在“描述”列中查找错误。我试图提出一个错误,但什么也没发生。然后看到它在该表中保存了错误。此外,不确定您是否可以运行 VBA 代码。我使用了“构建器”,但它没有显示我的功能。另见:***.com/questions/12352620/… 【参考方案1】:您现在可以使用数据宏使其在本地工作。这意味着该表需要存储在 Access 数据库中。
如果您的 Web 服务实际上并未使用 Access 运行时与 access 数据库容器交互,则数据宏可能无法正确触发,也可能无法按预期触发。您的里程可能会有所不同。
如果您稍后将数据库迁移到 SQL 服务器(mysql、Microsoft SQL、PostgreSQL),那么您的数据宏将需要在 SQL 服务器上以 Trigger 的形式本地实现。 p>
现在,我在下面编写一些说明来演示如何在单个 Access 数据库中从本地数据宏调用 VBA 函数:
创建 VBA 函数这将是您要从数据宏中调用的函数。
在模块中创建它,而不是在表单或类模块中。 这必须是函数,不能是子代码:
Public Function VBAFunction(OldValue As String, NewValue As String) As String
Debug.Print "Old: " & Chr(34) & OldValue & Chr(34);
Debug.Print vbTab;
Debug.Print "New: " & Chr(34) & NewValue & Chr(34)
VBAFunction = "Worked"
End Function
创建数据宏(此处描述性更强,因为人们很容易在这里迷路)
-
在设计视图中打开表(即TestTable)
找到正确的功能区
在表格设计视图中,有一个名为Design的上下文功能区。
在该功能区上有一个名为创建数据宏的选项
点击创建数据宏并选择更新后
现在应该打开宏设计器窗口
从 Add New Action 组合框中选择 SetLocalVar
出现 SetLocalVar 部分。
在此部分中,我看到 Name 和 Expression
将 Name 设置为任意值,例如:MyLocalVar
将表达式设置为以下
请务必输入 = 号,这将导致显示两个等号表达式文本:
=VBAFunction([Old].[FieldName],[FieldName])
-
保存数据宏并关闭宏设计器。
保存表格和关闭表格
测试它:创建更新查询
接下来,您需要创建一个更新查询,对包含您刚刚创建的数据宏的表执行更新。
要对此进行测试,您只需将所有记录中的字符串字段更新为一个值即可。
UPDATE [TestTable] SET [TestText] = "Test"
运行查询
按 Control + G 调出即时窗口。您会注意到每条更新的记录都会触发数据宏。
【讨论】:
以上是关于更新一行后的 MS Access 运行代码的主要内容,如果未能解决你的问题,请参考以下文章
使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?