Użycie skryptu VBA w programie Excel, próbuję wstawić nowy wiersz do tabeli, a następnie uzyskać wartość tożsamości tego wiersza. Jeśli uruchomię:Używanie "SELECT SCOPE_IDENTITY()" w zestawie rekordów ADODB
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
w Management Studio, wiersz jest wstawiany i daje mi zwróconą wartość tożsamości zgodnie z oczekiwaniami. Jednak po uruchomieniu dokładnie tego samego zapytania za pomocą zestawu rekordów ADODB w języku VBA mam problemy. Wiersz jest rzeczywiście wstawiany, ale nie mogę uzyskać dostępu do wartości tożsamości. Zestaw rekordów zawiera listę 0 pól i został również zamknięty. Próbowałem już z średnikiem i bez niego, a także próbowałem uruchomić kwerendę jako pojedynczą transakcję. Taki sam układ, żadnych kości. Masz pojęcie, co się dzieje?
Oto mój 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)
A okno komunikatu nie wyświetli ponieważ rs.Fields(0).Value
zwraca NULL. Dodałem zegarek do rs i, jak powiedziałem, pokazuje 0 pól po zapytaniu, a także wydaje się być zamknięty (stan = 0).
Piękna! Działa doskonale, dzięki! – JoeCool