Question

Est-il possible de placer les résultats de plusieurs requêtes sur plusieurs tables dans un TClientDataset?

Juste quelque chose comme

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

Je n'arrive pas à trouver un moyen de faire en sorte qu'un fournisseur de données (SetProvider) récupère les résultats de plusieurs tables à la fois.

Était-ce utile?

La solution

Il n'y a pas 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.

Autres conseils

ClientDatasets peut contenir des champs qui sont eux-mêmes d'autres ensembles de données. Par conséquent, si vous souhaitez créer trois tables dans un seul jeu de données, créez trois ClientDatasets contenant les trois ensembles de résultats souhaités, puis vous pouvez les mettre dans un seul ClientDataSet .

Cet article:

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

vous montre comment procéder à la fois à l'exécution et à la conception. Portez une attention particulière à la section intitulée:

" Création d'une structure de ClientDataSet à l'exécution avec TFields "

"

Le seul moyen serait de rejoindre les tables. Mais vous devez ensuite fournir les critères de la jointure par le biais de 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é (telle que LineNr) qui permettrait une telle jointure. Vous pouvez ensuite utiliser une jointure externe complète pour inclure tous les enregistrements (important si toutes les tables n'ont pas le même nombre de lignes). Mais ce serait en quelque sorte un bidouillage. Assurez-vous de ne pas utiliser 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 souhaitez renseigner un jeu de données client à partir de plusieurs tables contenant le même ensemble de champs, vous pouvez utiliser l'opérateur UNION pour le faire. Cela utilisera simplement les mêmes colonnes et combinera toutes les lignes dans une seule table.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top