Sử dụng tập lệnh VBA trong Excel, tôi đang cố chèn hàng mới vào bảng và sau đó lấy lại giá trị danh tính của hàng đó. Nếu tôi chạy:Sử dụng "SELECT SCOPE_IDENTITY()" trong ADODB Recordset
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
trong Management Studio, hàng được chèn vào và nó mang lại cho tôi giá trị nhận dạng trả về như mong đợi. Tuy nhiên, khi tôi chạy chính xác cùng một truy vấn thông qua một bản ghi ADODB trong VBA, tôi đang gặp rắc rối. Hàng thực sự được chèn, nhưng tôi không thể truy cập vào giá trị nhận dạng. Recordset liệt kê 0 trường và thực sự đã bị đóng. Tôi đã thử với và không có dấu chấm phẩy, và tôi cũng đã thử chạy truy vấn dưới dạng một giao dịch duy nhất. Cùng một thỏa thuận, không có súc sắc. Bất cứ ý tưởng những gì đang xảy ra?
Dưới đây là VBA của tôi:
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)
Và hộp thông báo thất bại trong việc hiển thị vì rs.Fields(0).Value
trả về null. Tôi đã thêm một đồng hồ vào rs, và, như tôi đã nói, hiển thị 0 trường sau truy vấn và cũng dường như bị đóng (state = 0).
Đẹp! Hoạt động hoàn hảo, cảm ơn! – JoeCool