我有一个将记录插入 MS Access 数据库(.accdb 文件扩展名,而不是 SQL 数据库的前端)的第 3 方软件(Pro-face Pro-Server EX)。在 Pro-Server EX 软件端配置该过程的方式是,它仅将数据作为插入发送到数据库(无法将其配置为搜索现有记录以执行更新)。我们有一个客户,他的数据库包含预先存在的数据(带有作为主键的 ID 字段),他想要做的就是根据 ID 更新现有记录。我知道一种在 SQL 中执行此操作的方法,我将在其中配置类似于以下内容的触发器:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[update_table]
ON [dbo].[Table1]
INSTEAD OF INSERT
AS
DECLARE @seqno int
DECLARE @Data1 int
BEGIN
SET @seqno = (Select seqno from INSERTED)
SET @Data1 = (Select Data1 from INSERTED)
IF EXISTS (SELECT seqno FROM [dbo].[Table1] WHERE seqno = @seqno)
BEGIN
UPDATE [dbo].[Table1] SET seqno=@seqno,Data1=@Data1 WHERE seqno=@seqno
END
ELSE
BEGIN
INSERT INTO [dbo].[Table1] (seqno, Data1) VALUES (@seqno, @Data1)
END
END
但是,我对 MS Access 查询和/或触发器没有太多经验。当我尝试将此代码复制到 MS Access 查询的 SQL 视图中时,我遇到了几个错误,因此这似乎不是 MS Access 的真正选择。
我从未使用过 MS Access 中可用的触发器,但似乎可以使用的最接近的触发器是“更改前”,它被描述为“创建在保存记录之前运行以验证更改的逻辑,并且然后决定允许新值、更改值或显示错误以停止更改。使用 [IsInsert] 属性确定事件是插入还是更新。” 这个描述告诉我这个触发器只会在数据已经写入数据库时触发,但不会被保存,所以它真的不能用来确定是否已经存在匹配的 ID 来执行更新,如果不存在,然后执行插入。我是否正确解释了这一点?
有没有办法做我在 MS Access 中寻找的东西?