Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Master/detail via Matsersource und Index (https://www.delphipraxis.net/189241-master-detail-via-matsersource-und-index.html)

delphia 20. Mai 2016 16:49

Datenbank: DBISAM • Version: 2.12 • Zugriff über: D5#1

Master/detail via Matsersource und Index
 
Hallo,

ich habe hier eine ältere Applikation zu pflegen, daher D5#1 und DBISAM 2.12. Keine Chance zu wechseln.

Zum Problem: Zur Laufzeit werden mehrere Tables erzeugt und über eine einfach Anweisung wie diese

Code:
tbl.IndexName := 'secondary';
tbl.Mastersource := dstAdressen;
tbl.MasterFields := 'ID';
zum Detail einer bereits zur Designzeit erzeugten Mastertabelle.
Alles arbeitet einwandfrei, die Detail Datensätze werden sauber gelistet. Außer in einem Fall, nämlich dann, wenn in dem vereinbarten Index ein Textfeld enthalten ist. Das erste Feld im Index "secondary" ist immer die "ID", danach kann das Textfeld an beliebiger Stelle kommen. Entfernt man das Textfeld aus dem Index, arbeitet alles wie erwartet. Setzt man es wieder ein, werden keine Datensätze mehr gelistet.

Als workaround habe ich anstatt dieser Verknüpfungen eine mit Ranges codiert. Damit zeigt sich das gleiche Verhalten. Alles gut, bis ein Textfeld im Index ist.

Fragen:
Habe ich evtl etwas Grundlegendes übersehen?
Ist der Fehler bei DBISAM bekannt? Von Elevate ist nichts zu erfahren, wegen deren Supportpolitik (kein Plan, keine Auskunft).
Ist das evtl ein Fehler der TDataset-Implementation in D5?

Bin für alle sachdienlichen Hinweise dankbar. Vielen Dank für die Aufmerksamkeit.

haentschman 21. Mai 2016 06:31

AW: Master/detail via Matsersource und Index
 
Moin...:P

Hatte eine kurze Zeit auch mal das Vergnügen mit ElevateDB und DBISAM... Deinen konkreten Fall hatte ich dabei aber nicht. Als Workaround vieleicht der Vorschlag die speziellen Fälle via SQL abzuarbeiten. (Statt der Table ein select * mit order by) 8-)

PS: Bei Master Detail wäre es sogar (aber leider nicht immer) besser die Detaildaten jeweils beim Wechsel der Masterdaten neu zu holen. :zwinker:

delphia 21. Mai 2016 13:36

AW: Master/detail via Matsersource und Index
 
Zitat:

Zitat von haentschman (Beitrag 1338600)
Moin...:P

Hatte eine kurze Zeit auch mal das Vergnügen mit ElevateDB und DBISAM... Deinen konkreten Fall hatte ich dabei aber nicht. Als Workaround vieleicht der Vorschlag die speziellen Fälle via SQL abzuarbeiten. (Statt der Table ein select * mit order by) 8-)

Daran habe ich auch schon gedacht. Jedoch, beim Master handelt es sich um eine Tabelle mit mehreren Tausend Datensätzen und den Details um mindestens 4 Tabellen, mit unterschiedlichem Umfang, von 100 bis 2500 Sätzen und wachsend. Das ganze im FileServer, Multiuserbetrieb über ein LAN. Jetzt hatte ich irgendwo, im Handbuch oder beim Elevate auf der Seite gelesen, dass SQL hier langsamer wäre als die Implementation über diese M/D Variante. Daher wollte ich die SQL Lösung nur im Notfall anwenden.

Zitat:

Zitat von haentschman (Beitrag 1338600)
PS: Bei Master Detail wäre es sogar (aber leider nicht immer) besser die Detaildaten jeweils beim Wechsel der Masterdaten neu zu holen. :zwinker:

Das würde ich mittels Expressionfilter einer SQL Lösung vorziehen.

haentschman 21. Mai 2016 15:36

AW: Master/detail via Matsersource und Index
 
:zwinker: Ich meinte nicht die gesamten Detaildaten sondern nur die Daten die zum Masterdatensatz gehören. Die kannst du wunderbar "zusammenjoinen". Da spielt es keine Rolle ob die Detaildaten aus 1..n Tabellen stammmen.

fs999 29. Jul 2016 09:20

AW: Master/detail via Matsersource und Index
 
Hallo,

Ein wenig spät aber versuchen Sie es mit IndexFieldNames anstatt IndexName...

mfG

nero666 23. Mär 2018 10:39

AW: Master/detail via Matsersource und Index
 
Hallo,

obwohl bereits einige Zeit ins Land gegangen ist, wollte ich den Tip aus dem Eintrag von fs999 bestätigen, da er mir geholfen hat

Delphi 6 / DBISAM 4

Index war ein String-Feld -> Master-Detail-Verbindung hat nicht funktioniert.
Umstellung der Verbindung auf "IndexFieldNames" funktioniert -> Detaildatensatz wird angezeigt.

MfG


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