Relation 1 plusieurs [Résolu]

Signaler
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
bonjour a tous,

voila j'ai une table societe et une table refpersonnes
et une table liaisonperssoc

TABLE SOCIETE table liaison table personnes
----------------- -------------- -----------------
index INDEX index
nomsoc refpers <---> refpers
refsoc <-------> refsoc nompers

alors mes relation : j'ai une
relation 1 plusieur pour personnes vers liaisonperssoc
et une
relation 1 plusieur de societe a liaison persoc
car une societe peux avoir plusieur employer et un employer peux etre dans plusieur societe

A )alors mon probleme j'aimerai mettre dans une dblistbox
les societes ou ce trouve un travailleur

B)et mettre les les travailleur d'une societe

A) pour ce faire j'ai penser
mettre une datasource lier a une query
et y placer le select suivant
select nomsoc form liaison,societe where refpers=:formrefpers;
***********
B)
pour avoir tout les travailleurs d'une societe
select refpers form liaison,personne where refsoc=:formrefsoc;

ce je lie ma dblistebox au datasource
le datasource prend en dataset ma query
dans ma query je met la requete ou je faur un query.sql.add(' requeet A ou B');
query.execsql
j'ai deja bien verifier si la query etait active ou pas
mais j'ai toujour riend dans ma dblistbox toujour pas les nom de societe ou autre aucun signe de vie .

Winlin

10 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Primo : dans le cas d'une instruction SQL select, il faut utiliser query.OPEN et non pas query.execsql
(ExecSql ne renvoie pas de curseur).

Deuxio : je ne suis pas sur que tes requêtes renvoient quelque chose.
A) societes où se trouve un travailleur

/* on recherche les informations de la société et nous utiliserons la table Liaison*/
SELECT S.Refsoc, S.NomSoc FROM Societe S, Liaison L
/* pour laquelle le champ RefSoc est égal à celui de la table Liaison*/
WHERE S.refsoc = L.Refsoc
/* et le champ RefPers de la table liaison est égal à un paramètre variable
que nous puiserons dans la table Personne*/
AND L.RefPers = :Refpers

Il te suffit de déclarer soit le composant TTable ou le composant TQuery connecté à la table physique Personne comme DataSource de ta requête et la liaison se fera automatiquement.

B) mettre les les travailleurs d'une societe

Il suffirait d'inverser la requête à peu de choses près.
Soit :
/* on recherche les personnes et nous utiliserons la table de liaison */
SELECT P.RefPers, P.NomPers FROM Personnes P, Liaison L
/* dont le champ refPers est égal à celui de la table Liaison*/
WHERE P.RefPers = L.Refpers
/* et dont le champ RefSoc de la table Liaison est égal à un paramètre variable
puisé dans la table Societe*/
AND L.Refsoc = :RefSoc
Cette fois, la propriété dataSource du composant Tquery contenant la requête ci-dessus pointera sur la table Societe.

NB : les requêtes ci-dessus ont été testées et vérifiées.

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.pourflorenceethussein.org
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Si tu veux vraiment que le contenu de la liste déroulante soit mis à jour automatiquement, il vaudrait mieux utiliser un TDbLookupListBox.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.pourflorenceethussein.org
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

yep sa fonctionne nickel mais je chercher a rafraichir le dblookuplistbox pour que lorsque je chercher une autre personne
sa tourne mais j'avais jamais utiliser dblookuplistbox je vais regarder la doc sur cet objet merci encore delphiprog
c'est sympas je me repete mais sa fait plaisir d'avoir de l'aide de personne tel que toi

Winlin
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Ca fait aussi plaisir quand on reçoit un petit mot pour remercier


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.pourflorenceethussein.org
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

Et oui encore delphi prog qui me repond franchement
tu es vraiment sympas je regarde tout ce que tu m'as mis et le teste

alors j'ai tape les requete avec le sqlbuilder que je viens de decouvrir grace a de la doc.
et grace a cet outil j'ai pu tester le resultat de ma requete


SELECT Societe.Nomsoc, Societe.Refclisoc


FROM "societe.DB" Societe, "LIAISONpersSOC.db" Liaisonperssoc


WHERE (Societe.Refclisoc = Liaisonperssoc.Refsoc)


AND (Liaisonperssoc.Refpers =:formrefpers);

pour mon teste j'ai remplacer formrefpers par une reference d'une personne qui donnait un resultat coheren.

maintenant avec ma dblistbox

j'arrive pas a avoir le resultat dans ma dblistbox1 je cherche une doc simple qui m'expliquerai comment les lier pour avoir mon resultat voulu je vais regarder surle site michel delphi et sur delphifr mais si vous pouvez m'aider en me donnant des liens ou en explicant la manier dont vous proceder avec le BDE merci d'avance

Winlin
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

j'aimerai avoir de la documentation ou un exemple de prog avec le dblookuplistbox ou une explication car j'ai trouver des truc mais
j'arrive pas a le faire fonctionner correctement

Merci d'avance

Winlin
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Peux-tu préciser l'action qu'est censé faire ton composant TDbLookupListBox, stp ?
Ca éviterait de se lancer dans des explications inutiles.

Sinon, en termes généraux, un composant TDbLookupListBox est censé puiser son information (autrement dit les lignes qu'il affiche) dans un ensemble de données externes (propriété listSource) en affichant les lignes du champ indiqué dans sa propriété ListField.
La propriété KeyField doit contenir le nom d'un champ dont les données serviront à retrouver l'enregistrement dans ListSource en fonction de la valeur du champ retourné par la propriété DataField.
TDbLookupListBox permet donc de mettre à jour DataField avec KeyField tout en sélectionnant un élément de la liste dans ListField.
Ouf !

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.pourflorenceethussein.org
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

lol ok et bien j'aimerai que le dblookuplistbox afficher
le nombre d'entreprise ou ou travaille une personne

ou le nombre de personne qu'a une entreprise

voir plus haute donc relation 1 plusieurs
ma requete fonctionne nickel avec le sqlbuilder parfaitement

le probleme que j'ai comme je doit rentrer un parambyname dans ma requete vu que j'ai besoin de ces information apres une rechercher sur mes table qui elle fonctionne parfaitement
le resultat de cet rechercher donne nom prenom et referencepersonne que je met dans la requete pour savoir si une personne travaillle dans plusieur entreprise voila en gros mon probleme.

alors j'ai regarde le dblookuplistbox les propriete
les courants datasource et datafield

les keylist le listfield je met les propriete de mon datasource11

REQUETE PREND UN =:formrefpers***
TABLE DATASOURCE QUERY
database=alias DATASET=TABLE datasource=datasource
table=PERS sql=REQUETE ***
Active=true active=false

comme ma table n'est pas active je ne trouve pas les champs
pour le datafield de dblookuplistbox
donc je doit les mettre en programmation
mais n'ayant jamais travailler dbloouplistbox

1) si une personne veux m'aider ce serait vraiment sympas
(note toutes spécial pour delphiprog)

2) mais sachant que tout le monde n'a pas toujour le temps
d'aider pour des prob spécifique
et 'ayant pas envie de vous faire perdre votre temps donner moi de la doc bien faite sur dblookuplistbox pour que je le connaisse mieux de cet manier je serai plus précis dans ma question de l'utilisation de la dblooklistbox. et si sa fonctionne toujour pas
je reviendrai poser une question
j'aimerai une bonne doc en francais de préference sur
l'utilisation de dblooplistbox ou un exemple en programmation
cela 1 me ferai bien plaisir et il n'y en a pas ou tres peux sur le
site de delphifr

Je vous remercie d'avance

Winlin
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

quand je mes les propriete de dblookuplistbox

datafield nomsoc
datasource datasource11 -> pointe sur table qui va sur societe
listefield nomsoc
listesource datasource11

et j'ai comme erreur
circular datalink are not allowed ?? pq cet erreur

Winlin
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Tu ne peux pas rechercher les informations dans une même table que celle que tu modifies.
Ce que tu essaies de faire revient à dire : modifier l'enregistrement que je recherche.
Comment veux-tu que le composant s'y retrouve


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<