Création de requête concaténer selon deux id différents

Résolu/Fermé
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 - 14 janv. 2022 à 10:03
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 - 15 janv. 2022 à 17:26
Bonjour,

Je suis actuellement bloqué sur la création de mon petit programme access.
Je souhaiterai trier ma concaténation selon deux colonnes id différentes mais impossible de trouver d'exemple à ce sujet et très limité en SQL je ne comprend pas comment réussir cela.
Pour faire simple je souhaite créer une requête selon idSP et ensuite IdArt.
idSP = Date de Spectacle
IdArt = Artiste
Le but étant de sortir un planning pour chaque artiste par date via un bouton sur mon formulaire Artiste.

Voici le code de base que j'utilise pour la concaténation :

VBA :
Public Function RecupNomtroupe122(idSP As Long) As String
Dim res As DAO.Recordset
Dim SQL As String
'Selectionne les participant du projet
SQL = "SELECT TROUPE_NomTroupe FROM GENERAL1 WHERE idSP=" & idSP
Set res = CurrentDb.OpenRecordset(SQL)

'Concatene les différents enregistrement
While Not res.EOF
RecupNomtroupe122 = RecupNomtroupe122 & res.Fields(0).Value & vbCrLf
res.MoveNext
Wend

Set res = CurrentDb.OpenRecordset(SQL)
'Enleve le dernier espace
RecupNomtroupe122 = Left(RecupNomtroupe122, Len(RecupNomtroupe122) - 1)
'libere la mémoire
Set res = Nothing
End Function


et Ensuite SQL :

SELECT DISTINCT GENERAL1.idSP, RecupNomTroupe122(idSP) AS TROUPE
FROM GENERAL1;


Donc je souhaiterai rajouté dans la clause where IdArt= & IdArt mais je ne trouve pas de solution :/

N'hésitez pas à me demander des informations que j'aurai oublié de donner.
Merci d'avance aux personnes donnant de leur temps pour résoudre ce problème et m'apporter un début de réponse.

Configuration: Windows / Chrome 97.0.4692.71
A voir également:

6 réponses

yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
14 janv. 2022 à 12:25
bonjour,
Tu mélanges la description de ce que tu veux obtenir avec la description de comment tu ne réussis pas à l'obtenir.

Oublie provisoirement les fonctions, les concaténations et les requêtes.

Ceci est clair, mais incomplet:
"Le but étant de sortir un planning pour chaque artiste par date via un bouton sur mon formulaire Artiste."
N'hésite pas à donner un exemple de contenu des tables, et du résultat attendu.

N'oublie pas de donner la liste de tes tables (concernées) et de leurs champs.
1
Ok si tu le souhaites le plus simple c'est d'avoir le fichier directement.
https://wetransfer.com/downloads/bd6e55cec6b5c3899599ddc7d372c8a620220114130837/26dc46

J'ai pris le temps de créer un fichier description avec des screens pour expliquer au mieux le tout.

Est-ce que cela te convient ou tu préfèrerais que je fasse autrement ?
Merci en tout cas de m'avoir répondu.
0
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
14 janv. 2022 à 15:01
C'est amusant: rien, dans ton fichier, ne fait penser à ce qu'il y a dans ton code.

Si tu veux publier un état, le point de départ, c'est de créer une requête qui retourne l'information désirée.

SI je devine bien, tu veux publier un état avec, par ordre chronologique, les concerts d'un artiste.
Le point de départ, c'est une requête qui retourne toutes les infos de chaque spectacle.
0
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 1
14 janv. 2022 à 15:11
Et oui du coup j'ai supprimé car mon code ne fonctionnait pas comme je le souhaitais.
Oui voila c'est cela je veux par concert et pour chaque concert par artiste. et la je flanche :/
0
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
14 janv. 2022 à 15:21
Le point de départ, c'est une requête qui retourne toutes les infos de tous les spectacles.
1
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 1 > yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024
Modifié le 14 janv. 2022 à 15:51
Ok donc je dois créé une requête basique qui réunis tous les champs de table dont j'ai besoin pour créer les prochaines requête si je comprend bien.
0
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 1
14 janv. 2022 à 16:00
Ok donc je crée une requête basique qui contient tous les champs des divers tables dont j'ai besoin pour créer mes tableaux.
0
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
14 janv. 2022 à 16:44
En effet, il suffira ensuite, à l'entrèe de l'état, de filtrer sur base de l'artiste.
0
Nix62 > yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024
Modifié le 14 janv. 2022 à 17:03
Je suis d'accord mais c'est vrai que dans la description il y a quelque chose de mal expliqué. Malheureusement je suis en voiture et je pars en réunion. Mais en fait il est possible qu'un artiste intervient dans divers troupe pour le même spectacle. Et il faudrait donc que dans ce cas les données soient sur une seule ligne. D'ou le besoin de concaténer.
0
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474 > Nix62
14 janv. 2022 à 18:01
Je comprends maintenant ce que tu essayais d'expliquer au départ!
Le mot magique qui manquait, c'est agrégation, ou regroupement d'enregistrements.
Tu voulais agréger plusieurs enregistrements, regrouper tous les enregistrements ayant des valeurs identiques pour certains champs, en concaténant un autre champ.

