Cette fonction insère une ligne dans une base de données SQL et doit retourner le numéro d'identification créé:VBscript et ADO - 3704 Le fonctionnement est pas autorisée lorsque l'objet est fermé
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
Il insère avec succès la ligne, mais je obtenez le message d'erreur '3704 L'opération n'est pas autorisée lorsque l'objet est fermé.' quand il essaie de renvoyer le numéro d'identité dans le jeu d'enregistrements. Lorsque j'exécute cette requête sql directement sur le serveur, cela fonctionne. Quelqu'un en mesure d'aider?
Merci Brian. Pouvez-vous s'il vous plaît aviser exactement où je devrais mettre objRecordSet.NextRecordSet()? J'ai essayé quelques endroits mais c'est toujours une erreur, je crois que vous êtes sur la bonne voie. – VBscripter
Ok compris, j'ai dû supprimer objRecordset.MoveFirst et le remplacer par Set objRecordSet2 = objRecordSet.NextRecordset(), puis modifier la ligne de retour à WriteDatabase = objRecordSet2 ("ImageCopyID"). J'ai également dû supprimer objRecordset.Close. Comme la première instruction de mon instruction composée ne renvoie aucune ligne (c'est une instruction INSERT), objRecordset est automatiquement fermé et ne peut plus être fermé, générant ainsi l'erreur. – VBscripter
[Astuces utiles ici] (http://stackoverflow.com/a/35313932/692942) sur l'utilisation de 'NextRecordset' et sur l'identification des jeux d'enregistrements ouverts. – Lankymart