Hallo zusammen,
ich zerbreche mir seit Tagen darüber den Kopf und habe mich nun dazu entschieden, einmal hier im Forum nachzufragen.
Eigentlich bin ich mir auch nicht sicher, ob ich nun hier beim Thema Datenbanken oder eher beim Thema Algorithmen posten soll. Nun versuche
ich es einfach mal hier.
(Kurze evtl. weiterführende Information : Das ganze Konstrukt basiert auf einer
FB-Datenbank, ich verwende Delphi XE2, und habe die Devart
TIBCQuerys im Einsatz.)
Es geht um folgendes Problem. Es sollen variabel verschiedene Tabellen mit einer Master-Detailverknüpfung miteinander verbunden werden und
aus jeder Tabelle sollen alle abhängigen Datensätze ausgelesen und anschließend als
csv-Dateien exportiert werden..
Hier mal eine schematische Darstellung (wie gesagt, die Anzahl der Tabellen ist dynamisch und variabel) :
Tabelle 1
--- Tabelle 2
--- Tabelle 3
--- Tabelle 4
--- Tabelle 5
--- Tabelle 6
Tabelle 7
--- Tabelle 8
--- Tabelle 9
--- Tabelle 10
Tabelle 1 und Tabelle 7 sind jeweils die Mastertabellen, daran hängen in einer Master-Detailverknüpfung (1:n) jeweils die Tabellen, ähnlich wie die Skzizze zeigt..
Ein Beispiel .. (nur auf Tabelle 1,2,3 und 4 bezogen) :
Tabelle 1 enhält z.B. alle Belege , Tabelle 2 könnte z.B. die Belegpositionen enthalten (1 Beleg / 10 Positionen), Tabelle 3 wäre z.B. eine Artikeltabelle und Tabelle 4 wiederum könnte z.B. die Tabelle Kunden sein, die auch mit der Tabelle Beleg verknüpft ist.
Und nun ist die Herausforderung, alle Belege zu durchlaufen, dazu zu jedem Beleg alle Positionen, zu jeder Position alle Artikel (blödes Beispiel, weil das ja nur ein Artikel sein kann, aber ist ja auch nur ein Beispiel) und ebenfalls ein blödes Beispiel der Kunde, der an der Beleg hängt.
Dabei gilt, dass die Anzahl der Tabellen variabel sein kann..
Also es müsste nun so sein, dass
- erst der erste Datensatz von Tabelle 1,
- dann der erste Datensatz von Tabelle 2,
- dann alle Datesätze von Tabelle 3
- dann der zeite Datensatz von Tabelle 2,
- dann wieder alle Datensätze von Tabelle 3
....
- der zweite Datensatz von Tabelle 1
...
durchlaufen werden..
Vielleicht gibts aber auch noch nen ganz anderen Ansatz..
Nun ist es ja so, dass man von Tabelle 1 (TQuery) keinen Bezug auf Tabelle 2 (TQuery) erhält (also rein über das Objekt TQuery, TIBCQuery,.. ).. da gibts ja nix mit Clientsource oder so sondern nur von dem jeweils untergeordneten Objekt die Mastersource..
ist ja auch klar, weil es ja mehrere ClientSources geben kann. Wie durchläuft man die Tabellen am besten..
Ich dachte erst an eine rekursive Funktion, aber da man sich ja anhand der fehlenden ClientSource nicht von oben nach unten durchreihen kann, geht das wohl eher nicht..
Das kann doch eigentlich nicht so schwer sein, aber irgendwie hab ich mich da komplett verlaufen.
Würde mich über jede Idee oder jeden Ansatz freuen.
Danke schon mal.