est il possible d'utiliser plusieurs MasterSource pour le même ensemble de donnée ??
si oui comment ?
est il possible d'utiliser plusieurs MasterSource pour le même ensemble de donnée ??
si oui comment ?
Si tu fais une chaine, Master A contenant Champ1 est maitre du Detail B contenant Champ1 et Champ2, lui même est Master B maitre du Detail C contenant Champ2 et Champ3
Avec des requêtes paramètrées correctement écrites, tu peux lier des tables très efficacement, c'est surtout valable pour le TTable avec DBase ou Paradox, après avec des SGBD SQL, vu que la récupération de données peu être longue, c'est une méthode moins interessante !
je pense que vous m'avez mal compris.
l'exemple suivant est plus significatif:
commande(id_commande , id_produit , id_client)
produit(id_produit , nom_produit , prix)
client(id_client , nom , adrese)
dans ce cas la table commande a deux tables maitres : produit et client.
comment faire pour déclarer ces deux table MasterSource pour la table commande?
NB: j'utilise firebird comme sgbd.
tout dépend comme tu fais le lien !
Toi c'est Client + Produit -> Commande
Hors il est impossible de faire une jointure entre Client et Produit sans passer par Commande selon ton modèle, sauf en faisant une CROSS JOIN pour combiner tous les Produits pour tous les Clients (cela fait une cardinalité assez montreuse) mais de tout façon, on finirait par obtenir toutes les commandes !
Donc la seule liaison possible : c'est Client -> Commande -> Produit
Relation N-N avec Commande comme Table de Relation !
Typiquement, trois DBGrid, la liste des clients, tu en sélectionne un, tu obtiens la liste de ses commandes, tu choisis un commande, cela affiche les produits de la commande !
utilise du SQL si tu veux faire extraire les commandes pour un client donné avec un produit donné !
C'est typique d'une Statistique de Consommation pour savoir les habitudes d'un client et faire le mailing approprié !
La raison pour laquelle je veux deux MasterSource pour la table commande est que j'ai 3 Dbrgrid, en sélectionnant une commande (DBgrid_commande) je doit avoir la sélection positionnée sur le client (DBgrid_client) approprié et le produit approprié (DBgrid_produit).
Tu te contredis !
Ou alors tu confonds qui est le maitre et qui est le détail
Tu pense le problème à l'envers !
Tu n'as donc pas besoin de plusieurs MasterSource mais d'un seul servant deux fois !
Produit et Client utilise Commande comme Master, avec chacun un champ différent comme paramètre dans leur SQL
J'insiste sur l'utilisation des paramètres et de la propriété DataSource
Voir l'aide, rurbrique "Etablissement de relations maître/détail en utilisant des paramètres"
Il y a une différence entre DataSource et MasterSource, cela dépend de composant DBWare utilisé avec FireBird, est-ce BDE ? ADO ? IBX ? DBExpress ?
Je ne suis pas convaincu que MasterSource et MasterFields permettent ce type d'imbrication même avec IndexFieldNames contenant Id_Produit et Id_Client
A vérifier !
j'utilise les composants zeos pour la connexion à ma base firebird
je vais voir avec l'utilisation des paramètres SQL.
c'est possible que mon exemple est mal approprié mais est quelqu'un peut -il me confirmer l'impossibilité d'utilisation de plus d'un mastersource pour le même ensemble de donnée.
Oui, moi je te le confirme, puisqu'il n'existe qu'une seule propriété MasterSource lié à une seule instance DataSource !
Sinon, tu aurais un tableau de MasterSource, avec un tableau de MasterKey !
Ensuite ton exemple n'est pas faux*, c'est juste toi qui ne comprend pas ce que tu veux toi-même faire !
*Qui se résume à "Un Maitre pour Deux Détails !"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager