Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   AnyDAC Query mit Join aktualisiert die Felder aus Join Table nicht (https://www.delphipraxis.net/173064-anydac-query-mit-join-aktualisiert-die-felder-aus-join-table-nicht.html)

Kostas 5. Feb 2013 15:10

Datenbank: Firebird • Version: 2.5 • Zugriff über: AnyDAC

AnyDAC Query mit Join aktualisiert die Felder aus Join Table nicht
 
Hallo Zusammen,

die Anforderung vorab: Ich benötige eine Möglichkeit die Felder in einem Join einer TADQuery zu aktualisieren ohne ein Post der Query durchführen zu müssen, wenn etwa die Adresse angezeigt werden soll.

Ich habe eine TADQuery mit dem Select als Beispiel:
Code:
SELECT B.BELEGID
     , B.BELEDATUM
     , B.ADRESSID
     , A.FIRMA
     , A.STRASSE
     , A.PLZ
     , A.ORT
FROM BELEG B
JOIN ADRESSEN A on (A.ADRESSID = B.ADRESSID)
Ich füge einen neuen Datensatz und übergebe dem Feld B.ADRESSID eine gültige ADRESSID.
Jetzt würde ich gerne irgendwie die Adresse aktualisieren, ohne ein Post der Query durchführen zu müssen da noch weitere required Felder vorhanden sind die noch kein Wert haben. Selbst nach dem Post werde die Felder nicht aktualisiert. Ich muss ein Refresh durchführen. Danach sind alle Felder sichbar.

Der AnyDAC-Support meinte, das automatische aktualisieren der Felder wird nicht unterstützt.
Ich soll mir TADUpdateSQL FetchRowSQL anschauen. Das habe ich gemacht, doch leider ohne Erfolg.
Ich habe alles möglich ausprobiert für FetchRowSQL nichts hat funktioniert.
Weis jemand wie FetchRowSQL funktioniert?

Gruß Kostas

sx2008 5. Feb 2013 16:36

AW: AnyDAC Query mit Join aktualisiert die Felder aus Join Table nicht
 
Es ist immer ein Problem eine gejointe Datenmenge zu aktualisieren.
Denn für die Datenbank gibt es nur die Operationen INSERT, UPDATE und DELETE und diese
beziehen sich immer auf genau eine Tabelle.
Dein Problem besteht nicht nur bei AnyDAC sondern es ist ganz grundsätzlicher Art.

Das hat auch Konsequenzen auf die Benutzeroberfläche und darauf wie die Benutzer
arbeiten müssen.
Das Anlegen/Ändern von Adressen ist getrennt von dem Erfassen von Belegen.
Bevor der Benutzer einen Beleg abspeichern kann benötigt er eine Adresse, denn es besteht
eine 1:N Beziehung zwischen Adressen und Belegen.

Man muss den Benutzer so führen, dass er zuerst eine bestehende Adresse auswählt oder eine bestehende
Adresse korrigiert oder eine neue Adresse anlegt.
Erst danach darf er die Belege dazu eingeben.

Kostas 5. Feb 2013 16:59

AW: AnyDAC Query mit Join aktualisiert die Felder aus Join Table nicht
 
Zitat:

Zitat von sx2008 (Beitrag 1202175)
...
Man muss den Benutzer so führen, dass er zuerst eine bestehende Adresse auswählt oder eine bestehende
Adresse korrigiert oder eine neue Adresse anlegt.
Erst danach darf er die Belege dazu eingeben.

Ja, das ist mir auch bekannt und so arbeite ich auch schon seit mehreren Jahren.
Wenn die Adresse zuerst ausgewehlt wird und sie Teil eines Joins ist, wird die Anzeige nicht aktualisiert.
Das was mich dabei stört ist, sie wird auch nach einem post nicht aktualisiert! Erst nach einem Refresh.

Die IBO Komponenten lösen dieses Problem. Die haben ein property RefreshAfterPost.
In IBO gibt es auch ein PostRetaining so quasie "ein bischen Posten" :-)
Bei PostRetaining wird die Datenmenge vom Server abgerufen und somit werden auch die Jonings aktualisiert
der State ist immer noch bei dsInsert.

AnyDAC macht möglicherweise auch was in dieser Richtung. Der Hinweis von Dmitry mit dem TADUpdateSQL FetchRowSQL
würde mich interessieren. Wie kann ich FetchRowSQL einsetzen? Hast du das schon mal gemacht?

Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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