Используя сценарий VBA в Excel, я пытаюсь вставить новую строку в таблицу, а затем вернуть значение идентификатора этой строки. Если я запустил:Использование «SELECT SCOPE_IDENTITY()» в наборе записей ADODB
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
в Studio Management Studio, строка вставлена и дает мне возвращаемое значение идентичности, как ожидалось. Однако, когда я запускаю тот же самый запрос через набор записей ADODB в VBA, у меня возникают проблемы. Строка действительно вставлена, но я не могу получить доступ к значению идентификатора. Набор записей содержит 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 полей после запроса и также кажется закрытым (state = 0).
Прекрасно! Работает отлично, спасибо! – JoeCool