ExcelでVBAスクリプトを使用して、新しい行をテーブルに挿入し、その行のID値を取得しようとしています。私が実行した場合:
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
Management Studioでは、行が挿入され、期待どおりに返されたID値が表示されます。ただし、VBAのADODBレコードセットを介してまったく同じクエリを実行すると、問題が発生します。行は実際に挿入されていますが、ID値にアクセスできません。レコードセットには0個のフィールドがリストされており、実際にも閉じられています。セミコロンを使用する場合と使用しない場合を試しました。また、クエリを単一のトランザクションとして実行することも試みました。同じ取引、サイコロなし。何が起こっているのか分かりますか?
これが私のVBAです:
Dim rs As ADODB.Recordset
Dim cn As Connection
Dim SQLStr As String
Dim serverName As String
Dim databaseName As String
serverName = "MSSQLServer"
databaseName = "QA"
cxnStr = "Driver={SQL Server};Server=" & serverName & ";Database=" & databaseName & ";"
SQLStr = "INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP); SELECT SCOPE_IDENTITY()"
Set cn = New ADODB.Connection
cn.Open cxnStr
Set rs = New ADODB.Recordset
rs.Open SQLStr, cn, adOpenKeyset, adLockOptimistic
MsgBox (rs.Fields(0).Value)
rs.Fields(0).Value
また、 NULLを返すため、メッセージボックスは表示されません。rsにウォッチを追加しました。前述のように、クエリの後に0フィールドが表示され、閉じているように見えます(状態= 0)。