|
| Filtre sur table liée par variable |
| Iniciado por glefebvre, 05,dic. 2019 17:32 - 3 respuestas |
| |
| | | |
|
| |
| Publicado el 05,diciembre 2019 - 17:32 |
Bonjour tout le monde. J'utilise un tableau d'objet pour remplir mes tables et j'aurai voulu savoir si il était possible de filtrer mon tableau d'objet en même temps que ma table. Car si je filtre ma table avec le FAA ou par programmation, les temps de réponses sont plus rapide que d'effectuer une lourde requête mais le problème c'est que s'il ne me reste plus que 5 lignes après avoir remplis mes filtres, il reste encore la totalité de ma table dans mon tableau d'objet, celle que j'utilise pour tout mes traitements. Cela pose donc problème dans le cas ou je dois lire l'élément suivant de mon tableau qui n'est, du coup, plus en phase avec se que voit l'utilisateur dans la table.
Sinon avez-vous une autre idée pour gérer ce problème ? j'ai essayé de "filtrer" le tableau mais avec mes X filtres les temps de traitement des POUR TOUT sont vraiment impossible.
Exemple : // si mon filtre gamme1 n'est pas vide SI FI_L_Collection.SAI_Gamme1 PAS ~= "" ALORS // On regarde si l'utilisateur veut faire un "contient" (alors il met un espace en premier) ou un "commence par" SI Gauche(FI_L_Collection.SAI_Gamme1,1) = " " ALORS TableActiveFiltre(FI_L_Collection.TABLE.COL_GAMME1,filtreContient,Milieu(FI_L_Collection.SAI_Gamme1,2)) SINON TableActiveFiltre(FI_L_Collection.TABLE.COL_GAMME1,filtreCommencePar,FI_L_Collection.SAI_Gamme1) FIN SINON TableDésactiveFiltre(FI_L_Collection.TABLE.COL_SCOLIntitule) FIN
La dans ce premier cas, ma table est bien filtré mais mon tableau qui permet de remplis ma table et qui lui est liée ne l'est pas.
sinon cela m'oblige à refaire des "inner join" sur 2 tables de l'analyse différentes se qui ralentit vachement le truc surtout que j'ai 5 gammes possibles donc 5 filtres gamme et donc 10 inner join possible alors sur un table pouvant compter plusieurs milliers de lignes ...
SI FI_L_Collection.SAI_Gamme1 PAS ~= "" ALORS sMonCodeFROM += " INNER JOIN CollectionGamme CG1 on CollectionGamme.IDCollectionGamme = Collection.XXXCollectionGamme1 " sMonCodeFROM += " INNER JOIN Gamme G1 on Gamme.IDGamme = CG1.IDGamme " SI Gauche(FI_L_Collection.SAI_Gamme1,1) = " " ALORS sMonCodeWHERE += "AND LOWER(G1.GAMIntitule) LIKE LOWER('%"+Milieu(FI_L_Collection.SAI_Gamme1,2)+"%')" SINON sMonCodeWHERE += "AND LOWER(G1.GAMIntitule) LIKE LOWER('"+FI_L_Collection.SAI_Gamme1+"%')" FIN FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 06,diciembre 2019 - 07:09 |
Bonjour, Je suppose que TableauCHercheParProcédure ne te convient pas.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2 mensajes |
|
| Publicado el 09,diciembre 2019 - 11:16 |
Bonjour, j'ai pu bricoler quelque chose avec ça oui. Maintenant je vais voir se que donne les temps de traitements merci.
(Si ça peut aider certaines personnes)
Exemple :
tabRéférence est un tableau de MCollection = FI_L_Collection.tabMonTableauDeCollectionSauvegardé nIndice est un entier tabMonNouveauTableauDeCollection est un tableau de MCollection PROCÉDURE INTERNE ProcCompareIntituleGamme(ElémentRecherché, Recherche) clMaColEnCours est un MCollection <- ElémentRecherché sMonIntitule1Recherche est une chaîne = clMaColEnCours.p_clMaCollectionGamme1.p_clMaGamme.p_sGAMIntitule SI Contient(sMonIntitule1Recherche,Recherche,SansCasse) = Faux OU sMonIntitule1Recherche ~= "" ALORS RENVOYER 1 SINON tabMonNouveauTableauDeCollection.Ajoute(clMaColEnCours) RENVOYER 1 FIN FIN
SI FI_L_Collection.SAI_Gamme1 PAS ~= "" ALORS SI Gauche(FI_L_Collection.SAI_Gamme1,1) = " " ALORS TableActiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1,filtreContient,Milieu(FI_L_Collection.SAI_Gamme1,2)) nIndice = TableauChercheParProcédure(tabRéférence, ProcCompareIntituleGamme, tcLinéaire, 0, Milieu(FI_L_Collection.SAI_Gamme1,2)) SINON TableActiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1,filtreCommencePar,FI_L_Collection.SAI_Gamme1) nIndice = TableauChercheParProcédure(tabRéférence, ProcCompareIntituleGamme, tcLinéaire, 0, FI_L_Collection.SAI_Gamme1) FIN tabRéférence = tabMonNouveauTableauDeCollection SINON TableDésactiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1) FIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2 mensajes |
|
| Publicado el 09,diciembre 2019 - 11:17 |
PROCEDURE INTERNE ProcCompareIntituleGamme(ElémentRecherché, Recherche) clMaColEnCours est un MCollection <- ElémentRecherché sMonIntitule1Recherche est une chaîne = clMaColEnCours.p_clMaCollectionGamme1.p_clMaGamme.p_sGAMIntitule SI Contient(sMonIntitule1Recherche,Recherche,SansCasse) = Faux OU sMonIntitule1Recherche ~= "" ALORS RENVOYER 1 SINON tabMonNouveauTableauDeCollection.Ajoute(clMaColEnCours) RENVOYER 1 FIN FIN
SI FI_L_Collection.SAI_Gamme1 PAS ~= "" ALORS SI Gauche(FI_L_Collection.SAI_Gamme1,1) = " " ALORS TableActiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1,filtreContient,Milieu(FI_L_Collection.SAI_Gamme1,2)) nIndice = TableauChercheParProcédure(tabRéférence, ProcCompareIntituleGamme, tcLinéaire, 0, Milieu(FI_L_Collection.SAI_Gamme1,2)) SINON TableActiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1,filtreCommencePar,FI_L_Collection.SAI_Gamme1) nIndice = TableauChercheParProcédure(tabRéférence, ProcCompareIntituleGamme, tcLinéaire, 0, FI_L_Collection.SAI_Gamme1) FIN tabRéférence = tabMonNouveauTableauDeCollection SINON TableDésactiveFiltre(FI_L_Collection.TABLE.COL_COLGamme1) FIN Mensaje modificado, 09,diciembre 2019 - 11:19 |
| |
| |
| | | |
|
| | | | |
| | |
|