Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2011, 15h29   #1
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Par défaut Affichage dans un formulaire continu à partir de plusieurs tables liées

Bonjour,

Je me heurte à un problème de présentation dans un formulaire continu que je n'arrive pas à résoudre.

J'ai les tables suivantes :
CLIENTS : IdClient, ...
ENFANTS : IdEnfant, IdClient, Prenom
TELEPHONES : IdTelephone, IdClient, TypeTel, NumeroTel

Je souhaite afficher la liste des clients dans un formulaire continu en faisant apparaître le prénoms des enfants dans un champ sous la forme "prénom1 - prénom2 - prénom3...", ainsi que le numéro de téléphone portable et le numéro de téléphone de domicile du client dans des champs séparés (le champ TypeTel de la table TELEPHONES peut revoir les valeurs "dom", "port", "fax", "bureau",...). Tout cela ne pose aucun problème dans un formulaire unique avec un peu de VBA, par contre, les contraintes liés au formulaire continu m'impose de passer par une requête SQL et là, je sèche complètement.
Si quelqu'un avait un début de solution ou une autre méthode pour parvenir au même résultat, je lui en serai grandement reconnaissant.

Merci par avance.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 19h05   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Pour tes prénoms, il va falloir faire une fonction qui les concatène.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public  Function RegrouperPrenom(prmIdClient as variant) as string
   dim result as string:result=""
 
   if not isnull(prmIdClient) then 
      dim db as dao.database:set db=currentdb
      dim r as dao.recordset:set r=db.openRecordset("ENFANTS ", dbOpenDynaset)
      dim critere as string:critere="[IdClient]=" & prmIdClient
 
      r.FindFirst(critere)
 
      do while not r.nomatch()
 
         if result<>"" then
            result=result & ", "
         end if
 
         result=result & r![Prenom]
         r.findNext(critere)
      loop
 
      r.close:set r=nothing
      set db=nothing
   end if
 
   RegrouperPrenom=result
end function
dans ta source de données il faut mettre un champ calculé qui va valloir :

Code sql :
RegrouperPrenom([IdClient])

Pour le télphone je n'ai pas compris ce que tu veux faire.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 19h12   #3
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Note que la fonction peut ralentir pas mal ta requête. Une solution est de faire le calcul au moment de la saisie des prénoms et de stocker la liste des prénoms dans la table CLIENTS en plus de stocker chaque enfant séparément.

Ce n'est pas très 3ième forme normale mais comme c'est une données qui change peu et que tu peux assez facilement la gérer, le gain en temps d'exécution peut justifier cette entorse à la norme.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 19h36   #4
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Bonsoir,

Merci de ta réponse.
La base pouvant contenir plusieurs milliers de clients et donc d'autant plus d'enfants, la solution non-normalisée me parait plus séduisante... et trop simple pour que je n'y pense à force de me tirer les cheveux là-dessus depuis hier .

Pour les numéros de téléphone, mon formulaire contient 1 champ "Tél. Domicile" et 1 autre "Tél. portable" pour chaque client. Mon but est que ces numéros soient affichés dans le formulaire continu.
A la vue de ta précédente réponse, une solution peut consister à stocker ces données à la fois dans la table clients et dans la table téléphones mais pour le coup, je la trouve moins élégante.

Débutant sur Access, je trouve que cette contrainte sur les formulaires continus est vraiment dommageable.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 20h32   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Pour les numéros de téléphone je ferais 2 requêtes supplémentaires : une pour chaque type qui t'interesse. Après tu fais une jointure sur chacune de tes nouvelles requêtes.

Un truc du genre :

rListeTelDomClient
Code sql :
SELECT telephones.idClient, telephones.NumeroTel FROM telephones WHERE telephones.typeTel="Dom";

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 20h37   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Citation:
Débutant sur Access, je trouve que cette contrainte sur les formulaires continus est vraiment dommageable.
Et en tant que vieux briscard en Access ;-) j'abonde dans ton sens.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 10h17   #7
Membre du Club
 
Homme
Chef d'entreprise
Inscription : mai 2011
Messages : 57
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef d'entreprise
Secteur : Arts - Culture

Informations forums :
Inscription : mai 2011
Messages : 57
Points : 61
Points : 61
Et bien tout cela marche très bien. J'ai en plus découvert que l'on pouvait mettre des requêtes en plus des table en mode création de requête, ce qui est très pratique pour les jointures.
Merci pour ton aide.
Francesco34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web