Maison >base de données >tutoriel mysql >Pourquoi mon code Excel-VBA obtient-il une erreur « 3704 : L'opération n'est pas autorisée lorsque l'objet est fermé » lors de la copie de données à partir d'un jeu d'enregistrements SQL ?

Pourquoi mon code Excel-VBA obtient-il une erreur « 3704 : L'opération n'est pas autorisée lorsque l'objet est fermé » lors de la copie de données à partir d'un jeu d'enregistrements SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 20:48:11383parcourir

Why Does My Excel-VBA Code Get a

Gestion des erreurs dans Excel-VBA pour l'accès à la base de données SQL

Lors de l'accès à une base de données SQL à partir d'Excel-VBA, un problème courant survient lors de la tentative pour copier les données d'un jeu d'enregistrements vers une feuille Excel, ce qui entraîne une erreur d'exécution 3704 : « L'opération n'est pas autorisée lorsque l'objet est fermé."

Cause première :
Le message d'erreur suggère que le jeu d'enregistrements (objMyRecordset) référencé dans la méthode "CopyFromRecordset" a été fermé. Cela peut se produire si la connexion à la base de données est perdue ou si le jeu d'enregistrements est explicitement fermé prématurément.

Solution :
Pour résoudre ce problème, assurez-vous que la connexion à la base de données est stable et le jeu d'enregistrements reste ouvert tout au long du processus de récupération des données. Voici un code VBA révisé :

Sub GetDataFromADO()
    'Declare variables'
        Set objMyConn = New ADODB.Connection
        Set objMyRecordset = New ADODB.Recordset
        Dim strSQL As String

    'Open Connection'
        objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=MyDatabase;User ID=abc;Password=abc;"
        objMyConn.Open

    'Set and Execute SQL Command'
        strSQL = "select * from myTable"

    'Open Recordset'
        Set objMyRecordset.ActiveConnection = objMyConn
        objMyRecordset.Open strSQL

    'Copy Data to Excel'
        ActiveSheet.Range("A1").CopyFromRecordset objMyRecordset

    'Close recordset and connection (optional, to ensure no open object handles)
        objMyRecordset.Close
        objMyConn.Close
End Sub

Attention :
Il est important de noter que les méthodes "Close" (pour les objets jeu d'enregistrements et de connexion) doivent être utilisées après les données -le processus de récupération est terminé pour éviter les erreurs potentielles. Cependant, il n'est pas strictement nécessaire de fermer explicitement ces objets, car ils doivent être automatiquement fermés à la fin du sous-programme.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn