Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL OData-ODBC-Treiber » Fehlerbehebung beim OData-ODBC-Treiber » Access meldet „ODBC-Aufruf fehlgeschlagen“ bei Summen oder Verbünden

Access meldet „ODBC-Aufruf fehlgeschlagen“ bei Summen oder Verbünden

Eine Abfrage über verknüpfte Tabellen des Treibers scheitert mit Fehler 3146 „ODBC-Aufruf fehlgeschlagen“, während einfache Abfragen derselben Tabellen laufen. Typisch: eine Summenabfrage (Summe, Anzahl, Gruppierung), ein Verbund zweier verknüpfter Tabellen, eine Unterabfrage.

Umgebung

Microsoft Access und Access-Runtime mit verknüpften Tabellen über {Wkl OData}; ebenso jede andere ODBC-Anwendung, die solche Anweisungen schickt.

Ursache

Access schickt Summen, Gruppen und Verbünde über verknüpfte Tabellen als eine Anweisung an den Treiber und rechnet sie nicht selbst, wenn der Treiber ablehnt (auch wenn der Treiber keine SQL-Konformität meldet). Der Treiber rechnet ebenfalls nichts lokal; er übersetzt, reicht durch oder lehnt ab:

AnweisungLäuft, wenn …
Summen, Gruppen, HAVING, DISTINCT über eine Tabelleder Dienst Gruppieren ankündigt ($apply) oder eine Adresse für eigene Anweisungen besteht
Verbund zweier Tabellen, Unterabfrage, Rechnen zwischen Aggregaten (SUM(a) - SUM(b))eine Adresse für eigene Anweisungen besteht

Fehlt beides, lehnt der Treiber mit SQLSTATE 42000 ab, und Access zeigt nur 3146. Der Datendienst Wkl.Data.Gateway nennt die Adresse jedem Aufrufer, dessen Regel den Alias nennt, solange geprüfte Anweisungen am Alias eingeschaltet sind (Vorgabe). Lehnt er eine Anweisung ab, weil ein genanntes Objekt nicht freigegeben ist, kommt 403 als 28000 an, und Access zeigt ebenfalls 3146.

Behebung

  1. Lesen Sie den Grund in der Ablaufverfolgung des Treibers: Setzen Sie TRACEFILE= in der Verbindung oder die Umgebungsvariable WKL_ODATA_ODBC_TRACE, starten Sie Access neu, und wiederholen Sie die Abfrage. Steht dort, dass der Dienst kein Gruppieren ankündigt oder dass die Anweisung nicht übersetzbar ist, fahren Sie mit Schritt 2 fort.
  2. Lassen Sie den Betreiber prüfen, ob der Dienst eigene Anweisungen für Ihren Aufrufer annimmt: beim Datendienst Wkl.Data.Gateway geprüfte Anweisungen am Alias und eine Regel, die den Alias und jedes Objekt der Abfrage freigibt; siehe Pass-Through-Abfragen einrichten, Schritt 1. Meldet der Dienst die Adresse selbst, ist auf dem Arbeitsplatz nichts zu ändern. Nennen die Verbindungen der Datei PASSTHROUGH ausdrücklich, muss jede Verbindung der Datei sie nennen.
  3. Nimmt der Dienst keine eigenen Anweisungen an, bauen Sie die Abfrage um: Summen über eine einzelne Tabelle laufen gegen einen Dienst mit $apply auch so; einen Verbund legen Sie als Sicht in der Datenbank an und verknüpfen die Sicht.
  4. Starten Sie Access neu, nachdem der Dienst geändert wurde: Access teilt eine Verbindung je DATABASE-Wert und liest die Angaben des Dienstes beim Verbinden.

Prüfung

Dieselbe Abfrage liefert Zeilen. In der Ablaufverfolgung steht statt der Abweisung eine Anfrage mit $apply= (Gruppieren) oder eine Anfrage an die Adresse für eigene Anweisungen (…/sql.json).

Verwandte Themen

de/wiki/data-conectivity/odata-odbc/troubleshooting/odbc-call-failed-on-totals-or-joins.txt · Zuletzt geändert: von Wolfgang van der Stille