【问题标题】:Microsoft Access: warning about duplicates when record was created by data macroMicrosoft Access:数据宏创建记录时有关重复的警告
【发布时间】:2013-07-30 05:55:50
【问题描述】:

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

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

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

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

非常感谢!

编辑:我尝试通过在子表单的 After Insert 宏中运行 Me.Requery 来解决此问题。单条记录似乎可以正常工作,但批量复制粘贴时会出现错误Operation not supported in transactions.

编辑 2: 我什至发现这个forum thread 说在交易后Requery 有点不可能。我有点确定应该有办法解决这个问题,因为它似乎对用户不友好......

【问题讨论】:

    标签: ms-access macros foreign-keys ms-access-2010 referential-integrity


    【解决方案1】:

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

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

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

    Private Sub Form_AfterInsert()
        Me.TimerInterval = 500
    End Sub
    
    Private Sub Form_Timer()
        Me.Requery
        Me.TimerInterval = 0
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多