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
しかし今、私は別の問題を抱えています。Access フォームでデータを変更できますが、トリガーが原因で変更がコミットされません。Trigger がなければ正常に動作しますが、Trigger では動作しません。SSMSでUpdateを直接テーブルトリガーに送信している場合、変更は正常に機能します。トリガーを削除すると、アクセスは正常に機能します。
を変更しようとしTRANSACTION ISOLATION LEVEL
ましたが、問題の解決策が見つかりませんでした。