更新一行后的 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 部分。 在此部分中,我看到 NameExpression

    Name 设置为任意值,例如:MyLocalVar

    表达式设置为以下

    请务必输入 = 号,这将导致显示两个等号

表达式文本:

    =VBAFunction([Old].[FieldName],[FieldName])
    保存数据宏关闭宏设计器保存表格关闭表格

测试它:创建更新查询

接下来,您需要创建一个更新查询,对包含您刚刚创建的数据宏的表执行更新。

要对此进行测试,您只需将所有记录中的字符串字段更新为一个值即可。

UPDATE [TestTable] SET [TestText] = "Test"
运行查询

Control + G 调出即时窗口。您会注意到每条更新的记录都会触发数据宏。

【讨论】:

以上是关于更新一行后的 MS Access 运行代码的主要内容,如果未能解决你的问题,请参考以下文章

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?

MS Access UPDATE 查询很慢

ms-access 2007 运行时和 lockWindowUpdate

无法弄清楚 MS Access 的此更新查询代码有啥问题

将日期插入 Ms-Access 数据库的问题

MS-Access 中的多个日期范围