我有一個第三方軟件(Pro-face的親服務器EX)被插入記錄到MS Access數據庫(.accdb文件擴展名,不SQL數據庫的前端)。該過程是在臨服務器EX軟件方面的配置方式是,它僅作爲插入(有沒有辦法來配置它來搜索現有的記錄執行更新)到數據庫中發送數據。我們有一個客戶擁有一個數據庫,其中包含預先存在的數據(帶有主鍵的ID字段),他想要做的就是根據ID更新現有記錄。我知道在SQL做到這一點的方法,我將配置類似以下的觸發:使用的MS Access觸發和/或querys來插入或更新記錄
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 [email protected],[email protected] WHERE [email protected]
END
ELSE
BEGIN
INSERT INTO [dbo].[Table1] (seqno, Data1) VALUES (@seqno, @Data1)
END
END
但是我沒有用的MS Access querys和/或觸發儘可能多的經驗。當我試圖將這段代碼複製到MS Access查詢的SQL視圖中時,我得到了一些錯誤,所以看起來這不會成爲MS Access的一個選項。
我從來沒有使用MS Access中可用的觸發器,但看起來最接近的可以使用的是「更改前」,它被描述爲「創建保存記錄之前運行的邏輯驗證更改,然後決定允許新值,更改值或顯示錯誤以停止更改。使用[IsInsert]屬性確定事件是插入還是更新。「這說明告訴我,一旦數據已經寫入到數據庫觸發器將只被絆倒,但不能保存,所以真的不能被用來確定是否匹配的ID已經存在執行更新,如果沒有,然後執行插入。我解釋正確嗎?
有沒有辦法做什麼,我在MS Access找?
Access沒有觸發器像MSSQL一樣。 Access通常使用表單或報表中的事件來處理數據操作。軟件是否直接鏈接Access表以執行插入操作或完成的具體內容? –
@random_answer_guy - Access 2010及更高版本確實具有事件驅動的[數據宏](https://support.office.com/zh-cn/article/Create-a-data-macro-b1b94bca-4f17-47ad-a66d- f296ef834200),它們在表級別上運行並且有點像觸發器。 –
@GordThompson - 正確的,我正在使用MS Access 2010.關於插入,軟件(Pro-Server EX)有一個配置爲使用指針文件(在本例中是另一個.accdb文件)的動作數據庫,表和字段寫入數據。然後軟件在後臺生成並執行INSERT語句,因此如果不更改軟件,則無法對其進行修改。這需要一些時間,但我們有一位客戶現在正在尋找解決方案。 –