VBscript et ADO - 3704 Opération n'est pas autorisée lorsque l'objet est fermé
Cette fonction insère une ligne dans une base de données SQL et les besoins de retour, le numéro d'identité de création:
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 réussi à insérer la ligne, mais je reçois le message d'erreur "3704 Opération n'est pas autorisée lorsque l'objet est fermé." quand il essaie de revenir le numéro d'identité dans le jeu d'enregistrements. Lorsque j'exécute cette requête sql directement sur le serveur, il fonctionne. Toute personne en mesure de l'aider?
OriginalL'auteur VBscripter | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Je fais la même chose (très semblable en tout cas). Je crois qu'il y a deux ensembles de résultats de revenir, l'un pour l'INSÉRER et puis un autre pour le SÉLECTIONNER. Essayez d'appeler objRecordSet.NextRecordset().
Ok compris, j'ai dû enlever objRecordset.MoveFirst et de le remplacer avec objRecordSet2 = objRecordSet.NextRecordset(), puis modifiez la ligne de retour WriteDatabase = objRecordSet2("ImageCopyID"). J'ai également eu à supprimer objRecordset.De près. Comme la première déclaration dans ma composé d'instruction n'a pas renvoyé de lignes (une instruction INSERT), objRecordset est automatiquement fermé et ne peut pas être fermé à nouveau, ce qui génère l'erreur.
des conseils Utiles ici sur l'utilisation de
NextRecordset
et comment les identifier ouvrir des jeux d'enregistrements.OriginalL'auteur Brian
Utiliser "SET NOCOUNT on;" au début de votre requête
OriginalL'auteur Olya
J'ai reçu l'erreur exacte, et a réussi à suivre pour IMPRIMER une déclaration que j'avais laissé dans ma procédure stockée SQL Server. Une fois que j'ai commenté l'instruction PRINT, le jeu d'enregistrements retourné les résultats sans erreur.
OriginalL'auteur Michael Melio