PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Recherche table dans deux colonnes
Recherche table dans deux colonnes
Débuté par Squiz, 31 mar. 2015 11:07 - 3 réponses
Membre enregistré
2 messages
Posté le 31 mars 2015 - 11:07
Bonjour,
J'ai une table par programmation avec trois colonnes : Intitulé, type et quantité. Deux lignes peuvent avoir le même intitulé mais un type différent. Je souhaite faire en sorte que lorsque je clique sur un bouton qui est censé ajouté un élément intitulé "Produit 1" de type "A" à la table, il vérifie que l'élément est déjà présent dans la table, si oui il ajoute simplement la quantité à la ligne déjà présente, sinon il ajoute une nouvelle ligne.

Mon problème vient du fait que la fonction tableCherche ne me permet que de chercher sur une condition, soit la première colonne, soit la deuxième, par conséquent en utilisant uniquement tableCherche il me trouve le "Produit 1" même s'il est de type "B". Du coup je me dis qu'une solution viable serait de parcourir la table et de faire une double condition : si je trouve avec tableCherche, l'intitulé "Produit 1" alors je cherche le type "A" sur la même ligne. Ca me donne ça comme code :

RechercheIntitulé est un booléen
bRechercheTypeEXPRESS est un booléen
i est un entier
RechercheIntitulé = Faux
bRechercheTypeEXPRESS = Faux
i=1


TANTQUE i <= TableSelectOccurrence(TABLE_Commande)//Nombre de lignes de la tableFIN
RechercheIntitulé = TableCherche(COL_Intitulé,"Produit1",Vrai,i)
SI RechercheIntitulé ALORS
bRechercheTypeEXPRESS = TableCherche(COL_Type,"A", i)
SI bRechercheTypeEXPRESS ALORS
TABLE_Commande.COL_Quantité[i]++
FIN

FIN
FIN

//Si les deux recherches sont fausses c'est que l'élément n'a pas été trouvé, donc on peut ajouter une ligne
SI RechercheIntitulé = Faux ALORS
SI bRechercheTypeEXPRESS = Faux ALORS
TableAjouteLigne(TABLE_Commande,"Produit1", "A", 1)
FIN
FIN


Dès que j'essaye d'ajouter une deuxième fois le produit avec ce code, le programme plante... Je crois avoir repéré une erreur du fait que TableCherche cherche à partir de la ligne i et non uniquement sur la ligne i, mais dans tous les cas je ne trouve pas d'autre solution....

Merci à ceux qui voudront bien m'aider!
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 31 mars 2015 - 11:17
Salut,
Pourquoi pas une colonne cachée qui contient l'intitulé et le type de produit.
Comme ça tu peux faire ta recherche sur cette colonne en concaténant les 2 informations à rechercher.

--
Seb
Membre enregistré
186 messages
Popularité : +5 (11 votes)
Posté le 31 mars 2015 - 11:21
Dans le code que tu donnes si tu parcours la table tu n'as pas besoin d'un table cherche.
Fais plutôt un truc du style :
POUR i = 1 a TableOccurrence(TABLE_Commande
SI TABLE_Commande.COL_Intitulé[i] = "Produit1" _ET_ TABLE_Commande.COL_Type[i] = "A" ALORS
// Tu as trouvé ta ligne donc tu modifie
TABLE_Commande.COL_Quantité[i]++
SINON
// Tu n'as pas trouvé donc tu ajoute
TableAjouteLigne(TABLE_Commande,"Produit1", "A", 1)
FIN
FIN


--
Seb
Membre enregistré
2 messages
Posté le 31 mars 2015 - 11:56
Sebinc a écrit :
Dans le code que tu donnes si tu parcours la table tu n'as pas besoin d'un table cherche.
Fais plutôt un truc du style :
POUR i = 1 a TableOccurrence(TABLE_Commande
SI TABLE_Commande.COL_Intitulé[i] = "Produit1" _ET_ TABLE_Commande.COL_Type[i] = "A" ALORS
// Tu as trouvé ta ligne donc tu modifie
TABLE_Commande.COL_Quantité[i]++
SINON
// Tu n'as pas trouvé donc tu ajoute
TableAjouteLigne(TABLE_Commande,"Produit1", "A", 1)
FIN
FIN


--
Seb


Niquel! Effectivement c'est bien plus simple comme ça, avec une petite modif (j'ai sorti le tableajouteligne de la condition pour éviter qu'il l'écrive plusieurs fois), ça a l'air de marcher et avec beaucoup de lignes de code en moins, merci bien!