【发布时间】:2011-08-03 03:59:12
【问题描述】:
我在 MS Access 中有两个名为 [Insert_Record] 和 [Delete_Record] 的表。两张表都有相同的字段,但一张表有记录,而另一张表没有记录。
问题:我希望,每当我从表 [Insert_Record] 中删除任何记录时,整条记录都应自动插入到另一个表中,即:[Delete Record]。
我怎样才能做到这一点?
【问题讨论】:
-
页面没有内容!!
我在 MS Access 中有两个名为 [Insert_Record] 和 [Delete_Record] 的表。两张表都有相同的字段,但一张表有记录,而另一张表没有记录。
问题:我希望,每当我从表 [Insert_Record] 中删除任何记录时,整条记录都应自动插入到另一个表中,即:[Delete Record]。
我怎样才能做到这一点?
【问题讨论】:
Access 2010 引入了类似于触发器的事件驱动Data Macros。问题中描述的过程可以通过 [Insert_Record] 表上的 After Delete 数据宏轻松完成:
【讨论】:
据我了解,Access 没有触发器。
您可能做的最好的事情就是将这种逻辑放入编辑表格的表单中。换句话说,在表单级别处理删除的事件并将插入逻辑放在那里。
如果您需要触发器,则需要使用支持它们的适当 RDMS(MySQL、MS SQL、Oracle 等)。
编辑:另一种方法(可能对您有用也可能不适用)是添加一个布尔列“IsDeleted”。这样,您可以只在逻辑上删除一条记录,而不是将其移动到另一个表中。这种方法的缺点是删除的记录保留在主表中,如果有大量删除,可能会导致性能问题。
【讨论】:
创建一个追加查询,将记录添加到第二个表中,该查询在您用于从第一个表中删除记录的表单的 On Delete Confirm 事件中执行。
【讨论】:
我想这个“删除”是按钮驱动的......
因此,将按钮编程为首先将记录插入到一个表中,然后再删除它。
只需在删除上方添加插入的 VBA。
另一种完全消除您对另一个表的需求的方法只是一个布尔列...主动是/否(默认为是。)
如果是 Active,那么当他们点击删除时它实际上并没有被删除,只需将标志设置为 False,那么实际上什么都不会被删除,不需要 SQL 代码并且没有风险,你甚至可以与更新的用户有一个列它打印在另一列中
Me.Active = False
Me.UserName = 'CurrentUser Location here
Me.RecordSet.Requery
那么就没有实际丢失任何东西的风险,而且你有最后标记它的人的记录。
在连续表单中,只需添加 Where 标志 Active = True,则不会显示任何错误标志,并且它在用户群中看起来好像它已被删除。
【讨论】: