Color scheme: Riviera
You are here: start » de » Dokumentation » Datenintegration und Datenzugriff » WKL OData-ODBC-Treiber » Anleitungen zum OData-ODBC-Treiber » So richten Sie Pass-Through-Abfragen ein

So richten Sie Pass-Through-Abfragen ein

Eine Pass-Through-Abfrage schickt ihr SQL unverändert an die Datenbank hinter dem Dienst – für Verbünde, Gruppierungen über mehrere Tabellen, Änderungen vieler Zeilen oder Prozeduraufrufe, die sich nicht als OData-Anfrage ausdrücken lassen. Über denselben Weg laufen Abfragen über verknüpfte Tabellen, die Access als eigene Anweisung schickt (Verbünde, Unterabfragen).

Lösungsübersicht

Der Treiber reicht eine Anweisung an die Adresse für eigene Anweisungen weiter. Diese Adresse nennt entweder der Dienst in seinem Schemadokument – dann ist auf dem Arbeitsplatz nichts einzustellen – oder die Verbindung mit PASSTHROUGH. Ob die Anweisung laufen darf, entscheidet der Dienst; der Treiber prüft sie nicht.

Umsetzung

  1. Klären Sie mit dem Betreiber, welche Anweisungen der Dienst annimmt. Das legt der Dienst fest, nicht der Treiber. Der Datendienst Wkl.Data.Gateway kennt zwei Arten:

    ArtWas läuftVoraussetzung im Dienst
    Geprüfte AnweisungenSELECT mit Verbund, Unterabfrage, UNION, Gruppierung; INSERT, UPDATE, DELETE; Aufruf einer Prozedur. Der Dienst prüft jedes genannte Objekt gegen die Rechte des Aufrufersab Werk eingeschaltet (AllowCheckedStatements); jeder Aufrufer, dessen Regel den Alias nennt. Eine nur lesende Regel erlaubt nur lesende Anweisungen
    Ungeprüfte Anweisungenbeliebiges SQL einschließlich Schemaänderungen, mit den Rechten der Anmeldung, unter der es läuftAllowPassThrough: true am Alias und eine nicht nur lesende Regel; beim Dienstschlüssel oder unter der Anmeldung des Alias zusätzlich das Recht sql

    Abfragen über verknüpfte Tabellen, die Access selbst erzeugt, sind geprüfte Anweisungen; sie brauchen in der Regel keine Freischaltung. Einzelheiten stehen in „Aliasse, Katalog und die zentrale Regel“ (Dokumentation des Datendienstes).

  2. Legen Sie in Access eine Pass-Through-Abfrage an: Wählen Sie Erstellen > Abfrageentwurf aus, schließen Sie den Dialog für Tabellen, wählen Sie im Menüband Pass-Through aus, und geben Sie das SQL ein.
  3. Setzen Sie die Verbindung der Abfrage: Geben Sie im Eigenschaftenblatt unter ODBC-Verbindung dieselbe Zeichenfolge ein wie bei den verknüpften Tabellen derselben Datei, etwa

    ODBC;DRIVER={Wkl OData};URL=https://daten.example.com/odata/v4/fachdaten/dbo/;AUTH=WINDOWS

    Liefert die Anweisung kein Ergebnis (UPDATE, EXEC ohne Rückgabe), setzen Sie Liefert Datensätze auf Nein.

    Access mit der Pass-Through-Abfrage qryUmsatzJeKunde in der SQL-Ansicht: im Menüband ist Pass-Through ausgewählt, rechts das Eigenschaftenblatt mit ODBC-Verbindung „ODBC;DSN=Fachdaten“ und „Liefert Datensätze: Ja“

  4. Führen Sie die Abfrage aus. Access übernimmt Felder und Typen aus der Beschreibung, die der Dienst liefert.

    Ergebnis der Pass-Through-Abfrage im Datenblatt: Spalten Name und Summe mit drei Zeilen

Per VBA:

Dim qd As DAO.QueryDef
Set qd = CurrentDb.CreateQueryDef("qryUmsatzJeKunde")
qd.Connect = "ODBC;DRIVER={Wkl OData};URL=https://daten.example.com/odata/v4/fachdaten/dbo/;AUTH=WINDOWS"
qd.SQL = "SELECT k.Name, SUM(u.Betrag) AS Summe FROM dbo.Umsatz u JOIN dbo.Kunde k ON k.Id = u.Kunde GROUP BY k.Name"
qd.ReturnsRecords = True

Ergebnis: Die Abfrage liefert dieselben Zeilen wie dieselbe Anweisung unmittelbar in der Datenbank.

Hinweise

  • Eine Adresse für alle Verbindungen derselben Datei. Access teilt eine offene Verbindung mit jeder Abfrage, deren Verbindungszeichenfolge denselben DATABASE-Wert trägt – auch wenn sie sich in PASSTHROUGH unterscheidet. Wurde zuerst eine Tabelle ohne die Adresse verknüpft, erreicht die Pass-Through-Abfrage den Treiber über deren Verbindung und wird abgewiesen. Nennen Sie PASSTHROUGH deshalb in jeder Verbindung der Datei oder in keiner (dann gilt die Adresse des Dienstes).
  • Die Zeilenzahl einer Änderung zeigt Access nicht. Nach einer Pass-Through-Abfrage meldet RecordsAffected in Access 0; Access fragt den Treiber gar nicht danach. Unmittelbar über ODBC meldet der Treiber die richtige Zahl.
  • Gebundene Werte (? aus einer Anwendung) gehen als Parameter an die Datenbank, nie als Text. Ein Binärwert reist dabei base64-kodiert; eine Anweisung, die einen Binärwert vergleichen muss, schreibt ihn besser selbst hin.
  • Keine Folgeseiten. Eine durchgereichte Anweisung wird ganz gelesen; die Zeilenobergrenze des Dienstes begrenzt sie. Der Treiber liest die Antwort zeilenweise, während sie ankommt. Der Datendienst Wkl.Data.Gateway schickt ein Ergebnis ab 500 Zeilen gestreamt; bricht ein solcher Strom mittendrin ab, erhält die Anwendung 08S01 statt eines gekürzten Ergebnisses.
  • Ohne Adresse für eigene Anweisungen weist der Treiber nicht übersetzbare Anweisungen mit 42000 ab; siehe „ODBC-Aufruf fehlgeschlagen“ bei Summen oder Verbünden.

Verwandte Themen

de/wiki/data-conectivity/odata-odbc/how-to/set-up-pass-through-queries.txt · Last modified: by Wolfgang van der Stille