Операция UPDATE
не возвращает набор результатов. Поэтому, если выполняется с Recordset
объектом, это приводит к пустому и закрытому набору записей. В любом случае его нельзя закрыть, потому что он никогда не был открыт.
Практическое правило:
if rst.State <> adStateClosed then rst.Close
Но, поскольку вы выполняете команду, которая все равно не собирается возвращать данные, предпочтительный способ:
dim cm as ADODB.Command
set cm = new adodb.command
set cm.activeconnection = cnn
cm.commandtype = adCmdText
cm.commandtext = "UPDATE ..."
cm.execute ,, adExecuteNoRecords
Или, если ваш SQL является фиксированной строкой без параметров,
cnn.execute "UPDATE ...",, adExecuteNoRecords
Также, пожалуйста, измените rst.ActiveConnection = cnn
на Set rst.ActiveConnection = cnn
.