【问题标题】:Delete Trigger works, but client still shows deletion删除触发器有效,但客户端仍然显示删除
【发布时间】:2014-08-28 16:53:49
【问题描述】:

我有一个“而不是删除”触发器,它“忽略”某些记录的删除(因此,实际上,某些记录不能被删除)。到目前为止,这非常有效。

现在,我通过 MS Access 中的链接表连接到表。如果我在那里删除记录,则 Access 会删除它们,从而将它们“显示”为已删除。只有当我刷新表格时,才会再次出现被忽略的记录。

所以最后触发器起作用了,但是用户得到了错误的反馈。能否以某种方式重写删除触发器,以便 MS Access 知道无法删除记录?

触发器如下所示:

CREATE TRIGGER trig ON  tblX
INSTEAD OF DELETE
AS 
BEGIN
    SET NOCOUNT ON;

    DELETE FROM tblX 
    WHERE IDField IN 
    (
        SELECT IDField
        FROM deleted
        WHERE (...conditions...)
    );

END

【问题讨论】:

  • 如果您向我们提供您现在使用的代码?
  • @JenZzz 好的,我已经添加了代码
  • 基本上你是说,你有一个表打开查看 Ms Access 并删除 SQL Server 中的记录。除非您刷新/重新查询视图,否则 Access 女士会将记录显示为 #Deleted?为什么不在访问表单中使用删除后事件并输入代码 me.requery/refresh?
  • @krishKM 不,Access 不会将其显示为#Deleted,它会在视觉上删除记录(因此对于用户来说,看起来记录“真的”已被删除)

标签: sql-server ms-access


【解决方案1】:

如果您在 Access 中删除一条记录,Access 似乎会立即在用户界面(例如您正在查看的表格网格)中执行此删除操作,以便为您提供即时的视觉反馈。它将删除命令发送到 SQL Server,但不刷新其基础 RecordSet。所以 Access 根本无法知道 SQL Server 没有执行删除操作。

正如 krish KM 建议的那样,您唯一的解决方案是在删除后以编程方式/手动触发对您正在查看的数据的重新查询(= 刷新底层 RecordSet)。据我所知,这只有在查看表单中的数据时才有可能,而不是在打开表格本身时。

【讨论】:

  • 好吧,如果没有其他解决方案,那我就刷新一下。但是有没有一种方法可以让触发器与 MS Access 进行通信(比如触发错误?)。但是当然,在批量删除多条记录的情况下,应该只针对那些拒绝删除的记录触发错误。
猜你喜欢
  • 1970-01-01
  • 2017-05-22
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2013-01-30
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多