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 ?
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!