IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Recherche dans les fichiers en éliminant les doublons [WD17]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut Recherche dans les fichiers en éliminant les doublons
    Bonjour,
    Je suis débutante dans le domaine de la programmation windev, je veux afficher les produits selon le fournisseur sélectionné dans un combo, pour ce là j'ai utilisé un filtre et puis 2 recherches successives(la première concernant les lignes d'un bon de livraison et la 2ème concernant les articles) , l'affichage est correct sauf qu'il y a des doublons puisque un article peut se trouver dans plus qu’une ligne du table ligne_bl, j'ai essayé la fonction tablecherche mais le programme se bloque
    voilà mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    TableSupprimeTout(TABLE_listProduit)
    HFiltre(bonliv,idfr,COMBO_Fournisseur[ListeSelect(COMBO_Fournisseur)])   //Permet de filtre la table sur l'ID de l'élément sélectionné dans l'autre table    
    HLitPremier(bonliv,hRespecteFiltre)  // Début du parcours de la table en utilisant le filtre
    TANTQUE PAS HEnDehors(bonliv)  // On parcours tant qu'on n'a pas atteint la fin du fichier
    	SI bonliv.idfr=COMBO_Fournisseur..ValeurAffichée  ALORS
    		// Recherche de l'article
    		HLitRecherchePremier(ligne_bl,numbl, bonliv.numbl)
    		SI HTrouve(ligne_bl) ALORS
    			HLitRecherchePremier(article,idart, ligne_bl.idart)
    			SI HTrouve(article) ALORS
    			//On ajoute
    			SI TableCherche(COL_refArt,article.idart,Vrai)=-1 ALORS
     
    		     	TableAjouteLigne(TABLE_listProduit,article.IDsous_categ,bonliv.idfr,article.idart,article.desart,article.remise,article.prixart,article.stockart) 
     
    		SINON
    		FIN	
    		    FIN
    		    SINON
    			// Message d'erreur pour la ligne
    			Erreur("erreur")
    			FIN
    			SINON
    				// Message d'erreur pour la ligne
    				Erreur("erreur")
     
    		FIN
    	FIN
    	HLitSuivant(bonliv)
     
    HDésactiveFiltre(bonliv)
     
    TableAffiche(TABLE_listProduit)
    Merci d'avance pour vos aides

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    J'ai du mal à voir comment tu peux avoir des doublons, puisque tu cherches dans la table si l'article y est déjà.
    A moins qu'un article existe en plusieurs exemplaires avec des Ids différents, dans ce cas ton problème est bien en amont...
    D'un autre côté, en utilisant une requête ton code serait bien plus simple:
    • Dédoublonnage dans la requête
    • Plus de boucles imbriquées


    Et en passant, je ne vois pas l'intérêt du test en ligne 5, vu qu'il y a un filtre qui fait déjà le travail...

    Tatayo.

  3. #3
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Lors du parcours de bonliv, tu as mal positionné ton HLitSuivant(bonliv).. : tu ne pouvais pas lire l'enregistrement suivant..

    Je te conseilles d'utiliser plutot une requete SQL, que tu pourras appliquer dans le code d'un bouton (par exemple) qui serait placé à coté de ta combo Fournisseur.

    Ton Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    TableSupprimeTout(TABLE_listProduit)
    HFiltre(bonliv,idfr,COMBO_Fournisseur[ListeSelect(COMBO_Fournisseur)])   //Permet de filtre la table sur l'ID de l'élément sélectionné dans l'autre table    
    HLitPremier(bonliv,hRespecteFiltre)  // Début du parcours de la table en utilisant le filtre
    TANTQUE PAS HEnDehors(bonliv)  // On parcours tant qu'on n'a pas atteint la fin du fichier
    	SI bonliv.idfr=COMBO_Fournisseur..ValeurAffichée  ALORS
    		// Recherche de l'article
    		HLitRecherchePremier(ligne_bl,numbl, bonliv.numbl)
    		SI HTrouve(ligne_bl) ALORS
    			HLitRecherchePremier(ARTICLE,idart, ligne_bl.idart)
    			SI HTrouve(ARTICLE) ALORS
    				//On ajoute
    				SI TableCherche(COL_refArt,ARTICLE.idart,Vrai)=-1 ALORS
     
    					TableAjouteLigne(TABLE_listProduit,ARTICLE.IDsous_categ,bonliv.idfr,ARTICLE.idart,ARTICLE.desart,ARTICLE.remise,ARTICLE.prixart,ARTICLE.stockart) 
     
    				SINON
    					// Message d'erreur pour la ligne
    					Erreur("erreur")
    				FIN	
    			FIN
    		SINON
    			// Message d'erreur pour la ligne
    			Erreur("erreur")
    		FIN
    	SINON
    		// Message d'erreur pour la ligne
    		Erreur("erreur")
     
    	FIN
    	HLitSuivant(bonliv)
    FIN
     
    HDésactiveFiltre(bonliv)
     
    TableAffiche(TABLE_listProduit)
    Si je peux me permettre, essayes quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tablesupprimeTout(TABLE_listProduit)
     
    SI PAS HexecuteRequete(REQ_SELECT_BDL_ARTICLE_FOURNISSEUR,HrequeteDefaut,CBO_FOURNISSEUR..Valeur)
            Erreur("Impossible d'executer la requete")
    SINON
            POUR TOUT REQ_SELECT_ARTICLE_FOURNISSEUR
       TableAjouteLigne(TABLE_listProduit,REQ_SELECT_ARTICLE_FOURNISSEUR.IDsous_categ,REQ_SELECT_ARTICLE_FOURNISSEUR.idfr,REQ_SELECT_ARTICLE_FOURNISSEUR.idart,REQ_SELECT_ARTICLE_FOURNISSEUR.desart,REQ_SELECT_ARTICLE_FOURNISSEUR.remise,REQ_SELECT_ARTICLE_FOURNISSEUR.prixart,REQ_SELECT_ARTICLE_FOURNISSEUR.stockart)
            FIN
    FIN
    TableAffiche(TABLE_listProduit)
    Cordialement
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup Tatayo et Toytoy31 pour vos réponse
    j'ai pas de grand idée à propos les requêtes sous windev, j'ai essayé celà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TableSupprimeTout(TABLE_listProduit)
    REQ_SELECT_ARTICLE_FOURNISSEUR est une Source de Données
    REQ_SELECT_ARTICLE_FOURNISSEUR = "SELECT  article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr FROM article,  bonliv,ligne_bl  where article.idart=ligne_bl.idart and ligne_bl.numbl=bonliv.numbl and bonliv.idfr=combo_fournisseur..valeur"
    SI PAS HExécuteRequête(REQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut,COMBO_Fournisseur..Valeur)
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT REQ_SELECT_ARTICLE_FOURNISSEUR
    		TableAjouteLigne(TABLE_listProduit,REQ_SELECT_ARTICLE_FOURNISSEUR.IDsous_categ,REQ_SELECT_ARTICLE_FOURNISSEUR.idfr,REQ_SELECT_ARTICLE_FOURNISSEUR.idart,REQ_SELECT_ARTICLE_FOURNISSEUR.desart,REQ_SELECT_ARTICLE_FOURNISSEUR.remise,REQ_SELECT_ARTICLE_FOURNISSEUR.prixart,REQ_SELECT_ARTICLE_FOURNISSEUR.stockart)
    	FIN
    FIN
    TableAffiche(TABLE_listProduit)
    Mais le programme se bloque

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Il faut ajouter un distinct dans la requête, et passer la valeur de la combo en paramètre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT distinct article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr
    FROM article
    inner join ligne_bl on article.idart=ligne_bl.idart 
    inner join bonliv on ligne_bl.numbl=bonliv.numbl 
    where bonliv.idfr=%1
    Je me suis permis de ré-écrire les jointures à la "nouvelle" norme sql92 (nouvelle depuis 20 ans ).
    Pour passer l'id du fournisseur: ChaineConstruit().

    Il faut tout de même vérifier s'il y a bien des indexes sur les rubriques impliquées dans les jointures et le filtre, donc ligne_bl.idart, ligne_bl.numbl, et bonliv.idfr. J'imagine que c'est déjà le cas pour bonliv.idfr et article.idart.

    Il faut également supprimer le TableAffiche(), qui ne sert à rien ici.

    Tatayo.

  6. #6
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Essayes plutot cela, si tu souhaite faire une requete dites "en dur" (cad que tu écris manuellement dans le code et que tu ne pourras pas réutiliser ailleurs)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    TableSupprimeTout(TABLE_listProduit)
    //* Déclarations des variables
    sdSMaSourceDeDonnee est une Source de Données
    tabSMonTableauDeParametre est un tableau de Variant
    sMaRequete est une chaîne = [
    SELECT  
    	ARTICLE.idart AS idart,  
    	ARTICLE.desart AS desart, 
    	 ARTICLE.prixart AS prixart,  
    	 ARTICLE.remise AS remise,  
    	 ARTICLE.stockart AS stockart,  
    	 ARTICLE.IDsous_categ AS IDsous_categ,  
    	 bonliv.idfr AS idfr 
    FROM 
    	ARTICLE, 
    	bonliv,
    	ligne_bl  
    WHERE 
    	ARTICLE.idart=ligne_bl.idart 
    	AND ligne_bl.numbl=bonliv.numbl 
    	AND bonliv.idfr=%1
    ]
     
    tabSMonTableauDeParametre[1] = COMBO_FOURNISSEUR..Valeur
    //* on modifie les parametres en fonction des valeurs présentes dans le tableau
    sMaRequete = ChaîneConstruit(sMaRequete,tabSMonTableauDeParametre)
     
    SI PAS HExécuteRequêteSQL(P_SMaSourceDeDonnee,hRequêteDéfaut,sMaRequete) ALORS
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT P_SMaSourceDeDonnee
    		TableAjouteLigne(TABLE_listProduit,{P_SMaSourceDeDonnee+".IDsous_categ",indRubrique},{P_SMaSourceDeDonnee+".idfr",indRubrique},{P_SMaSourceDeDonnee+".idart",indRubrique},...
    											 {P_SMaSourceDeDonnee+".desart",indRubrique},{P_SMaSourceDeDonnee+".remise",indRubrique},{P_SMaSourceDeDonnee+".prixart",indRubrique},{P_SMaSourceDeDonnee+".stockart",indRubrique})
    	FIN
    FIN
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  7. #7
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par tatayo Voir le message
    Il faut ajouter un distinct dans la requête, et passer la valeur de la combo en paramètre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT distinct article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr
    FROM article
    inner join ligne_bl on article.idart=ligne_bl.idart 
    inner join bonliv on ligne_bl.numbl=bonliv.numbl 
    where bonliv.idfr=%1
    Je me suis permis de ré-écrire les jointures à la "nouvelle" norme sql92 (nouvelle depuis 20 ans ).
    Pour passer l'id du fournisseur: ChaineConstruit().

    Il faut tout de même vérifier s'il y a bien des indexes sur les rubriques impliquées dans les jointures et le filtre, donc ligne_bl.idart, ligne_bl.numbl, et bonliv.idfr. J'imagine que c'est déjà le cas pour bonliv.idfr et article.idart.

    Il faut également supprimer le TableAffiche(), qui ne sert à rien ici.

    Tatayo.
    Désolé.. je n'avais pas vu ta réponse...
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup Tatayo et Toytoy31 pour vos réponses,
    j'ai testé les 2 solutions concernant a solution du Toytoy31, le programme me renvoi l'erreur suivant:
    La dimension 1 du tableau possède 0 élément(s) et vous tentez d'accéder à l'élément 1.
    concernant la solution de tatayo j'ai remplacé la rerquete par ta nouvelle requette et le programme se bloque lors du test
    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TableSupprimeTout(TABLE_listProduit)
    REQ_SELECT_ARTICLE_FOURNISSEUR est une Source de Données
    REQ_SELECT_ARTICLE_FOURNISSEUR = "SELECT  DISTINCT article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart  INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl  WHERE bonliv.idfr=%1 "
    SI PAS HExécuteRequête(REQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut,COMBO_Fournisseur..Valeur)
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT REQ_SELECT_ARTICLE_FOURNISSEUR
    		TableAjouteLigne(TABLE_listProduit,REQ_SELECT_ARTICLE_FOURNISSEUR.IDsous_categ,REQ_SELECT_ARTICLE_FOURNISSEUR.idfr,REQ_SELECT_ARTICLE_FOURNISSEUR.idart,REQ_SELECT_ARTICLE_FOURNISSEUR.desart,REQ_SELECT_ARTICLE_FOURNISSEUR.remise,REQ_SELECT_ARTICLE_FOURNISSEUR.prixart,REQ_SELECT_ARTICLE_FOURNISSEUR.stockart)
    	FIN
    FIN

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Bonjour,

    "Le programme se bloque" n'est pas une indication précise qui nous permettra de t'aider.
    N'y a-t-il pas un message quelconque ?

    Sinon je n'ai jamais fetché une requête avec la boucle POUR TOUT... et à vrai dire ça me semble étrange.... (ce n'est qu'un avis personnel)
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci michel.souris pour votre réponse,
    je vous explique ce qui se passe lors du test: après la sélection d'une ligne du combo fournisseur la souris se bloque et une fenêtre qui apparaisse : WDTst.exe a cessé de fonctionner windows va fermer se programme, concernant la boucle pour j'ai déjà utilisé cette boucle avec une autre requête et tout va bien, aussi j'ai supprimé la boucle de ce code et le même problème m'a rencontré

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    j'ai vérifié mon code pas à pas, j'ai remarqué que le problème est dans le passage en paramètre dans la requête précisament dans ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REQ_SELECT_ARTICLE_FOURNISSEUR = "SELECT  DISTINCT article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart  INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl  WHERE bonliv.idfr=%1 "
    SI PAS HExécuteRequête(REQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut,COMBO_Fournisseur..Valeur)
    quelqu'un peut m'aider svp?

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    A vrai dire je comprends pas bien ce que vous faites car je n'ai jamais utilisé une source de données de cette façon...

    Personnellement je déclarerais une chaine qui contiendra le texte de ma requête....

    genre req est une chaine = "SELECT DISTINCT article.idart AS idart, article.desart AS desart, article.prixart AS prixart, article.remise AS remise, article.stockart AS stockart, article.IDsous_categ AS IDsous_categ, bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl WHERE bonliv.idfr="+COMBO_Fournisseur..Valeur

    puis

    SI PAS HExécuteRequête(REQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut)
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup michel.souris pour votre réponse,
    j'ai testé votre proposition de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     REQ_SELECT_ARTICLE_FOURNISSEUR est une chaine
     
     sREQ_SELECT_ARTICLE_FOURNISSEUR= "SELECT  DISTINCT article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart  INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl  WHERE bonliv.idfr="+COMBO_Fournisseur..Valeur
    SI PAS HExécuteRequête(sREQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut) 
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT fournisseur REQ_SELECT_ARTICLE_FOURNISSEUR
    		TableAjouteLigne(TABLE_listProduit,{sREQ_SELECT_ARTICLE_FOURNISSEUR+".IDsous_categ",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".idfr",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".idart",indRubrique},...
    		//{sREQ_SELECT_ARTICLE_FOURNISSEUR+".desart",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".remise",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".prixart",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".stockart",indRubrique})
    	FIN
    mais ce code m'a renvoyé le message d'erreur "Impossible d'executer la requete"

  14. #14
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par tun_01 Voir le message
    Merci beaucoup michel.souris pour votre réponse,
    j'ai testé votre proposition de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     REQ_SELECT_ARTICLE_FOURNISSEUR est une chaine
     
     sREQ_SELECT_ARTICLE_FOURNISSEUR= "SELECT  DISTINCT article.idart AS idart,  article.desart AS desart,  article.prixart AS prixart,  article.remise AS remise,  article.stockart AS stockart,  article.IDsous_categ AS IDsous_categ,  bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart  INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl  WHERE bonliv.idfr="+COMBO_Fournisseur..Valeur
    SI PAS HExécuteRequête(sREQ_SELECT_ARTICLE_FOURNISSEUR,hRequêteDéfaut) 
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT fournisseur REQ_SELECT_ARTICLE_FOURNISSEUR
    		TableAjouteLigne(TABLE_listProduit,{sREQ_SELECT_ARTICLE_FOURNISSEUR+".IDsous_categ",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".idfr",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".idart",indRubrique},...
    		//{sREQ_SELECT_ARTICLE_FOURNISSEUR+".desart",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".remise",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".prixart",indRubrique},{sREQ_SELECT_ARTICLE_FOURNISSEUR+".stockart",indRubrique})
    	FIN
    mais ce code m'a renvoyé le message d'erreur "Impossible d'executer la requete"

    Re bonjour ,

    Utilises la fonction HexecuteRequeteSQL en ayant au préablable déclaré une source de données comme je l'avait fait dans mon exemple de code précedent..

    qu'en penses-tu Michel ?
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci Toytoy31 pour votre réponse,
    j'ai testé votre exemple tout à l'heur et il m'a renvoyé le message d'erreur (La dimension 1 du tableau possède 0 élément(s) et vous tentez d'accéder à l'élément 1.)
    j'ai utilisé maintenant la fonction HexecuteRequeteSQL, mais même problème: message d'erreur ("Impossible d'executer la requete")

  16. #16
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Oui toytoy il faut utiliser hExecuteRequeteSQL ! je me suis loupé je voulais dire :

    req est une chaine = "SELECT DISTINCT article.idart AS idart, article.desart AS desart, article.prixart AS prixart, article.remise AS remise, article.stockart AS stockart, article.IDsous_categ AS IDsous_categ, bonliv.idfr AS idfr FROM article INNER JOIN ligne_bl ON article.idart=ligne_bl.idart INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl WHERE bonliv.idfr="+COMBO_Fournisseur..Valeur

    puis

    SI PAS HExécuteRequêteSQL(REQ_SELECT_ARTICLE_FOURNISSEUR, req, hRequêteDéfaut)
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  17. #17
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut


    Je pense comprendre d’où vient ce problème...

    essaye cela en mettant un point d’arrêt à la ligne avant le tableauAjoute() s'il te plait.. puis fait du "pas à pas" en appuyant sur F7

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    TableSupprimeTout(TABLE_listProduit)
    //* Déclarations des variables
    sdSMaSourceDeDonnee est une Source de Données
    tabSMonTableauDeParametre est un tableau de Variant
    sMaRequete est une chaîne = [
    SELECT DISTINCT 
    	article.idart AS idart,  
    	article.desart AS desart,  
    	article.prixart AS prixart,  
    	article.remise AS remise,  
    	article.stockart AS stockart,  
    	article.IDsous_categ AS IDsous_categ,  
    	bonliv.idfr AS idfr
    FROM 
    	article
    		INNER JOIN ligne_bl ON article.idart=ligne_bl.idart 
    		INNER JOIN bonliv ON ligne_bl.numbl=bonliv.numbl 
    WHERE 
    	bonliv.idfr=%1
    ]
     
    tableauAjoute(tabSMonTableauDeParametre,COMBO_FOURNISSEUR..Valeur)
    //* on modifie les parametres en fonction des valeurs présentes dans le tableau
    sMaRequete = ChaîneConstruit(sMaRequete,tabSMonTableauDeParametre[1])
     
    SI PAS HExécuteRequêteSQL(P_SMaSourceDeDonnee,hRequêteDéfaut,sMaRequete) ALORS
    	Erreur("Impossible d'executer la requete")
    SINON
    	POUR TOUT P_SMaSourceDeDonnee
    		TableAjouteLigne(TABLE_listProduit,{P_SMaSourceDeDonnee+".IDsous_categ",indRubrique},{P_SMaSourceDeDonnee+".idfr",indRubrique},{P_SMaSourceDeDonnee+".idart",indRubrique},...
    											 {P_SMaSourceDeDonnee+".desart",indRubrique},{P_SMaSourceDeDonnee+".remise",indRubrique},{P_SMaSourceDeDonnee+".prixart",indRubrique},{P_SMaSourceDeDonnee+".stockart",indRubrique})
    	FIN
    FIN
    Pas de soucis Michel

    cordialement
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  18. #18
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2014
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup Toytoy pour votre aide,
    j'ai testé votre code il m'a renvoyé l'erreur :"Impossible d'executer la requete"
    j'ai mis le point d’arrêt à la ligne juste avant le tableauAjoute() le programme rentre dans un débogage (débogage en cours)

  19. #19
    Membre habitué Avatar de Toytoy31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Novembre 2010
    Messages : 74
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par tun_01 Voir le message
    Merci beaucoup Toytoy pour votre aide,
    j'ai testé votre code il m'a renvoyé l'erreur :"Impossible d'executer la requete"
    j'ai mis le point d’arrêt à la ligne juste avant le tableauAjoute() le programme rentre dans un débogage (débogage en cours)
    vous pouvez me faire une impression d’écran ou nous dire quelle est la valeur de sMaRequete juste avant d’exécuter la requête s'il vous plait ?

    Mettez un point d’arrêt juste avant le HexecuteRequeteSQL() et dites nous à quoi ressemble sMaRequete.

    Normalement en bas de votre fenêtre windev, vous pouvez lors du débogage, voir les variables ainsi que leur valeur

    NOTE pour moi-même... PENSER A VERIFIER LE NOM DES VARIABLES UTILISEES ET DECLAREES !!!

    Modifie P_SMaSourceDeDonnee par sdSMaSourceDeDonnee
    Mon message vous a aidé, pensez à remercier . La discussion est résolue, n'oubliez pas le tag

    Bonne continuation et bon dev surtout

  20. #20
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par tun_01 Voir le message
    Merci beaucoup Toytoy pour votre aide,
    j'ai testé votre code il m'a renvoyé l'erreur :"Impossible d'executer la requete"
    j'ai mis le point d’arrêt à la ligne juste avant le tableauAjoute() le programme rentre dans un débogage (débogage en cours)
    C'est justement tout l'intérêt d'un point d'arrêt... basculer en mode débug !!!
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WD16] Incohérence entre les fichiers logiques et les fichiers physiques
    Par lololebricoleur dans le forum WinDev
    Réponses: 8
    Dernier message: 21/10/2011, 11h24
  2. Recherche d'un script qui donne les nom de tout les fichier
    Par ryodo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/08/2010, 17h40
  3. Différence entre les fichiers .ss et les fichiers .scm
    Par Djakisback dans le forum Scheme
    Réponses: 2
    Dernier message: 18/11/2008, 18h53
  4. Recherche dans un fichier sans utiliser les Jet drivers ?
    Par kueisaho dans le forum VBScript
    Réponses: 1
    Dernier message: 05/03/2007, 18h09
  5. Réponses: 1
    Dernier message: 05/09/2006, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo