Frage

Ist es möglich, die Ergebnisse von mehr als eine Abfrage auf mehr als eine Tabelle in eine TClientDataset zu setzen?

Genau so etwas wie

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

Ich kann nicht scheinen, einen Weg, um herauszufinden, einen Datenprovider (SetProvider) in den Ergebnissen von mehr als eine Tabelle zu einem Zeitpunkt, zu ziehen, zu erhalten.

War es hilfreich?

Lösung

Es gibt keine Möglichkeit, mehrere Tabellendaten in der gleichen TClientDataSet haben, wie Sie verweisen. Die TClientDataSet hält einen einzelnen Cursor für einen einzelnen Datensatz.

Andere Tipps

ClientDatasets kann Felder enthalten, die sich andere Datensätze sind. Also, wenn Sie drei Tabellen in einem einzelnen Datensatz erstellen möchten, erstellen Sie drei ClientDatasets die drei Ergebnismengen halten, die Sie wollen, und dann können Sie sie zu einem einzigen ClientDataSet setzen.

In diesem Artikel:

http://dn.codegear.com/article/29001

zeigen Ihnen, wie es zur Laufzeit, beides tun und zur Designzeit. Achten Sie besonders auf den Abschnitt mit dem Titel:

"Erstellen einer ClientDataSet's Struktur zur Laufzeit mit TFields"

Die einzige Möglichkeit wäre es, die Tabellen zu verknüpfen. Aber dann müssen Sie die Kriterien des Durch verbundene Fremdschlüssel verbinden bieten.

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

Nehmen wir nun an Sie mit einem Schlüssel kam (wie LineNr), die für eine solche beitreten ermöglichen würde. Sie könnten dann eine vollständige äußere Verknüpfung verwenden, um alle Datensätze enthalten (wichtig, wenn nicht alle Tabellen, die die gleiche Anzahl von Zeilen). Aber das wäre irgendwie ein Hack. Achten Sie darauf, nicht auto_number für den Schlüssel zu nehmen, da es keine Schlüssel nicht wiederverwendet werden und neigt daher dazu, Löcher in der Nummerierung zu verlassen, in vielen Linien führt, die mit den Werten nur teilweise gefüllt sind.

Wenn Sie eine ClientDataSet aus mehreren Tabellen ausfüllen möchten, die denselben Satz von Feldern haben, können Sie den UNION-Operator, dies zu tun verwenden. Dies wird nur die gleichen Spalten verwenden und alle Zeilen in einer Tabelle kombinieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top