我有一个"而不是删除"触发器,"忽略"删除某些记录(因此,实际上,某些记录无法删除)。到目前为止,这非常有效。
现在,我通过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
答案 0 :(得分:2)
如果删除Access中的记录,Access似乎会立即在用户界面(例如您正在查看的表格)中执行此删除操作,以便为您提供即时的视觉反馈。它将delete-command发送到SQL Server,但不刷新其基础RecordSet。因此Access无法知道SQL Server毕竟没有执行删除。
你唯一的解决方案是在删除后以编程方式/手动触发你正在查看的数据的重新查询(=刷新底层的RecordSet),正如krish KM建议的那样。据我所知,这只有在查看表单中的数据时才有可能,而不是在打开表本身时。