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 29/07/2011, 17h05   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
Par défaut Problème de concaténation

Bonjour,
j'ai une table qui sappelle: LienPointArretMobilier
avec 3 colonnes: ID_Lien ; ID_Mobilier ; Num_GIPA

je souhaite concaténer le mobilier en fonction des Num_GIPA
donc que ma requete affiche:

Num_GIPA...............Mobilier
1............................poteau, banc
2............................poteau
3............................poteau, banc, abri

j'ai suivi l'exemple du FAQ du site et j'ai donc tapé ce code dans un module que j'appelle RecupMobilier:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function RecupMobilier(Num As String) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les  mobiliers du point d'arrêt
'chr(34) correspond a des guillemets pour encadrer le texte
SQL = "SELECT ID_Mobilier FROM LienPointArretMobilier WHERE Num_GIPA=" & _
          Chr(34) & Num & Chr(34)
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrements
While Not res.EOF
RecupMobilier = RecupMobilier & res.Fields(0).Value & ";"
res.MoveNext
Wend
'Enleve le dernier ;
RecupMobilier = Left(RecupMobilier, Len(RecupMobilier) - 1)
'libere la mémoire
Set res = Nothing
End Function

ensuite je cré une requete R02:

Code :
1
2
SELECT DISTINCT LienPointArretMobilier.Num_GIPA, RecupMobilier(Num_GIPA) AS LeMobilier
FROM LienPointArretMobilier;
en suivant le chemin: requete-->specifique SQL-->Définition de données

mais j'ai le message: Fonction "RecupMobilier" non définie dans l'expression

sachant que c'est mon premier véritable sql je ne sais pas ou se trouve mon erreur.donc si quelqu'un a une solution ça serait sympa car ça fait 2 jours que je galère sur ce problème et je deviens fou
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 18h09   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 258
Points : 5 258
Salut,

Tout d'abord je te conseille de renommer ton module en "M_RecupMobilier", pour le différencier de la fonction :

Ensuite l'argument de la fonction semble être un entier, donc essaie ceci pour ta fonction :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function RecupMobilier(Num As Long) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les  mobiliers du point d'arrêt
SQL = "SELECT ID_Mobilier FROM LienPointArretMobilier WHERE Num_GIPA=" & Num
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrements
While Not res.EOF
RecupMobilier = RecupMobilier & res.Fields(0).Value & ";"
res.MoveNext
Wend
'Enleve le dernier ;
RecupMobilier = Left(RecupMobilier, Len(RecupMobilier) - 1)
'libere la mémoire
Set res = Nothing
End Function
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/08/2011, 10h37   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
merci, ça marche super bien mais il me reste un problème, c'est que ID_Mobilier est numérique et que mon mobilier est de type texte, comment dois-je faire pour obtenir le nom du mobilier au lieu du numéro?

en fait comme on peut le penser la table LienPointArretMobilier est bien une table de lien entre mon mobilier et mon point d'arrêt.
voici ma table MobilierUrbain:

TypeMateriel.........Id_Materiel
poteau......................1
banc.........................2
...
...

et donc dans ma table LienPointArretMobilier j'ai fait pour la colonne ID_Matériel:
liste de choix -->
origine source: table/requete
contenu: MobilierUrbain
Colonne liée: 2
Nbr colonnes: 1

et au lieu d'avoir les numero ID qui s'affichent j'ai le nom des mobiliers.

donc dans ma requete je souhaite que cela s'affiche également de cette manière, que dois je modifier dans ce cas?
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 15h15   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 258
Points : 5 258
Salut,

il faut déjà spécifier le nombre de colonnes de ta liste :

colonne ID_Matériel:
liste de choix -->
origine source: table/requete
contenu: MobilierUrbain
Colonne liée: 2
Nbr colonnes: 2

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 16h15   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
je crois que je me suis mal exprimé,
en laissant nbre de colonne à 1 j'ai juste le nom du mobilier qui s'affiche dans ma liste déroulante et je souhaite que ça reste comme ça. en fait le problème c'est que quand je fait la concaténation avec le code sql j'obtiens le résultat suivant:

Num_GIPA..................LeMobilier
1..................................2
2..................................1;2
3..................................1

mais je souahite qu'il m'affiche:

Num_GIPA..................LeMobilier
1..................................banc
2..................................poteau; banc
3..................................poteau


donc à mon avis il faut ajouter une ligne dans le code sql mais je ne sais pas quoi
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 16h36   #6
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
bon, j'ai fait plus simple,

j'ai simplement recréer la table LienPointArretMobilier en y ajoutant le type de matériel gràce à une requete crétaion de table puis j'ai modifié mon code sql comme ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function RecupMobilier(Num As Long) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les  mobiliers du point d'arrêt
SQL = "SELECT TypeMobilier FROM LienPointArretMobilier WHERE Num_GIPA=" & Num
Set res = CurrentDb.OpenRecordset(SQL)
'Concatene les différents enregistrements
While Not res.EOF
RecupMobilier = RecupMobilier & res.Fields(0).Value & ";"
res.MoveNext
Wend
'Enleve le dernier ;
RecupMobilier = Left(RecupMobilier, Len(RecupMobilier) - 1)
'libere la mémoire
Set res = Nothing
End Function
et ça marche parfaitement
josi1986 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 13h27.


 
 
 
 
Partenaires

Hébergement Web