Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Der Vorgang ist nicht zulässig, wenn das Objekt geschlossen ist, wenn eine erweiterte Abfrage ausgeführt wird

Dies ist ein häufiges Problem, das dadurch verursacht wird, dass Zeilenzählungen als Ausgabe einer gespeicherten Prozedur interpretiert werden, wenn ADODB verwendet wird mit SQL Server.

Um dies zu vermeiden, denken Sie daran,

festzulegen
SET NOCOUNT ON;

in Ihrer gespeicherten Prozedur wird dies ADODB daran hindern, einen geschlossenen Datensatz zurückzugeben, oder wenn Sie dies aus irgendeinem Grund nicht tun möchten (nicht sicher, warum, da Sie immer @@ROWCOUNT verwenden können um die Zeilenzählung zurückzugeben), können Sie

verwenden
'Return the next recordset, which will be the result of the Stored Procedure, not 
'the row count generated when SET NOCOUNT OFF (default).
Set rs = rs.NextRecordset()

was das nächste ADODB.Recordset zurückgibt wenn ADODB erkannt hat, dass eine von der gespeicherten Prozedur zurückgegeben wird (möglicherweise ist es am besten, rs.State <> adStateClosed zu überprüfen beim Umgang mit mehreren ADODB.Recordset-Objekten).