Farbschema: Riviera
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » troubleshooting » Das Lesen einer verknüpften ODBC-Tabelle kehrt nie zurück

Das Lesen einer verknüpften ODBC-Tabelle kehrt nie zurück

Umgebung

Eigener VBA-Code, der verknüpfte ODBC- oder OData-Tabellen mit DAO Recordset.GetRows liest, in jeder Access-Version, mit dem Microsoft ODBC Driver 18 for SQL Server oder dem Wkl-OData-Treiber; andere Treiber werden nicht unterstützt.

Ursache

Scheitert die Quelle mitten in einem Ergebnis – eine Zeile, die der Server nicht berechnen kann, ein Datendienst, der mit 429 (zu viele Anforderungen) antwortet, eine abgebrochene Verbindung –, kehrt GetRows nie zurück: DAO ruft SQLFreeStmt des Treibers in einer Schleife auf einem Thread mit 100 % CPU-Last auf, und Access hängt, bis es beendet wird. MoveNext über dieselben Datensätze löst stattdessen den Fehler 3146 („ODBC-Aufruf fehlgeschlagen“) aus.

Die WKL-Steuerelemente lesen mit MoveNext und zeigen den Fehler an (DataError oder der Fehlertext im Steuerelement); sie sind nicht betroffen. Eigener Code, der für sie oder für etwas anderes Arrays füllt, ist es.

Lösung

  1. Lesen Sie verknüpfte Tabellen mit einer MoveNext-Schleife statt mit GetRows, und behandeln Sie den Fehler 3146:

    Dim rs As DAO.Recordset, n As Long
    On Error GoTo ReadFailed
    Set rs = CurrentDb.OpenRecordset("SELECT ID, Name FROM tblKunde", dbOpenSnapshot)
    Do Until rs.EOF
        n = n + 1
        rs.MoveNext
    Loop
    Exit Sub
    ReadFailed:
        ' 3146: the source failed while reading; DBEngine.Errors may hold the driver's text
        Debug.Print Err.Number, DBEngine.Errors(0).Description
  2. Wenn Sie je Spalte einmal außerhalb der Schleife ein Feldobjekt lesen (Set fName = rs!Name), ist die Schleife etwa so schnell wie GetRows.
  3. Ein Prozess, der bereits hängt, lässt sich nur im Task-Manager beenden; nicht gespeicherte Arbeit in diesem Access geht verloren.

Verwandte Themen

de/wiki/msaccess/comctl/troubleshooting/reading-a-linked-table-never-returns.txt · Zuletzt geändert: von Wolfgang van der Stille