Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 删除触发器工作,但客户端仍显示删除_Sql Server_Ms Access - Fatal编程技术网

Sql server 删除触发器工作,但客户端仍显示删除

Sql server 删除触发器工作,但客户端仍显示删除,sql-server,ms-access,Sql Server,Ms Access,我有一个“代替删除”触发器,它“忽略”某些记录的删除(因此,实际上,某些记录无法删除)。到目前为止,这是非常有效的 现在,我通过MS Access中的链接表连接到该表。如果我删除了那里的记录,Access就会删除它们,从而“显示”它们为已删除。只有在刷新表时,被忽略的记录才会再次出现 最后,触发器工作了,但是用户得到了错误的反馈。是否可以以某种方式重写删除触发器,以便MS Access知道无法删除记录 触发器如下所示: CREATE TRIGGER trig ON tblX INSTEAD O

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

现在,我通过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

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


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

如果您可能向我们提供您现在使用的代码?@JenZzz好的,我已经添加了代码基本上您是说,您在Ms Access中打开了一个表以供查看,并在SQL Server中删除了记录。除非刷新/重新查询视图,否则Ms Access会将记录显示为“已删除”?为什么不在access窗体中使用删除后事件,并将代码放在me.requery/refresh?@krishKM否,access不会将其显示为#Deleted,它会直观地删除记录(因此对于用户来说,看起来记录“真的”被删除)。如果没有其他解决方案,那么我将进行刷新。但是有没有一种方法可以让触发器与MS Access通信(比如触发错误?)。但是,当然,如果一批中删除了多个记录,那么只应对拒绝删除的记录触发错误。