Эта функция вставляет строку в базу данных SQL и нужно возвращать идентификационный номер созданного:VBscript и ADO - 3704 Операция не разрешена, если объект закрыт
Function WriteDatabase(backupTypeID, numImages, folderSize, success, errorMessage, strLogFileName)
On Error Resume Next
err.clear
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
objConnection.Open "Provider=SQLOLEDB;Data Source=x.x.x.x;Initial Catalog=DB;User ID=sa;Password=xxxxxx"
sqlquery = "INSERT INTO tblImageCopies (BackupCopyDate, BackupCopyTypeID, NumImages, ImagesFolderSize, Success, ErrorMessage) VALUES (GETDATE(), " & backupTypeID & ", " & numImages & ", " & folderSize & ", " & success & ", " & errorMessage & "); SELECT scope_identity() AS ImageCopyID;"
objRecordSet.Open sqlquery,objConnection
objRecordSet.MoveFirst
WriteDatabase = objRecordSet("ImageCopyID")
objRecordSet.Close
objConnection.Close
If err.number <> 0 Then
WriteLog "Error writing to the EHN database - " & err.number & " " & err.description, strLogFileName
End If
End Function
Он успешно вставляет строку, но я получить сообщение об ошибке «3704 Операция не разрешена, когда объект закрыт». когда он пытается вернуть идентификационный номер в наборе записей. Когда я выполняю этот SQL-запрос непосредственно на сервере, он работает. Любой, кто может помочь?
Спасибо Брайан. Можете ли вы, пожалуйста, точно указать, куда мне следует поместить objRecordSet.NextRecordSet()? Я пробовал пару мест, но это все еще ошибка, я считаю, что вы на правильном пути. – VBscripter
Итак, выяснилось, мне пришлось удалить objRecordset.MoveFirst и заменить его Set objRecordSet2 = objRecordSet.NextRecordset(), затем изменить обратную линию на WriteDatabase = objRecordSet2 ("ImageCopyID"). Мне также пришлось удалить objRecordset.Close. Поскольку первый оператор в моей составной инструкции не возвращает никаких строк (это оператор INSERT), objRecordset автоматически закрывается и не может быть снова закрыт, что порождает ошибку. – VBscripter
[Полезные советы здесь] (http://stackoverflow.com/a/35313932/692942) об использовании 'NextRecordset' и о том, как идентифицировать открытые наборы записей. – Lankymart