Barvna shema: Svetla
Trenutno dejavna stran: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL OData-ODBC-Treiber » Fehlerbehebung beim OData-ODBC-Treiber » Access bleibt bei GetRows hängen

Access bleibt bei GetRows hängen

Code, der eine verknüpfte Tabelle mit Recordset.GetRows liest, kehrt nicht zurück; Access reagiert nicht mehr und muss beendet werden. Mit MoveNext über dieselbe Tabelle erscheint stattdessen Fehler 3146 „ODBC-Aufruf fehlgeschlagen“.

Umgebung

Access bzw. DAO mit verknüpften Tabellen, mit jedem ODBC-Treiber, auch mit dem ODBC Driver 18 von Microsoft.

Ursache

Scheitert beim Weiterlesen eine Folgeseite – etwa durch die Anfragengrenze des Dienstes (429), eine Zeitgrenze oder einen Netzabbruch –, meldet der Treiber den Fehler (SQL_ERROR). GetRows ruft danach endlos SQLFreeStmt(SQL_CLOSE) auf und kehrt nie zurück, gleich mit welchem SQLSTATE. Mit dem Treiber von SQL Server ist es dasselbe, etwa bei einer Sicht, die mitten im Lesen durch null teilt. Es ist ein Verhalten von DAO, nicht des Treibers.

Behebung

  1. Ersetzen Sie GetRows durch eine Schleife mit MoveNext:

    Do Until rs.EOF
        ' … verarbeiten …
        rs.MoveNext
    Loop

    MoveNext kehrt bei demselben Fehler sofort mit 3146 zurück, und Ihre Fehlerbehandlung greift.

  2. Klären Sie den eigentlichen Fehler beim Weiterlesen mit der Ablaufverfolgung. Gegen den Datendienst zählen Folgeseiten nicht gegen die Anfragengrenze; ein 429 beim Weiterlesen deutet auf selbst gebaute Folgeadressen oder einen anderen Dienst.

Prüfung

Derselbe Vorgang endet mit einer Fehlermeldung statt zu hängen, oder er läuft durch.

Verwandte Themen

de/wiki/data-conectivity/odata-odbc/troubleshooting/getrows-hangs.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille