Besoin d'aide Requêtes
Stagiaire WDF
Inscrit:
17/10/2004 15:10
Post(s): 27
Bonjour,

Voila je suis débutant et j'aurais besoin d'un coup de main concernant la création d'une requête, voici mon petit souci :

Je dispose de deux fichier, un fichier client, l'autre un fichier associations, qui sont relié.
Chaque client peut faire partit ou non d'une ou de plusieurs associations.





Je souhaiterais pouvoir en vu d'un publipostage, trier les client de tels façon que si un client fait partit de plusieurs "associations" il n'apparaisse qu'une fois dans le résultat de ma requête
(Source de la table complète=toutes les associations).
(En utilisant comme critères de trie le NOM, le PRENOM, et le CODEPOSTAL afin de s’assurer que deux clients qui ont le même nom et prénom mais qui n'habite pas dans la même ville soit bien sélectionné et non pas qu'un sur les deux.)

Mais aussi pouvoir faire une requêtes sur les associations les unes après les autres et que si le client fait par exemple partit de la première "association" il ne soit pas repris en compte s'il fait aussi partit d'une autre, et ceci uniquement s'il à déjà été sélectionné pour le publipostage dans une des association précédente. (Source pour la requête=table résultat trie par association)
(En utilisant comme critères de trie le NOM, le PRENOM, et le CODEPOSTAL afin de s’assurer que deux clients qui ont le même nom et prénom mais qui n'habite pas dans la même ville soit bien sélectionné et non pas qu'un sur les deux.)

Voila si quelqu'un pouvais m'aider à resoudre ce petit souci, cela serai cool


merci d'avance à tous

Contribution le : 01/01/2005 21:21
_________________
A bientôt
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Utilisateur WDF
Inscrit:
19/05/2004 12:10
De LYON
Post(s): 59
Bonjour,

Je ne suis pas une grande experte, mais je pense qu'il n'y a pas beaucoup de monde pour répondre aujourd'hui.
Aussi je vous propose mes propres réflexions.

Il me semble que l'analyse que vous exposez ne permet pas de rattacher un client à plusieurs associations, à moins que vous ne créiez le même client plusieurs fois, en ressaisissant à chaque fois toutes ses coordonnées.

La relations indiquée est :
CLIENT <- (0,1) -------(0,n)-> ASSOCIATION

Pour qu'un même "Client" puisse faire partie de plusieurs "Associations", il faut commencer par le définir dans la description de la liaison, et passer pour cela par la création d'un 3ème fichier "LIEN CLIENT ASSOC", qui contiendra comme rubriques les clés de relation "IDClient" et "IDAssociation" (plus éventuellement d'autres caractéristiques du Client dans le cadre de telle ou telle Association), soit une relation :
CLIENT <- (0,n) ------- (1,1) -> LIEN <- (1,1) ------- (0,n)-> ASSOCIATION
(La clé "IDAssociation" n'aura plus de raison d'être dans le fichier CLIENT, puisqu'elle ne peut contenir qu'une seule référence d'ASSOCIATION à la fois).

La création d'un nouveau "Membre d'association" nécessitera bien sûr la création de DEUX enregistrements : un dans le fichier CLIENT et un autre dans le fichier LIEN.

Il faudra ensuite mettre les rubriques des fichiers LIEN et CLIENT dans une requête LIENCLIENT pour pouvoir faire les sélections correspondantes aux différents critères.
Pensez dans ce cas à cocher la case "Afficher également les Clients qui n'ont pas de liens" dans le détail de la jointure de la requête.
Votre table sera alors basée sur la requête LIENCLIENT au lieu du fichier CLIENT.
Si vous ajoutez également la table "ASSOCIATION" dans la requête, cela permet de faire afficher le NOM et l'IMAGE de l'ASSOCIATION dans la table.

Prévoir dans le fichier CLIENT une clé composée de :
CODEPOSTAL+NOM+PRENOM
pour pouvoir faire la sélection que vous souhaitez avec la constante "hDistinct" en lecture sur cette rubrique.
Si vous la définissez comme "clé unique", cela permettra d'éviter la saisie de doublons.

Pour "marquer" les clients qui ont déjà fait l'objet d'un publipostage dans le cadre d'une association et ne pas leur adresser plusieurs fois le même mailing, c'est plus complexe et cela dépend de la manière dont vous procédez.
Personnellement, j'ajouterais un champ "NumeroMailing" (ou"DateMailing") dans le fichier CLIENT et je mettrais à jour ce champ à chaque mailing réalisé.
Pour réaliser un mailing sur les clients d'une association, il faudrait tester au préalable, sur chaque ligne de CLIENT, que ce champ n'est pas égal au numéro ou à la date du mailing en cours de traitement.

Espérant vous avoir donné des pistes…
Que ceux qui sont plus calés que moi n'hésitent pas à corriger si j'ai dit des bêtises.

Bonne année 2005 à tous.


Contribution le : 02/01/2005 19:08
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour,

Je pense que la conception de votre analyse n'est pas correcte car vous saisissez plusieurs fois le même client dans le fichier Client ce qui me parrait illogique et contraire à une base de données relationnelle.

Sur la base de l'analyse de Julianne sur la création d'un fichier de liaison, Vous auriez un fichier client qui ne contiendrait que des clients uniques.

Ainsi le fichier LIENCLIENT contiendrait les liens de relation entre le fichier Client et le fichier Association.

Cette analyse pose un problème si les données sont déjà saisies, c'estla création de moulinette pour alimenter le fichier LienClient et modifier le fichier Client.

Bien que cela me semble plus que nécessaire, vous pouvez vous en sortir en l'état actuelle de votre analyse en utilisant les requête suivantes:

Sql = "SELECT Client.NOM AS Nom, 
Client.PRENOM AS Prenom,
Client.CodePostal As CP
FROM Client 
GROUP BY Client.NOM, Client.PRENOM, Client.CodePostal
HAVING IdAssociation <> 0"


Cette requête renvoie distinctement tous les Nom+Prenom+codePostal qui ont au moins 1 association.

Pour récupérer distinctement tous les Nom+Prenom+CodePostal du fichier Client il suffit :
Sql = "SELECT NOM AS Nom,
PRENOM AS Prenom,
CodePostal AS CP
FROM Client 
GROUP BY Client.NOM, Client.PRENOM, Client.CodePostal"

Cette requête renvoi tous les Nom+Prenom+CodePostal distinct du fichier Client.

Exécution de la requête
Rs est une source de données
Sql est une chaine

Sql = <Défini ci dessus>

SI Pas HExecuteRequeteSql(Rs,HRequeteDefaut,Sql) Alors
 Erreur(HErreurInfo)
 Retour
Fin
TraceDébut()
HLitPremier(Rs)
TantQue Pas HEndehors(Rs)
 Trace(Rs.Nom + ", " + Rs.Prenom + ", " + Rs.CP)
 HLitSuivant(Rs)
Fin

L'utilisation des fonctions Trace... servent pour le test de la requête, ce code est donc à adapter à votre besoin.

Contribution le : 03/01/2005 01:11
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Stagiaire WDF
Inscrit:
17/10/2004 15:10
Post(s): 27
Bonjour DrCharly93,

Merci avant tout pour votre coup de main, votre aide m'a été tres utile, j'ai adapté que légérement le code que vous m'avais fournit afin d'obtenir ceci :


rs est une Source de Données
sql est une chaîne

sql="SELECT IDASSOCIATION AS IDASSOCIATION,
 NOM AS Nom,PRENOM AS Prenom,
CodePostal AS CODEPOSTAL 
FROM Client 
GROUP BY client.IDassociation, 
Client.NOM, Client.PRENOM, 
Client.CodePostal 
HAVING IDassociation=2"

SI PAS HExécuteRequêteSQL(rs,hRequêteDéfaut,sql) ALORS
	Erreur(HErreurInfo)
	RETOUR
FIN

HLitPremier(rs)
TANTQUE PAS HEnDehors(rs)
         TableAjoute(Table4,rs.idassociation+TAB+rs.nom+TAB+rs.prenom+TAB+rs.codepostal)
HLitSuivant(rs)

FIN



cela affiche bien par exemple les "nom,prenom,codepostal" pour "l'association portant l'ID n°2"

Ma question, comment puis-je dire à ma requête qu'elle doit sélectionner soit "une IDassociation" ou quelle peut aussi être amené a selectionner plusieurs "IDassociation" ?

j'ai bien tenté de définir un champ de saisie qui recevra le numéro de l'id de l'association que devra affiché la requete
dans la table,et en modifiant la ligne:


sql="SELECT IDASSOCIATION AS IDASSOCIATION,
NOM AS Nom,PRENOM AS Prenom,
CodePostal AS CODEPOSTAL FROM Client GROUP BY client.IDassociation, Client.NOM, Client.PRENOM, Client.CodePostal HAVING IDassociation="+Saisie1..ValeurAffichée



Mais cela ne fonctionne pas avec un point virgule(;), comme cela fonctionne lors de la création d'une requete si j'utilise l'assisstant du programme en définissant la condition "tels que IDAssociation est dans la liste {{Param1} } dans ce cas Param1 correspond à la valeur affiché dans mon champs de saisie et il suffit de séparer par un point virgule pour choisir plusieurs associations 2;6;8 etc...".

Mais la je m'avance peut etre un peut et je ne sais pas si cela fonctionne, car je dois garder à l'esprit que si une personne fait partie de plusieurs "IDASSOCIATION" elle ne devra s'afficher qu'une seul fois dans ma table

Mais je pense que vous pourrez m'en dire plus vos connaissance dépasse largement les miennes et m'ont déjà permis de résoudre une partie de mon problème

Je me rend bien compte que mon analyse n'est pas correcte et qu'elle est contraire à une base de données relationnelle,
s'il est plus facile de la modifier pour éviter la saisie en double ou en triple d'un "client" qui peut appartenir à plusieurs "associations", comment dois je faire pour éviter cela (je sais bien ca peut paraitre idiot mais faut bien commencer un jour )

Encore une fois merci pour votre aide, et Meilleurs voeux pour cette nouvelle année.


Contribution le : 03/01/2005 23:24
_________________
A bientôt
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Stagiaire WDF
Inscrit:
17/10/2004 15:10
Post(s): 27
Bonjour juliane

Merci pour vos réflexions, je vais essayer vos astuces pour avancer un peu dans mon problème.

Citation :

Pour "marquer" les clients qui ont déjà fait l'objet d'un publipostage dans le cadre d'une association et ne pas leur adresser plusieurs fois le même mailing, c'est plus complexe et cela dépend de la manière dont vous procédez.
Personnellement, j'ajouterais un champ "NumeroMailing" (ou"DateMailing") dans le fichier CLIENT et je mettrais à jour ce champ à chaque mailing réalisé.
Pour réaliser un mailing sur les clients d'une association, il faudrait tester au préalable, sur chaque ligne de CLIENT, que ce champ n'est pas égal au numéro ou à la date du mailing en cours de traitement.:


cela peut être une facon de regler mon souci de mailing
pour mon analyse je crois bien que le mieux c'est de tout reprendre... et apprendre
Entre temps j'avais crée une clé composée mais je ne savais pas comment l'exploiter.

Pour ce qui est de la requête, drcharly93 m'a permis d'avancer d'un pas de plus .

Meilleurs voeux

Contribution le : 04/01/2005 01:57
_________________
A bientôt
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Stagiaire WDF
Inscrit:
17/10/2004 15:10
Post(s): 27
Bonjour DrCharly93

En suivant vos conseils, j'ai repris mon analyse afin de régler les défauts que vous avez soulevés,et je ne saisie plus q'une fois le client contenu dans le fichier "PERSONNE" et je peu lui attribuer plusieurs association("GROUPE"), un fichier liaison PERSONNE_GROUPE "PERGRO" fait la liaison entre les deux.





Cependant je reste bloqué sur la requête qui doit faire le trie, encore une fois

Je essayé de modifier le code que vous m'avais fournit mais je n'arrive pas à l'adapter à cette nouvelle analyse, car je dois prendre en compte deux fichiers "PERSONNE" et "GROUPE" ou dois je utiliser le Fichier "PERGRO" ?

Je voudrais pouvoir connaître les personnes qui appartiennent soit à un groupe ou plusieurs en entrant l'IDGROUPE dans un champs de saisie par exemple, mais le paramètre de la requête n'accepte qu'un chiffre et non pas plusieurs séparé par un point virgule comme c'est possible avec une requête testé par l'assistant de création de requête.

Ma question, comment puis-je dire à ma requête qu'elle doit sélectionner soit "un GROUPE" ou quelle peut aussi être amenée à sélectionner plusieurs "GROUPE" ?
Le résultat c'est à dire le nom des personnes, devant toujours ne s'afficher qu'une seule fois dans une table même si une ou plusieurs PERSONNE appartiennent à plusieurs GROUPE

Pouvez vous m'aider à corriger ce problème.

D'avance je vous en remercie.

Contribution le : 05/01/2005 01:29
_________________
A bientôt
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Animateur WDF
Inscrit:
02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
Bonjour Cyber,

Rs est une Source de Données
Sql est une chaîne
nIDGroupe est un entier

//Affecter ici nIDGroupe en fonction du champs de saisie.

Sql="SELECT DISTINCT
 IDPERSONNE As IDPersonne, 
 NOM AS Nom,PRENOM AS Prenom,
 CodePostal AS CODEPOSTAL
FROM PERSONNE, PERGRO
WHERE  PERGRO.IDPERSONNE = PERSONNE.IDPERSONNE "

SI nIDGroupe > 0 Alors
 Sql += "AND PERGRO.IDGroupe IN (" + nIDGroupe + ")"
FIN

SI PAS HExécuteRequêteSQL(rs,hRequêteDéfaut,sql) ALORS
	Erreur(HErreurInfo)
	RETOUR
FIN

HLitPremier(rs)
TANTQUE PAS HEnDehors(rs)              
 TableAjoute(Table4,Rs.IdPersonne+TAB+Rs.nom+TAB+Rs.prenom+TAB+Rs.codepostal)
 HLitSuivant(Rs)
FIN

Ainsi si vous ne saisissez rien dans votre champs la sélection sera faites sur tous les groupes
Dans le champs les valeurs doivent être séparées par des virgules si l'identifiant du groupe.

Vous pouvez pour que cela plus simple pour l'utilisateur avoir une table avec des interrupteurs qui permettent de cocher les groupes voulues.
Ainsi vous parcourez cette table pour récupérer les identifiant de groupe nécessaire.

Contribution le : 05/01/2005 10:52
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Besoin d'aide Requêtes
Stagiaire WDF
Inscrit:
17/10/2004 15:10
Post(s): 27
Bonjour, DrCharly93

Merci pour votre patience et la rapidité avec laquelle je recoit votre aide,
j'ai appliqué les modifications que vous avez apporté à la
requête, mais lors de l'execution la fonction erreurinfo me revoit ce message :
Problème d'initialisation de la requête
Rubrique IDPERSONNE ambiguë


Je pense que cette erreur dois provenir des identifiants utilisé dans mon analyse, mais si je tente de renommer l'idpersonne, cela ne regle pas cette erreur...
mon analyse dans cette nouvelle version est elle correcte ???


Rs est une Source de Données
Sql est une chaîne
nIDGroupe est un entier
nIDGroupe=Saisie1..ValeurAffichée
//Affecter ici nIDGroupe en fonction du champs de saisie.

Sql="SELECT DISTINCT  IDPERSONNE As IDPersonne,NOM AS Nom,PRENOM AS Prenom,CodePostal AS CODEPOSTAL FROM PERSONNE, PERGRO WHERE  PERGRO.IDPERSONNE = PERSONNE.IDPERSONNE "

SI nIDGroupe > 0 ALORS
	Sql += "AND PERGRO.IDGroupe IN (" + nIDGroupe + ")"
FIN

SI PAS HExécuteRequêteSQL(Rs,hRequêteDéfaut,Sql) ALORS

	Erreur(HErreurInfo)
	RETOUR
FIN

HLitPremier(Rs)
TANTQUE PAS HEnDehors(Rs)              
	TableAjoute(Table1,Rs.IdPersonne+TAB+Rs.nom+TAB+Rs.prenom+TAB+Rs.codepostal)
	HLitSuivant(Rs)
FIN



Je dois commencer à vous embêter un peu, mais je n'ai pas encore rencontrer cette erreur et malgré plusieurs essais
je ne parvient pas la corriger
Mais la principale fonctionnalite de ce programme réside dans la selection de plusieurs groupes en n'affichant qu'une fois les personnes qui font partit de plusieurs groupes.

je pensais pas que cette fonction me poserais un tel souci


Contribution le : 06/01/2005 01:30
_________________
A bientôt
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2