Tables jointes
Si vous devez lire des données provenant simultanément de deux tables, vous
pouvez toujours appeler une commande SQL avec une jointure. Le résultat est
cependant une table unique, contenant des champs provenant de plusieurs tables
différentes. C’est très fonctionnel dans le cas où vous vous contentez d’afficher
les données, mais si vous permettez les modifications et voulez éventuellement
effectuer une mise à jour dans la base de données, les choses deviennent plus
compliquées.
Il devient en effet plus difficile de s’assurer que les règles d’intégrité entre les
tables sont respectées.
Il est aussi possible que certaines informations soient manquantes. Il y a peut-être
un sujet « Architecture » dans la table de sujets. Si aucune photo n’est cataloguée
dans ce sujet, il ne fera pas partie du résultat de la requête et vous n’aurez aucune
façon de savoir que ce sujet existe.
Vous perdez l’accès à certains mécanismes qui permettent d’automatiser les mises
à jour, qui ne fonctionnent que quand la commande de sélection est appelée sur
une table unique.
Il est donc souvent plus intéressant de remplacer la requête avec jointure par des
requêtes individuelles sur chacune des tables, et de recréer en mémoire les
relations liant les tables.
Vous pouvez le faire avec une commande SQL pour chaque table et plusieurs Fill
successifs sur le même DataSet, ce qui ajoutera une table à chaque appel :
dad.SelectCommand = comTblSujet
dad.Fill(dts, "Sujets")
dad.SelectCommand = comTblPhoto
dad.Fill(dts, "Photos")
Le DataSet dts contient maintenant une Tables(0) appelée Sujets et une Tables(1)
appelée Photos.
Access vous limite à cette approche, mais les bases de données permettant de
créer des procédures plus complexes permettent de faire le même travail en une
seule procédure.
Cette approche n’est pas utilisée dans l’application d’exemples, mais voici le code
qui récupérerait les tables de photos et de sujets et les lierait ensemble. Nous
créerions tout d’abord dans la base de données une procédure stockée appelant
séparément les deux tables :