我有一个第三方软件(Pro-face Pro-Server EX),它将记录插入MS Access数据库(.accdb文件扩展名,而不是SQL数据库的前端)。在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中可用的触发器,但似乎可以使用的最接近的触发器是“Before Change”,它被描述为“在保存记录以验证之前运行的创建逻辑”更改,然后决定允许新值,更改值或显示错误以停止更改。使用[IsInsert]属性确定事件是插入还是更新。“此描述告诉我,只有在数据已写入数据库但未保存的情况下才会触发此触发器,因此它实际上不能用于确定是否已存在匹配的ID来执行更新,如果不存在,然后执行插入。我能正确地解释这个吗?
有没有办法在MS Access中寻找我想要的东西?