Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB sortiern trotz MasterSource (https://www.delphipraxis.net/51075-db-sortiern-trotz-mastersource.html)

Christian18 5. Aug 2005 12:17

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

DB sortiern trotz MasterSource
 
Hallo,

ich habe ein kleines Problem mir meiner Paradox7 Tabelle. Also ich habe eine Tabelle in der sind Kundendaten gespeichert. Dann habe ich auch noch eine andere Tabelle in der sind die Aufträge gespeichert. Diese beiden Tabellen stehen im bezug zueinander. Also ich meine das die Auftrag Tabelle an der Tabelle Kunden drann hängt. Das habe ich über die MasterSource gemacht. So jetzt wollte ich das so machen, das ich die Auftrag Tabelle sortieren kann. also nach datum und so. das wollte ich auch über die Eigenschaft IndexName machen, aber das funktioniert leider nicht, da ich bei der Auftrags Tabelle sind einen Index drinn habe. Und zwar den der die beiden Tabellen zusammen hält. Wie kann ich jetzt meine Auftrag Tabelle sortieren???

Mit freundlichen Grüßen

Christian18

Union 5. Aug 2005 12:34

Re: DB sortiern trotz MasterSource
 
Zitat:

Zitat von Christian18
Hallo,

ich habe ein kleines Problem mir meiner Paradox7 Tabelle. Also ich habe eine Tabelle in der sind Kundendaten gespeichert. Dann habe ich auch noch eine andere Tabelle in der sind die Aufträge gespeichert. Diese beiden Tabellen stehen im bezug zueinander. Also ich meine das die Auftrag Tabelle an der Tabelle Kunden drann hängt. Das habe ich über die MasterSource gemacht. So jetzt wollte ich das so machen, das ich die Auftrag Tabelle sortieren kann. also nach datum und so. das wollte ich auch über die Eigenschaft IndexName machen, aber das funktioniert leider nicht, da ich bei der Auftrags Tabelle sind einen Index drinn habe. Und zwar den der die beiden Tabellen zusammen hält. Wie kann ich jetzt meine Auftrag Tabelle sortieren???

Mit freundlichen Grüßen

Christian18

Verwende anstelle der "Child"-Tabelle eine Query mit einem Parameter, der so heisst wie das Schlüsselfeld in der "Parent"-Tabelle. Dann setze die Query-Eigenschaft DataSource auf die Datasource, die mit der "Parent"-Tabelle verknüpft ist. Alles weitere (Close, ParambyName..., Open der Query) geht dann automatisch. Der Effekt ist der gleiche. Nur hast Du dann in der "Child"-Query die Option, ein vom Schlüsselfeld abweichendes ORDER BY zu verwenden.

Christian18 20. Aug 2005 11:20

Re: DB sortiern trotz MasterSource
 
Hallo,

hat jemand auch noch eine andere Idee. Wie ich das machen kann??? Frage: siehe oben.

MFG Christian18

mschaefer 20. Aug 2005 12:14

Re: DB sortiern trotz MasterSource
 
Hallo Christian,

Habe früher viel mit Paradox gemacht und ich bin über Unzulänglichkeiten der BDE mit Paradox fast dem Wahn verfallen. Da sind viele Macken drin und deswegen rate ich Dir zunächst mal davon ab Paradox weiterzuverwenden, wenn Du da mehr mit aufbauen magst.

Das mit den Indexen funktioniert leider auch nur in der Haupttabelle richtig. In der Detailtabelle gab es da immer Probleme. Der Ansatz es mit einer Query zu machen ist der richtige Weg. Das Problem ist leider, das bei sortierten Mehrtabellenqueries bei BDE-Paradox das RequestLive verloren geht, also die Edierbarkeit und damit ist eine Query alleine so keine Lösung.


NACHTRAG 1: Mein Weg war dann es über Eintabellenqueries zu machen, um immer eine Live-Query (änderbar) zu haben. Das ist, wenn man es weiß, auch recht einfach. Du hast eine Query für die Mastertabelle mit Orderstatement. An diese Query ist dann natürlich auch eine DataSource angeschlossen. Im OnChangeEvent dieser Master-DataSource baust Du die SQL-Abfrage der (Where-Teil) der Detail-Query (Deine Auftragstabelle) zusammen (Wehere Referenzfeld = Master-Eid). Damit hast Du zwei edierbare Tabellen, die sich synchronisieren. Das geht sogar in tieferer Staffelung. Die Verfahrensweise hat mich doch recht lange bei der lizenzfreien Paradoxtabelle gehalten. Bei komplexeren Auswertungen ist dann mit Paradox natürlich schluss.

NACHTRAG 2: Absolute Database ist eine Datenbank mit der man gut zurechtkommt, wenn man von der Paradoxschiene her kommt. Letzlich bin ich bei Firebird gelandet, aber der Schritt ist doch recht happig.


Viele Grüße // Martin

MrSpock 21. Aug 2005 18:40

Re: DB sortiern trotz MasterSource
 
Hallo,

also ich kann die Erfahrung von mschaefer nicht als meine Erfahrung wiedererkennen. Ich habe in der Vergangenheit sehr viel mit Paradox gemacht und viele Anwendungen laufen noch heute, ohne dass sich ein Kunde beschwert hätte. Neue Projekte würde ich aber auch nicht mehr mit Paradox machen, weil die BDE ja nicht mehr gepflegt wird.

Du könntest in der Auftragstabelle einen zusammengesetzten Schlüssel als Sekundärindex benutzen, dann kannst du mit dem ersten Feld dieses Indexes die Tabellen verbinden und nach dem 2. Feld wird dann automatisch sortiert.

Christian18 27. Aug 2005 08:52

Re: DB sortiern trotz MasterSource
 
Hallo,

ich habe das jetzt mal versucht und habe es leider nicht geschafft. Kannst du mir vieleicht ein Detailiertes Beispiel geben oder mal eine solche DB hier anhängen???

MFG Christian18

MrSpock 27. Aug 2005 13:49

Re: DB sortiern trotz MasterSource
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Christian18,

ich hab schnell ein Beispiel zusammengestöpselt :shock: .

Definiere noch einen ALIAS BDETest, der auf das Verzeichnis mit den beigefügten Tabellen zeigt und los gehts. Das Programm nutzt ID als Master / Detailverbindung, sortiert aber die Detailtabelle nach Sort2, obwohl ID / Sort1 der Schlüssel ist.

mschaefer 31. Aug 2005 12:46

Re: DB sortiern trotz MasterSource
 
Moin, moin,

Nachtrag zu Paradox: MrSpock hat recht, dass mit den Indexen ist bei Paradox kein Problem! Nachdem ich mal wieder auf eine Anwendung einen Blick geworfen habe, zeigte sich, dass Request-Live nicht wegen dem Index, sondern aufgrund einer Group by und Having Klausel über zwei Tabellen versagt hat. Das sind aber Grenzen die letzlich in der BDE und nicht im Datenbankformat liegen. Die Variante zwei aufeinander abgestimmte Queries zu nehmen läuft noch heute und liefert eine Live-Datenmenge (also änderbar). Das praktische ist dabei, dass man auch Mehrfachkaskadierungen durchführen kann.

Zu Alias: Bei mir hat die DB immer in einem Unterverzeichnis des Programms gelegen und da konnte man dieses über ExtractFilepath(...) + Dateiverzeichnis im Programm ermitteln. Die Aliasdefinition entfällt somit.

Technisch ist es übrigens kein Problem lediglich die benötigten BDE-Dateien in ein Programmunterverzeichnis zu legen und diese bei Programmstart dynamisch zu laden. Damit ist überhaupt keine BDE-Installation notwendig, da das Programm in der Lage ist, Dateien von seinem Standort aus zu ermitteln. Man hat also eine mit Unterverzeichnissen völlig variabel verschiebbare Anwendung. Allerdings bin ich mir über die rechtliche Erlaubnis solcher "Tricks" durch Borland nicht im klaren, da die BDE so nicht mit einem zugelassenen Installationsporgramm installiert wird, sondern die wenigen dll´s für Paradox einfach in ein Verzeichnis kopiert werden.


Fazit: Der vulkanische Ansatz der Indexierung ist präzise!

Würde aber zudem zu Queries raten, da die Filterung effizienter ist und man auch mit Query-Änderung, durch das Programm, variable Sortierungen für den User ermöglichen kann. Zudem empfinde ich eine notwendige Alias-Definition als schwierig aus der Ferne zu warten und deshalb habe ich den Weg gewählt sie ganz zu umgehen.



Grüße // Martin


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