Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   AnyDAC mit Master-Detail funkt nicht (https://www.delphipraxis.net/172312-anydac-mit-master-detail-funkt-nicht.html)

Kostas 25. Dez 2012 17:35

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

AnyDAC mit Master-Detail funkt nicht
 
Hallo Zusammen,

zunächst einmal frohe Weihnachten an alle Forum User.

Ich versuche eine simples Master-Detail zu erzeugen, gelingt mir jedoch nicht.
Auf einer Form habe ich als Master ein TADQuery das SQL
Code:
SELECT PASSEINGAENGEID, PASSEINGANGAM, VEREINID, ABGESCHLOSSEN
FROM PASSEINGAENGE
eigegeben. Außer Automatic Incrementing sonst nichts eingestellt!
Die DataSource umbenannt in dsPASSEINGAENGE

Fürs Detail auf der Form ein weiteres TADQuery mit dem SQL
Code:
SELECT PASSEINGANGPOSID, PASSEINGAENGEID, PASSNR, VORNAME, NACHNAME
FROM PASSEINGANGPOS
Ebenfalls unter Options nur die AutoInc infos eingetragen sonst nichts!
Dessen DataSource umbenannt in dsPASSEINGANGPOS

In der DetailQuery das Prop. MasterSource=dsPASSEINGAENGE und MasterField=PASSEINGAENGEID

Das ist alles. Ich hätte jetzt erwartet dass Master-/Detail bereits funktioniert. Doch das tut es nicht. Weder die Datensätze werden gefiltert, noch wird beim Detail.Append das Feld PASSEINGAENGEID automatisch gesetzt.

Hat jemand eine Idee was ich dabei übersehe?
Laut Handbuch ist keine weitere Aktion notwendig.
Ich habe auch alles gelöscht und neu gemacht, doch ohne Erfolg.

Gruß Kostas

Bummi 25. Dez 2012 19:35

AW: AnyDAC mit Master-Detail funkt nicht
 
Ich kenne AnyDac nicht aber automatisch gesetzt wird üblicherweise über die IndexFieldNames des Detaildatasets. Ansonsten kannst Du im AfterInsert manuell setzen.


Unabhängig davon, mit ADO geht folgendes um nicht alles immer zu ziehen un zu filtern, k.A. ob das bei AnyDac auch geht:
Code:
SELECT PASSEINGANGPOSID, PASSEINGAENGEID, PASSNR, VORNAME, NACHNAME
FROM PASSEINGANGPOS
where PASSEINGAENGEID=:PASSEINGAENGEID

Kostas 25. Dez 2012 21:06

AW: AnyDAC mit Master-Detail funkt nicht
 
Hallo,

das ist die Variante über Parameter die einwandfrei funktioniert.

Im Handbuch ist eine weiter Methode "Range based M/D" beschrieben
die allerdings nicht funktioniert bzw. ich etwas übersehe.

Im Handbuch steht:
Range based M/D
To setup the range based M/D relationship, perform the following steps:
1. Drop TADQuery ( see page 468) (or any other AnyDAC dataset) on a form. Name it qOrders. Setup it - lets assign the
SQL ( see page 490):
SELECT * FROM {id Orders}
2. Drop TDataSource on a form. Name it dsOrders. Set it DataSet to qOrders.
3. Drop TADQuery ( see page 468) on a form. Name it qOrderDetails. Setup it - lets assign the SQL ( see page 490):
SELECT * FROM {id Order Details}
Then set MasterFields ( see page 482) to ORDERID, IndexFieldNames ( see page 480) to ORDERID and MasterSource
( see page 482) to dsOrders. The base setup is finished.
So, how it works ? AnyDAC builds for qOrderDetails a list of pairs - qOrders and qOrderDetails fields, where fields in each
pair have the same position, master fields in MasterFields ( see page 482), detail fields in IndexFieldNames ( see page
480).
When the current qOrders record is changed, AnyDAC applies the range to qOrderDetails, where details fields are equal to
corresponding master fields. In our case qOrderDetails OrderID field is equal to qOrder OrderID field.

Naja, egal ich werde weitermachen mit Parameter. Dankeschön.

Uwe Raabe 25. Dez 2012 21:32

AW: AnyDAC mit Master-Detail funkt nicht
 
Hast du IndexFieldNames passend gesetzt?

MasterField gibt die Feldnamen in der MasterTabelle an, die mit den IndexFieldNames der DetailTabelle korrelieren müssen. In deinem Fall sollte das wohl in beiden Fällen PASSEINGAENGEID sein.

Kostas 25. Dez 2012 21:50

AW: AnyDAC mit Master-Detail funkt nicht
 
Hallo Uwe,

ah, IndexFieldNames muss in der Master Query und in Detail Query auf das
gleiche Masterfeld = PASSEINGAENGEID stehen. Jetzt funktioniert auch damit.
Besten Dank Uwe. Das habe ich so nicht verstanden, sondern nur in der Detail Query.

Bestan Dank Uwe.

Gruß Kostas

Uwe Raabe 25. Dez 2012 22:59

AW: AnyDAC mit Master-Detail funkt nicht
 
Der Index der Master-Query ist egal. Nur bei der Detail-Query muss der Index zu dem MasterField passen.

Kostas 26. Dez 2012 22:33

AW: AnyDAC mit Master-Detail funkt nicht
 
Hallo Uwe,

ja sehr komisch, jetzt funktioniert auch wenn ich den Index nur bei der Detail-Query setze. Genau das habe ich vorher mehrfach ausprobiert. Es hat
nie funktioniert. Ich habe keine Ahnung warum es vorher nicht ging.

Dankeschön nochmals Uwe.

Gruß Kostas


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

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