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
Libérer: 2024-12-30 20:48:11
original
472 Les gens l'ont consulté

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
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal