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
Ersetzen Sie
GetRowsdurch eine Schleife mitMoveNext:Do Until rs.EOF ' … verarbeiten … rs.MoveNext LoopMoveNextkehrt bei demselben Fehler sofort mit 3146 zurück, und Ihre Fehlerbehandlung greift.- Klären Sie den eigentlichen Fehler beim Weiterlesen mit der Ablaufverfolgung. Gegen den Datendienst zählen Folgeseiten nicht gegen die Anfragengrenze; ein
429beim 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.