Heim >Datenbank >MySQL-Tutorial >Warum erhält mein Excel-VBA-Code beim Kopieren von Daten aus einem SQL-Recordset den Fehler „3704: Vorgang ist beim Schließen des Objekts nicht zulässig'?

Warum erhält mein Excel-VBA-Code beim Kopieren von Daten aus einem SQL-Recordset den Fehler „3704: Vorgang ist beim Schließen des Objekts nicht zulässig'?

Linda Hamilton
Linda HamiltonOriginal
2024-12-30 20:48:11400Durchsuche

Why Does My Excel-VBA Code Get a

Fehlerbehandlung in Excel-VBA für den SQL-Datenbankzugriff

Beim Zugriff auf eine SQL-Datenbank aus Excel-VBA tritt beim Versuch häufig ein Problem auf zum Kopieren von Daten aus einem Recordset in eine Excel-Tabelle, was zum Laufzeitfehler 3704 führt: „Vorgang ist nicht zulässig, wenn das Objekt vorhanden ist.“ geschlossen.“

Ursache:
Die Fehlermeldung deutet darauf hin, dass das in der Methode „CopyFromRecordset“ referenzierte Recordset (objMyRecordset) geschlossen wurde. Dies kann auftreten, wenn die Verbindung zur Datenbank verloren geht oder wenn das Recordset explizit vorzeitig geschlossen wird.

Lösung:
Um dieses Problem zu beheben, stellen Sie sicher, dass die Datenbankverbindung stabil ist und Das Recordset bleibt während des gesamten Datenabrufvorgangs geöffnet. Hier ist ein überarbeiteter VBA-Code:

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

Achtung:
Es ist wichtig zu beachten, dass die „Close“-Methoden (für Recordset- und Verbindungsobjekte) nach den Daten verwendet werden sollten -Der Abrufvorgang ist abgeschlossen, um mögliche Fehler zu vermeiden. Es ist jedoch nicht unbedingt erforderlich, diese Objekte explizit zu schließen, da sie automatisch geschlossen werden sollten, wenn die Unterroutine beendet wird.

Das obige ist der detaillierte Inhalt vonWarum erhält mein Excel-VBA-Code beim Kopieren von Daten aus einem SQL-Recordset den Fehler „3704: Vorgang ist beim Schließen des Objekts nicht zulässig'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn