Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehlerhafte Feldinformationen beim Öffnen einer FDQuery (https://www.delphipraxis.net/196540-fehlerhafte-feldinformationen-beim-oeffnen-einer-fdquery.html)

MasterDetail 29. Mai 2018 15:07

Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: FireDAC

Fehlerhafte Feldinformationen beim Öffnen einer FDQuery
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

wir haben das Phänomen, dass beim Öffnen einer FDQuery die Konfiguration der automatisch erstellten Felder fehlerhaft sind:
FireDAC erkennt nicht, dass manche Felder gejoint/kalkuliert sind.
Dies hat zur Folge, dass alle Felder in .Fields als persistente Felder der Basistabelle angesehen werden, und bei einem .Post versucht wird,
diese Felder aus der Basistabelle zu aktualisieren, was in einem sofortigen Fehler resultiert.
Auszug aus der Log:
Zitat:

177 Query SELECT A.ARTIKEL_SPERRHINWEIS, LAST_INSERT_ID() AS id,
FROM liefdb2A
WHERE A.id = LAST_INSERT_ID()
177 Query ROLLBACK
Das Feld "ARTIKEL_SPERRHINWEIS" ist hierbei ein gejointes Feld, es existiert nicht in der Tabelle "liefdb2".

Die FDQuery wird mit einem Statement geöffnet, welches ein Subselect beinhaltet. Dies ist in unserer Philosophie essentiell aus bestimmten Gründen.
Das Statement sieht etwa so aus:
Code:
SELECT * FROM (SELECT
  liefdb2.*,
  artstamm.FARBE,
  artstamm.SPERR_BENENNUNG,
  artstamm.ARTIKEL_SPERRHINWEIS,
FROM liefdb2
LEFT JOIN artstamm ON liefdb2.sachnr = artstamm.sachnr
LEFT JOIN arts_mm ON liefdb2.sachnr = arts_mm.sachnr
) A ORDER BY ID
Nachvollzogen haben wir die falschen Informationen im FireDAC-Abfrageeditor. Dort kann man sich die erhaltene Struktur anzeigen lassen, siehe Screen "falsch1.jpg".
Dabei ist das Feld WERANL das letzte persistente Feld aus der Tabelle "liefdb2".

Das phänomenale hierbei ist, dass wenn man im besagten Screenshot "falsch1.jpg" das "LEFT" bei "LEFT JOIN artstamm" weglässt, es auf einmal richtig funktioniert, und die gejointen Felder richtig erkannt werden, siehe Screen "richtig2.jpg".

Lässt man wiederum das "ORDER BY ID" am Ende weg, funktioniert es wiederum nicht, siehe Screen "falsch3.jpg".

Wir können uns dieses Verhalten nicht rational erklären, weshalb wir uns an das Forum wenden möchten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz