vincentstryckmans
Messages postés
228
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
25 octobre 2006
23 août 2004 à 09:08
Bonjour,
Les composants d'accès aux bases de données, tables, query, .... peuvent se placer dans la form où ils seront manipulés.
Cette solution est pratique dans très peu de cas car elle n'est pas souple.
Si ton projet comporte plusieurs form qui accèdent toutes aux données, il est plus que conseillé de placer les composants dans un datamodule ... qui sera unique à ton projet. delphi n'en accepte q'un seul.
C'est dans ce datamodule qui tu placeras les IBDatabase, IBTable, IBQuery et autres IBTransaction et tous les évenementts que tu souhaites faire exécuter : BeforeOpen et Afterclose pour ouvrir et fermer la transaction, ... Afterscroll pour analyser le contenu du record pointé , ....
Avant de répondre à ta question sur les liaisons, je vais d'abord dire sur les datasources car j'ai l'impression que tu mélanges les pinceaux ou en tout cas la terminologie que tu emploies n'est pas adéquate.
En deux, un datasource est un outil qui mais en communication les composants TDBEdit, TDBGrid, ... avec les données de ta base de données.
Ce n'est pas à proprement parlé une liaison.
L'avantage d'utiliser un datasource réside dans la souplesse de ton code.
Sur tes fom, tu assignes à la propriété 'datasource' d'un DBGrid, par exempe, un composant TDatasource et non pas directement une table ou un query.
En cours d'exécution, tu peux alors changer la source de données (dataset) indiquée dans le TDatasource et le contenu des tes forms s'adaptera sans aucune autre manip. Plus important encore, si ton projet évolue et il va évoluer, il sera plus facile de changer deux trois propriétés dans ton datamodule qu'une centaine dans tes form ou dans tes lignes de code.
Par exemple :
datamodule.datasource.dataset.next;
est la même commande que
datamodule.table.next; mais avec toute la souplesse nécessaire si tu veux changer le dataset que tu assignes au datasource.
Pour ta question sur les liaisons entre tables je suppose que tu as trois tables (les tables enfant) qui réagissent au déplacement du pointeur d'une quatrième, la table parent.
Pour chaque table enfant, tu dois assigner à la propriété mastersource du ibtable, la datasource de la table parent et dans masterfields, tu assignes le champ dans la tableparent qui sera en liaison avec la table enfant. Dans indexfieldname, tu assignes alors la valeur du champ dans la table enfant qui fera la liaison.
Cette façon de faire est la façon manuelle. Delphi tu proposes un petit assistant :
- commence d'abord par activer ta base de données et les transactions dont tu vas avoir besoin.
- dans la table enfant, assigne sa propriété mastersource, puis clqiue sur le bouton ... dans l'editbox de masterields.
Delphi te présentera alors la liste des champs des deux tables.
A toi de faire ton choix.
J'espère que mes explication ne sont pas trop nébuleuses et qu'elles te seront utiles.
Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.
Vincent Stryckmans