更新一行后的 MS Access 运行 代码
MS Access run code after a row is updated
我是 MS Access 的新手,请原谅我这个简单的问题,但我对我目前的问题很困惑。
所以我想在 table 收到其字段之一的更新后 运行 一个 VBA 函数。我所做的是:
在CREATE->Macro 下创建一个名为Macro_update 的Macro,带有action RunCode,它的参数是我希望运行 的VBA 函数。函数无BUG
Select 我的 table,在 Table->更新后,我写了
IF [Old].[status]=0 And [status]=1 THEN
RunDataMacro
MacroName Macro_update
但是在我更新 table 中的状态字段后,什么也没发生...我怀疑在第 2 步中我的操作是 RunDataMacro,但我实际上是 运行宏(有区别吗?)...任何帮助表示赞赏!
您现在可以使用数据宏让它在本地工作。这意味着 table 需要存储在 Access 数据库中。
如果您的 Web 服务实际上没有使用 Access 运行时间来与访问数据库容器交互,那么数据宏可能不会正确触发,也不会按预期触发。您的里程可能会有所不同。
如果您稍后将数据库迁移到 SQL 服务器(MySQL、Microsoft SQL、PostgreSQL),那么您的数据宏将需要在本机实现在 SQL 服务器上作为 Trigger.
目前,我正在编写下面的一些说明来演示如何从单个 Access 数据库中的本地数据宏调用 VBA 函数:
创建 VBA 函数 这将是您要从数据宏调用的函数。
- 在 模块 中创建,而不是在表单或 Class 模块中。
- 这必须是 函数 不能是 sub
代码:
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
创建数据宏(这里将更具描述性,因为人们很容易迷失在这里)
- 在设计视图
中打开Table(即测试Table)
- 找到正确的色带
- 在 table 设计视图中,有一个名为 Design 的 contextual 功能区。
- 在该功能区上,有一个名为 创建数据宏
的选项
- 单击 创建数据宏 和 select 更新后
- 宏设计器 window 现在应该打开
- 从 添加新操作 组合框中选择 SetLocalVar
- 出现 SetLocalVar 部分。
- 在这个部分,我看到 名称 和 表达式
设置Name为任意值,如:MyLocalVar
设置表达式如下
- 请务必输入 = 号,这将导致显示两个等号
表达式文本:
=VBAFunction([Old].[FieldName],[FieldName])
- 保存数据宏并关闭宏设计器。
- 保存Table并关闭Table
测试一下:创建更新查询
接下来您将需要创建一个 更新查询 来对包含您刚刚创建的数据宏的 Table 执行更新。
要对此进行测试,您只需将所有记录中的一个字符串字段更新为一个值即可。
UPDATE [TestTable] SET [TestText] = "Test"
- 运行查询
按Control + G调出立即Window。您会注意到数据宏会为每条更新的记录触发。
我是 MS Access 的新手,请原谅我这个简单的问题,但我对我目前的问题很困惑。
所以我想在 table 收到其字段之一的更新后 运行 一个 VBA 函数。我所做的是:
在CREATE->Macro 下创建一个名为Macro_update 的Macro,带有action RunCode,它的参数是我希望运行 的VBA 函数。函数无BUG
Select 我的 table,在 Table->更新后,我写了
IF [Old].[status]=0 And [status]=1 THEN RunDataMacro MacroName Macro_update
但是在我更新 table 中的状态字段后,什么也没发生...我怀疑在第 2 步中我的操作是 RunDataMacro,但我实际上是 运行宏(有区别吗?)...任何帮助表示赞赏!
您现在可以使用数据宏让它在本地工作。这意味着 table 需要存储在 Access 数据库中。
如果您的 Web 服务实际上没有使用 Access 运行时间来与访问数据库容器交互,那么数据宏可能不会正确触发,也不会按预期触发。您的里程可能会有所不同。
如果您稍后将数据库迁移到 SQL 服务器(MySQL、Microsoft SQL、PostgreSQL),那么您的数据宏将需要在本机实现在 SQL 服务器上作为 Trigger.
目前,我正在编写下面的一些说明来演示如何从单个 Access 数据库中的本地数据宏调用 VBA 函数:
创建 VBA 函数 这将是您要从数据宏调用的函数。
- 在 模块 中创建,而不是在表单或 Class 模块中。
- 这必须是 函数 不能是 sub
代码:
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
创建数据宏(这里将更具描述性,因为人们很容易迷失在这里)
- 在设计视图 中打开Table(即测试Table)
- 找到正确的色带
- 在 table 设计视图中,有一个名为 Design 的 contextual 功能区。
- 在该功能区上,有一个名为 创建数据宏 的选项
- 单击 创建数据宏 和 select 更新后
- 宏设计器 window 现在应该打开
- 从 添加新操作 组合框中选择 SetLocalVar
- 出现 SetLocalVar 部分。
- 在这个部分,我看到 名称 和 表达式
设置Name为任意值,如:MyLocalVar
设置表达式如下
- 请务必输入 = 号,这将导致显示两个等号
表达式文本:
=VBAFunction([Old].[FieldName],[FieldName])
- 保存数据宏并关闭宏设计器。
- 保存Table并关闭Table
测试一下:创建更新查询
接下来您将需要创建一个 更新查询 来对包含您刚刚创建的数据宏的 Table 执行更新。
要对此进行测试,您只需将所有记录中的一个字符串字段更新为一个值即可。
UPDATE [TestTable] SET [TestText] = "Test"
- 运行查询
按Control + G调出立即Window。您会注意到数据宏会为每条更新的记录触发。