在AfterInsert DataMaco中使用调用VBA时引用刚刚添加的记录

问题描述 投票:-1回答:1

访问2016,带有AfterInsert数据宏的表。

在对我之前无法找到的上一个问题的评论中,Albert D. Kallal(用户:10527)指出,如果使用Set LocalVar方法在vba中调用用户定义的函数,则该vba“session”看不到新插入的记录。

即使传入新添加的记录的标识,任何引用刚刚添加记录的表的查询都不会看到新插入的记录。

有没有人开发过一个解决方案,例如在构建闭包表时,新添加的记录是可见的还是可以使用的?

这非常类似于问题Alberta Kallal很好地分享了使用“更新后”方法复制现有记录的解决方案,以避免在每个循环中创建记录。但是,在这种情况下,我想使用查询的结果作为复制/插入的基础,而不仅仅是复制现有行或“硬编码”修改的业务逻辑到datamacro(因此很容易如果vba方法可以看到刚刚添加的行)。

特定用例试图创建一种在会计应用程序中插入“诱导”记录的方法。一个人赚了一些没有减税的钱,所以创建一个自动日记帐分录显示未来支付税款的责任是很好的。换句话说,表中记录的存在应该自动生成其他记录 - 这些附加记录的业务逻辑是通过查询定义的。

更具体地说,给定一个带有RegisterID,AccountID,Amount,TrDate字段的“transactions”表,以及一个“Induced Transaction Queries”表,它指定用于提供带有字段AutoNumberId,QueryThatDefinesAdditionalTransactions(以及多行,例如“Query”)的诱导事务的查询。这增加了自我“,”增加税务责任的查询“,”计算销售税部分的查询“,

datamacro如何在“Transactions for Analysis”表中创建行,基于迭代“诱导事务查询”表并在应用于原始“事务表”中新添加的行的每一行中插入查询结果

谢谢

ms-access access-vba ms-access-data-macro
1个回答
1
投票

好吧,在插入事件之后从宏调用VBA无法获取刚插入的行时,该VBA例程可以读取+更新尽可能多的OTHER行。如果您在VBA中写出的新行或数据必须包含刚刚插入的行中的数据?

将列传递给VBA例程。所以它现在可以将所有其他行相加,然后包括刚刚从数据宏传递的值。

所以数据宏(插入后)可能如下所示:

enter image description here

因此VBA代码看起来像这样:

Public Function AfterU(vid As Variant, Amount As Variant)

  Debug.Print vid, Amount

  Dim rst     As DAO.Recordset
  ' open table, sum data
  ' add Amount passed.

  ' write out data to some table.
  ' caution - don't add reocrds to this table that has the trigger
  ' else you wind up in a endless loop


End Function

当然,上述内容必须放在标准代码模块(不是表单)中,并且必须按照上面的规定定义为公共代码模块。

因此,当您发现JUST添加的记录尚未提交到表(它即将到来)时,您仍然可以运行+调用一些VBA代码。你刚刚(即将被)插入你的记录。

但是,既然您可以传递所需的列,例如金额等,以包含在最终总数中?然后您可以随意编写尽可能多的VBA更新并插入代码。因此,您可以提取一些记录,构建总计,现在更新一些现有记录,甚至添加新记录。只包括通过的新金额。

如上所述,您不希望“纠缠”写入具有VBA插入触发器的表,因为您很容易陷入无限循环。

但是,对于添加,更新或插入另一个表,您可以在VBA代码中随意执行操作。

© www.soinside.com 2019 - 2024. All rights reserved.