Comme tu te décrivais "très limité en SQL", je n'ai pas fait confiance que ce que tu montrais était proche de ce dont tu avais besoin. Tu n'as pas non plus décris ce que cela donnait, et en quoi c'était différent de ce que tu voulais.

Pour commencer:
Public Function RecupNomtroupe122(idSP As Long, idArt as long) As String
' ...
SQL = "SELECT TROUPE_NomTroupe FROM GENERAL1 WHERE idSP=" & idSP & " and idArt = " & idArt
' ...


Puis je ferais une requête GENERAL2
SELECT DISTINCT ... FROM GENERAL1 ...
de tous les champs utiles, en éliminant TROUPE_NomTroupe de la liste des champs.

Puis la requête de base de l'état
SELECT ....., RecupNomTroupe122(idSP, idArt) AS TROUPE
FROM GENERAL2;


Le but étant de faire d'abord le DISTINCT, puis d'appeler RecupNomTroupe122 dans la requête suivante, afin de réduire le nombre d'appels à la fonction. Tu peux aussi ajouter simplement idArt à la requête que tu présentais au départ.
0
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 1 > yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024
15 janv. 2022 à 11:30
Bonjour, désolé de n'avoir pu me reconnecté avant.
Et oui mon niveau n'est pas très bon mais niveau explication je suis peut-être encore pire ...
Je vais essayer cela et je reviens vers toi rapidement.
1
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474 > nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022
15 janv. 2022 à 13:01
Avec des troupes qui s'appellent SONO2 et SPECTACLE1,
et des sonos qui s'appellent ARTISTE1,
tu as encore du boulot pour construire un exemple clair.
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
Je ramène mon grain de sel !
En fait ton problème est typique des problèmes qu'on rencontre dans ces situations. Le meilleur moyen est de construire une table relai qui te permette de sélectionner à partir de la table A les enregistrements de la table B lui correspondant, et réciproquement, ceux de la table A correspondant aux enregistrements de la table B . Dans ton exemple, ce sera toutes les dates où se produit un artiste, ou bien tous les artistes qui se produisent à une certaine date.
Ainsi ta table sera constituée de 3 champs : un champ IdTableLiaison, un champ IdArtiste, et un champ IdDate. Ainsi tu seras sûr qu'à chaque artiste correspond une série de date dont le couple IdArt/IdSp est unique. Après tu pourras construire toutes les liaisons dans un sens ou l'autre dont tu auras besoin. Mais oublie ton idée de concaténation qui n'est pas bonne;
Bon courage;
0
yg_be Messages postés 22874 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 juin 2024 1 474
15 janv. 2022 à 12:12
bonjour Tessel75,

Je n'ai pas vérifié la qualité de la structure des données, et il est possible qu'elle ne soit pas optimale.

Je ne vois cependant pas en quoi il est nocif de faire de l'agrégation par concaténation, ni en quoi cela serait un indice d'une mauvaise structure.

Si un artiste peut intervenir dans plusieurs troupes pour le même spectacle, je trouve tout à fait raisonnable, dans une requête, de regrouper toutes les combinaisons (article, spectacle) en concaténant les noms des troupes.

Peut-être confonds-tu avec la concaténation de plusieurs valeurs dans un champ d'un enregistrement d'une table? Il s'agit ici, non de table, mais de requête et d'état.
0
nix62 Messages postés 8 Date d'inscription vendredi 14 janvier 2022 Statut Membre Dernière intervention 15 janvier 2022 1
15 janv. 2022 à 17:26
Un merci à Yg_BE pour son aide. Mon problème est maintenant résolu, je clos donc ce sujet ;)
0