ExcelでVBAスクリプトを使用すると、新しい行をテーブルに挿入し、その行のID値を取得しようとしています。 Management StudioのADODB Recordsetで "SELECT SCOPE_IDENTITY()"を使用する
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
を実行すると、行が挿入され、返されたID値が期待どおりに返されます。しかし、VBAでADODBレコードセットを使用して同じクエリを実行すると、問題が発生します。行は実際に挿入されますが、ID値にはアクセスできません。レコードセットには0個のフィールドがリストされ、実際には閉じられています。私はセミコロンの有無を問わず試してみましたが、私もクエリを単一のトランザクションとして実行しようとしました。同じ取引、ダイスなし。何が起こっているか考えてみませんか?
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ので、表示されない:
は、ここに私のVBAです。私はrsに時計を追加し、私が言ったように、クエリの後に0個のフィールドを表示し、閉じているようにも見える(状態= 0)。
美しい!完璧に動作します、ありがとう! – JoeCool