1

我使用 MS Access Database 2013 作为前端连接到 MS SQL Server 2017。

Dim rst As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim conn As New ADODB.Connection


With conn
     .CursorLocation = adUseClient
     .ConnectionString = strSQLOLEDB
     .Open
End With

cmd.CommandType = adCmdStoredProc
cmd.CommandText = strStoredProcedure
cmd.ActiveConnection = conn
cmd.CommandTimeout = 120

cmd.Parameters.Append cmd.CreateParameter(strID_Bez, adInteger, adParamInput, , intID)

rst.Open cmd, , adOpenKeyset, adLockOptimistic

这对我来说很好,我也可以使用触发器将更改的日期/时间设置为手动时间戳:

CREATE TRIGGER [dbo].[tr_Emailadress_After_Update]
ON [dbo].[Emailadress] AFTER Update, Insert

AS

BEGIN

SET NOCOUNT ON;

UPDATE  Emailadress
SET     Email_TS = sysdatetime()
WHERE   Email_ID IN     (   SELECT  Email_ID
                            FROM    inserted
                        )

现在我正在尝试使用 MS SQL Server 的 OLTP In-Memory-Technic(这也是手动时间戳的原因,因为 OLTP 不提供时间戳)并且触发器不再起作用。

我搜索了很多解决方案,发现这对我有用:

CREATE TRIGGER [dbo].[tr_Emailadress_After_Update] ON [dbo].[Emailadress] WITH NATIVE_COMPILATION, SCHEMABINDING AFTER Update , INSERT

AS 

BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'german')

DECLARE @intEmail_ID    int

SELECT  @intEmail_ID = I.Email_ID
FROM    Inserted I

UPDATE  dbo.Emailadress
SET     Email_TS = sysdatetime()
WHERE   Email_ID = @intEmail_ID

END
GO

但现在我遇到了另一个问题。我可以更改我的访问表单中的数据,但由于触发器,更改不会被提交。没有触发器它工作正常......但没有触发器。如果我直接在 SSMS 发送更新到表触发器和更改将正常工作。如果我删除触发器访问将正常工作。

我试图改变TRANSACTION ISOLATION LEVEL但没有找到解决问题的方法。

4

0 回答 0