Compter les éléments d'un split
Bonjour,
J'essaye de travailler sur un champs qui contiendrait une liste un peu à la manière des champs multivalués...
J'ai une table [Produits] qui contient des enregistrements sous la forme:
Produit / Liste (des sous produits utilisés)
"Produit1", "sous_prod2;sous_prod9;sous_prod15"
"Produit2", "sous_prod9,sous_prod22"
"Produit9", "sous_prod15;sous_prod21,sous_prod3,sous_prod1"
Une table [Sous_Produits] sous la forme:
Sous_Produit/ Désignation / Rangement
"sous_prod1","vis de 12", "tirroir2"
"sous_prod2","écrous de 12", "tirroir21"...
Une table [Produits à transférer] qui à la même structure que le table [Produits] et qui me sert de table tampon.
Lorsque je travaille sur un produit (ajout ou suppression de sous produits), les sous produits à partir desquels il est fabriqué sont chargés dans ma table [Produits à transférer] au moyen d'un requette.
Afin de pouvoir appeler chacun des "sous produits" d'un "produit" j'ai recours à un split réalisé dans une requête grace à la fonction découpe définie dans un module global:
Fonction découpe
Code:
1 2 3 4
|
Public Function Decoupe(str As String, separateur As String, INDEX As Long) As String
Decoupe = Split(str, separateur)(INDEX)
End Function |
Requette appelant le sous produit(1) d'un produit
Code:
1 2 3 4 5 6
|
MySql = "INSERT INTO [Produits à transferer] (Sous_Produit, Désignation, Rangement)"
MySql = MySql + " SELECT decoupe([Produits].[Liste],';',1), [Sous_Produits].Désignation, [Sous_Produits].Rangement"
MySql = MySql + " FROM [([Produits] INNER JOIN [Sous_Produits] ON decoupe([Produits].[Liste],';',1)=[Sous_Produits].[Sous_Produit]"
MySql = MySql + " WHERE ([Produits].Produit = """ & Produit & """ ) ;"
bdd.Execute MySql |
La fonction découpe utilise un index afin d'extraire sous produit par sous produit mais le problème c'est que je ne vois pas comment connaitre le nombre (i) de "sous produits" d'un produit afin de pouvoir itérer ma requette de 0 à i ...
Je précise que je suis sous access 2003 et que je ne peux donc pas utiliser les champs multivalués...
Alors si vous avez des idées...
Merci d'avance.
C'est bien là le problème...
Bonjour et merci LedZeppII
C'est bien là que je n'y arrive pas...
Citation:
Il te suffit dans la boucle de générer le code de ta requête et de l'exécuter.
Ce qui me pose problème c'est que le champ "A;B;C;D" est sélectionné dans la requête mais la requête doit être lancée autant de fois qu'il y a d'éléments dans le champ...
J'ai donc besoin de l'information contenue dans la requete en "dehors" de la requete car ma requête est basée sur une jointure assurée par la fonction découpe
Code:
1 2
|
decoupe([Produits].[Liste],';',1)=[Sous_Produits].[Sous_Produit] |
Ici evidemment la jointure est faite sur le 2eme élément de la liste (i=1)
Peut être devrais-je changer d'idée en ne requetant plus i fois avec une jointure mais une seule fois en cherchant dans la table [Sous produits] avec une requête qui utiliserait une chaine "A' or 'B' or 'C' or 'D" et qui serait générée par la fonction découpe...
Est ce que vous avez des idées ? :aie: