1

我有一个包含库存项目列表的表 tblItems。该表有许多列来描述这些项目,包括 SupplierName、SupplierOrderNumber 和 PredictedArrivalDate 列。

如果我从供应商处订购了几件新商品,我将在表格中分别记录每件商品,并使用相同的供应商名称、订单号和预计到达日期。

我想添加一个数据宏,这样如果我更新一条记录的 PredictedArrivalDate,该值将被复制到具有相同供应商名称和供应商订单编号的其他记录/项目的 PredictedArrivalDate 列。

我得到的最接近的是:

SetLocalVar (MySupplierName, [SupplierName])
SetLocalVar (MySupplierOrderNumber , [SupplierOrderNumber ])
SetLocalVar (MyPredictedArrivalDate, [PredictedArrivalDate])

For Each Record in tblItems
    Where Condition = [SupplierOrderNumber] Like [MySupplierOrderNumber] And [SupplierName] Like [MySupplierName] And [PredictedArrivalDate]<>[MyPredictedArrivalDate]
    Alias OtherRecords

EditRecord
    SetField ([OtherRecords].[PredictedArrivalDate], [MyPredictedArrivalDate])
End EditRecord

但是,当我运行这个时,只有 5 条记录更新,并且错误日志报告错误 -20341:

“达到数据宏资源限制。这可能是由递归调用自身的数据宏引起的。Updated() 函数可用于检测记录中的哪个字段已更新,以帮助防止递归调用。”

我怎样才能得到这个工作?

4

2 回答 2

1

我不是一个使用宏做任何事情的人,所以我会使用 VBA 和记录集/动作查询来进行更新。

您可以通过将本地 var 设置为等于其结果来调用数据宏中的用户定义函数。

Access 不喜欢触发自身的数据宏(您正在这样做,您正在使用 on update 宏并在不同记录上更新同一表中的字段),因为存在意外创建无限循环的风险。看起来您触发了一项旨在防止这种情况的措施。我会尽量避免这种情况。

注意:当您从 Access 外部链接到表时(例如通过 ODBC),在数据宏中使用用户定义的函数可能会导致问题。

于 2017-07-07T17:24:07.080 回答
0

这不是一个好的解决方案(它不是数据宏),但它确实可以作为临时修复。

我创建了一个名为“updatePredictedArrivalDate”的更新查询:

PARAMETERS
ItemID Long,
MyPredictedArrivalDate DateTime,
MySupplierName Text ( 255 ),
MySupplierOrderNumber Text ( 255 );

UPDATE tblItems
SET tblItems.PredictedArrivalDate = [MyPredictedArrivalDate]
WHERE (((tblItems.SupplierName) = [MySupplierName])
AND   ((tblItems.SupplierOrderNumber) = [MySupplierOrderNumber])
AND   ((tblItems.ID) <> [ItemID]));

在 PredictedArrivalDate 表单字段 .AfterUpdate 事件中,我添加了这个宏:

IF [PredictedArrivalDate].[OldValue]<>[PredictedArrivalDate] Or [PredictedArrivalDate]<>""

OpenQuery (updatePredictedArrivalDate, Datasheet, Edit, [ID], [PredictedArrivalDate], [SupplierName], [SupplierOrderNumber])

我现在必须记住将此 .AfterUpdate 事件添加到我创建的用于修改该特定字段的任何其他表单中。

如果有人有更好的解决方案,请告诉我。

于 2017-07-24T16:31:53.300 回答