Mit einem VBA-Skript in Excel versuche ich eine neue Zeile in eine Tabelle einzufügen und dann den Identitätswert dieser Zeile zurück. Wenn ich:Verwenden von "SELECT SCOPE_IDENTITY()" in ADODB-Recordset
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
in Management Studio, wird die Zeile eingefügt und es gibt mir den zurückgegebenen Identitätswert wie erwartet. Wenn ich die genau dieselbe Abfrage über ein ADODB-Re-Cord-Set in VBA ausführe, habe ich jedoch Probleme. Die Zeile ist zwar eingefügt, aber ich kann nicht auf den Identity-Wert zugreifen. Das Re-Cord-Set listet 0 Felder auf und ist tatsächlich außerdem geschlossen worden. Ich habe es mit und ohne Semikolon versucht, und ich habe auch versucht, die Abfrage als eine einzige Transaktion auszuführen. Gleicher Deal, keine Würfel. Irgendeine Idee was ist los?
Hier ist meine 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)
und das Meldungsfeld nicht angezeigt werden, da die rs.Fields(0).Value
NULL zurück. Ich fügte rs eine Uhr hinzu und zeigt, wie gesagt, 0 Felder nach der Abfrage und scheint auch geschlossen zu sein (state = 0).
Schön! Funktioniert perfekt, danke! – JoeCool