0

您对表请求的更改不成功,因为它们会在索引、主键或关系中创建重复值。

这是我在将数据键入到子表单中途时收到的错误消息。我的子表单的来源是一个以一对一的父子关系Query连接两个的源。Tables我假设当我输入数据时会发生以下情况:

  1. 我有一个After Insert数据宏,它在表中创建一行。
  2. 触发数据宏,并在子表中使用相应的外键创建一行。
  3. Microsoft Access 不知道我在子表中创建了该行。
  4. 当我在子表单中键入属于子表的数据时,它会自动尝试将新行添加到子表中。这会失败,因为已经存在具有相同外键的行。

有什么办法可以绕过这种行为?我可以在触发数据宏的那一刻桥接父表和子表之间的链接吗?我不能放弃After Insert数据宏,因为它包含一些有助于识别要插入哪个子表的 biz 逻辑,并且在子表中填充数据后立即在子表中创建行很重要,而不仅仅是当子表单中的子表的字段被触摸时。

非常感谢!

编辑:Me.Requery我尝试通过在子表单的After Insert宏中运行来解决这个问题。似乎对单个记录工作正常,但是通过批量复制粘贴错误操作在事务中不受支持。发生。

编辑 2:我什至发现这个论坛帖子Requery交易后有点不可能。我有点确定应该有办法解决这个问题,因为它看起来有点用户不友好......

4

1 回答 1

0

我通常建议不要使用计时器,但在这种情况下您可以使用计时器。在 AfterInsert 上,将表单的 TimerInterval 设置为 500。然后将 Me.Requery 代码放在 Timer 事件上,并将 TimerInterval 设置回 0。

AfterInsert 事件后应将 TimerInterval 设置回 500,这将阻止计时器在所有记录都被粘贴之前触发。

我看到你正在使用宏。我不知道你是否可以在宏中使用计时器。我根本不使用宏,我建议学习 VBA 而不是使用它们。

Private Sub Form_AfterInsert()
    Me.TimerInterval = 500
End Sub

Private Sub Form_Timer()
    Me.Requery
    Me.TimerInterval = 0
End Sub
于 2013-07-30T17:11:07.033 回答