2008-09-21 5 views
1

Est-il possible de placer les résultats de plus d'une requête sur plus d'une table dans un TClientDataset?Plusieurs tables dans un jeu TClientDataset?

Juste quelque chose comme

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

Je ne peux pas sembler trouver un moyen d'obtenir un fournisseur de données (SetProvider) pour tirer dans les résultats de plus d'une table à la fois.

Répondre

0

Il n'existe aucun moyen d'avoir plusieurs données de table dans le même TClientDataSet que vous avez référencé. TClientDataSet contient un seul curseur pour un seul ensemble de données.

4

La seule façon serait de rejoindre les tables. Mais alors vous devez fournir les critères de la jointure à travers les clés étrangères jointes.

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

Supposons maintenant que vous ayez trouvé une clé (comme LineNr) qui permettrait une telle jointure. Vous pouvez ensuite utiliser une jointure externe complète pour inclure tous les enregistrements (les tables importantes, sinon toutes, ont le même nombre de lignes). Mais ce serait en quelque sorte un hack. Assurez-vous de ne pas utiliser la valeur auto_number pour la clé, car elle ne réutilise pas les clés et a donc tendance à laisser des trous dans la numérotation, ce qui entraîne de nombreuses lignes qui ne sont que partiellement remplies de valeurs.

Si vous voulez remplir un jeu de données client à partir de plusieurs tables ayant le même ensemble de champs, vous pouvez utiliser l'opérateur UNION pour cela. Cela utilisera simplement les mêmes colonnes et combinera toutes les lignes dans une table.

12

ClientDatasets peut contenir des champs qui sont eux-mêmes d'autres ensembles de données. Donc, si vous voulez créer trois tables dans un seul jeu de données, créez trois ClientDatasets contenant les trois jeux de résultats que vous voulez, et vous pouvez les mettre dans un seul ClientDataSet.

Cet article:

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

vous montre comment le faire à la fois à l'exécution et à designtime. Portez une attention particulière à la section intitulée:

« Création d'une structure ClientDataSet's à exécution en utilisant TFields »

+0

Cet autre article doit être référencé aussi: http://edn.embarcadero.com/article/29825 – EMBarbosa

Questions connexes