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

しかし今、私は別の問題を抱えています。Access フォームでデータを変更できますが、トリガーが原因で変更がコミットされません。Trigger がなければ正常に動作しますが、Trigger では動作しません。SSMSでUpdateを直接テーブルトリガーに送信している場合、変更は正常に機能します。トリガーを削除すると、アクセスは正常に機能します。

を変更しようとしTRANSACTION ISOLATION LEVELましたが、問題の解決策が見つかりませんでした。

4

0 に答える 0