Summen bleiben im Servermodus leer
Ein WklGrid mit DataMode = wgdServer auf einer über den Wkl-OData-Treiber verknüpften Tabelle zeigt seine
Datensätze an, filtert und gruppiert sie, aber die Fußzeile und die Gruppenzeilen zeigen keine Summen, und
SummaryValue liefert Null. Entfernte Positionen (der letzte Datensatz einer großen Tabelle) brauchen länger als
erwartet.
Umgebung
WKL Forms Object Library ab 1.14; Tabellen, die über den Wkl-OData-Treiber mit einem Datendienst verknüpft sind, der für den Aufrufer keine Pass-Through-Anweisungen zulässt und Summen nicht in OData-Aggregate übersetzt.
Ursache
Im Servermodus liest das Raster eine verknüpfte ODBC-Tabelle über eine eigene Verbindung und fragt Anzahlen, Seiten
nach Position (OFFSET … FETCH) und Summen ab. Der Wkl-OData-Treiber gibt, was sich in OData nicht ausdrücken lässt,
als Pass-Through-Anweisung an den Datendienst weiter. Lässt der Datendienst für den Aufrufer keine
Pass-Through-Anweisungen zu, lehnt der Treiber mit SQLSTATE 42000 oder 28000 ab, und das Raster liest stattdessen über
das Access-Datenbankmodul. Dieser Weg funktioniert für jeden Datensatz, aber eine Summe, die die Quelle verweigert,
bleibt leer – das Raster meldet nicht bei jedem Neuzeichnen einen Fehler.
Lösung
- Lassen Sie den Administrator des Datendienstes Pass-Through-Anweisungen für die Datenquelle und den Aufrufer zulassen (Konfiguration des Datendienstes); dann liest das Raster an Access vorbei und berechnet Summen auf dem Server.
- Oder verwenden Sie einen Treiber und einen Datendienst, die Summen in OData-Aggregate (
$apply) übersetzen, sodass Summen ohne Pass-Through funktionieren. - Oder verwenden Sie bei einer Quelle mittlerer Größe den Speichermodus (
DataMode = wgdMemory): Das Raster lädt die Datensätze einmal und summiert sie selbst. - Prüfen Sie mit einer Abfrage, ob die Quelle die Summe überhaupt berechnet:
SELECT Sum(Betrag) FROM tblUmsaetzein einer Access-Abfrage auf derselben Verknüpfung scheitert in derselben Situation mit „ODBC-Aufruf fehlgeschlagen“.