Utilizzando uno script VBA in Excel, sto cercando di inserire una nuova riga in una tabella e quindi recuperare il valore dell'identità di quella riga. Se corro:Utilizzo di "SELEZIONA SCOPE_IDENTITY()" nel recordset ADODB
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
in Management Studio, la riga viene inserita e mi dà il valore di identità restituito come previsto. Tuttavia, quando eseguo esattamente la stessa query tramite un recordset ADODB in VBA, ho problemi. La riga è effettivamente inserita, ma non riesco ad accedere al valore dell'identità. Il recordset elenca i campi 0 ed è stato effettivamente chiuso. Ho provato con e senza il punto e virgola, e ho anche provato a eseguire la query come una singola transazione. Stesso affare, niente da fare. Qualche idea su cosa sta succedendo?
Ecco la mia 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)
E la finestra di messaggio non riesce a visualizzare perché i rs.Fields(0).Value
restituisce null. Ho aggiunto un orologio a rs e, come ho detto, mostra 0 campi dopo la query e sembra anche essere chiuso (stato = 0).
Bello! Funziona perfettamente, grazie! – JoeCool