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 :

Requête sur une vue.


Sujet :

WinDev

  1. #1
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut Requête sur une vue.
    Bonjour,

    J'ai une procédure globale dans laquelle j'exécute une requête sur une vue passer en paramètre.
    Voici le 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
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery 			est une chaîne
    sdResultQuery 	est une Source de Données
     
    Trace(HNbEnr(sdVueProd))
     
    sQuery = [
    	SELECT 
    		sdVueProd.T_produits_ID AS T_produits_ID,	
    		T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays
    	FROM 
    		T_distributeurs,	
    		sdVueProd
    	WHERE 
    		sdVueProd.T_produits_numDistributeur	=	T_distributeurs.T_distributeurs_ID
    	AND
    	(
    		T_distributeurs.T_distributeurs_numPays = %1
    	)
    ]
     
    sQuery = ChaîneConstruit(sQuery,nNumPays)
     
    SI PAS HExécuteRequêteSQL(sdResultQuery,hRequêteDéfaut,sQuery) ALORS
    	Erreur(ErreurInfo())
    FIN
    Dans le "Trace" j'ai bien le bon nombre d'enregistrements, mais quand j'exécute la requête il me dit que "sdVueProd" est inconnu ??

    Quelqu'un a t'il une idée ?

    Merci.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Que se passe-t-il si tu traces le "nom logique" de la vue ?
    Qu'est-ce qui est affiché ?

    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery est une chaîne
    sdResultQuery est une Source de Données
     
    Trace(HNbEnr(sdVueProd))
    Trace(sdVueProd)

    Dans le code SQL, il faut utiliser les "noms logiques" déclarés au moteur de bases de données HyperFile, et non pas les variables du WLangage.

    Ok ?
    _

  3. #3
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    Effectivement il fallait utiliser le nom logique et là plus de soucis. Merci.

    Maintenant ce que je ne comprend pas c'est que si je fais ma requête sur ma table produits j'ai un certain nombre de produits qui remontent.

    Je crée ma vue sur ma table produits, sans condition, quand je trace le nombre de produits (sur mon paramètre sdVueProd) je vois qu'ils y sont tous.
    Mais quand je fais ma requête sur cette vue (avec son nom logique), qui est une image conforme de ma table, je ne remonte aucun résultat !?

    Pourquoi ?

    Je ne comprend pas une chose, je passe en paramètre ma vue, que je récupère dans sdVueProd, mais dans ma requête j'utilise le nom logique qui est : sdVueProduits.
    En conclusion je n'ai pas besoin de passer ma vue en paramètre ?
    Et quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(HNbEnr(sdVueProduits))
    ma procédure me dit que sdVueProduits n'existe pas.

    Merci.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par thierrybatlle Voir le message

    Maintenant ce que je ne comprend pas c'est que si je fais ma requête sur ma table produits j'ai un certain nombre de produits qui remontent.

    Je crée ma vue sur ma table produits, sans condition, quand je trace le nombre de produits (sur mon paramètre sdVueProd) je vois qu'ils y sont tous.
    Mais quand je fais ma requête sur cette vue (avec son nom logique), qui est une image conforme de ma table, je ne remonte aucun résultat !?

    Pourquoi ?
    Je ne connais pas précisément ta situation, peut être devrais-tu nous donner tout le code correspondant à ton problème.

    Néanmoins, je peux témoigner sur la faisabilité de ta démarche.

    Si je crée une source de données de type Vue, puis je crée une source de données basée sur une requête qui utilise la Vue... la source de données basée sur la requête me donne bien accès aux données issues de la Vue.
    Je confirme.

    Citation Envoyé par thierrybatlle Voir le message

    Je ne comprend pas une chose, je passe en paramètre ma vue, que je récupère dans sdVueProd, mais dans ma requête j'utilise le nom logique qui est : sdVueProduits.
    En conclusion je n'ai pas besoin de passer ma vue en paramètre ?
    De toute façon, il te faut connaître le nom logique, n'est-ce pas ?

    Citation Envoyé par thierrybatlle Voir le message

    Et quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(HNbEnr(sdVueProduits))
    ma procédure me dit que sdVueProduits n'existe pas.
    Il faut que tu sois bien clair par rapport aux conditions d'utilisation d'un nom sans guillemet dans une fonction HyperFile H*.
    Tu peux utiliser un nom sans guillemet dans un des 3 cas suivants:
    1. c'est un nom de "fichier HyperFile" décrit dans l'analyse associée au projet,
    2. c'est un nom "symbolique" déclaré avec le mot clé EXTERNE et qui correspond au nom logique d'un "fichier HyperFile" déclaré autrement que par l'analyse,
    3. c'est un nom de variable de type source de données, dans le respect des règles de portée.

    Autrement, tu dois utiliser une chaîne de caractères qui contient le nom logique du "fichier HyperFile".
    _

  5. #5
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    Depuis que j'utilise les guillemets j'ai le bon nombre d'enregistrement dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trace(HNbEnr("sdVueProduits"))
    Mais toujours pas de résultat lors de l'exécution de la requête !?

    Voici 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
    34
    35
    36
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery 			est une chaîne
    sdResultQuery 	est une Source de Données
     
    Trace(HNbEnr("sdVueProduits"))
    Trace(sdVueProd)
    sQuery = [
    	SELECT 
    		sdVueProduits.T_produits_ID AS T_produits_ID,	
    		T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays
    	FROM 
    		T_distributeurs,	
    		sdVueProduits
    	WHERE 
    		sdVueProduits.T_produits_numDistributeur	=	T_distributeurs.T_distributeurs_ID
    	AND
    	(
    		T_distributeurs.T_distributeurs_numPays = %1
    	)
    ]
     
    sQuery = ChaîneConstruit(sQuery,nNumPays)
     
    SI PAS HExécuteRequêteSQL(sdResultQuery,hRequêteDéfaut,sQuery) ALORS
    	Erreur(ErreurInfo())
    FIN
    Trace(HNbEnr(sdResultQuery))
    HLitPremier(sdResultQuery)
    TANTQUE PAS HEnDehors(sdResultQuery)
    	Ajoute(lstProd,"sdVueProduits".T_produits_ID)
    	HLitSuivant(sdResultQuery)
    FIN
     
    Trace(lstProd..Occurrence)
    sdVueProduits est créée dans le code du bouton qui appelle cette procédure.
    Je passe cette vue en 3eme paramètre à ma procédure.

    Merci bien.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par thierrybatlle Voir le message

    Mais toujours pas de résultat lors de l'exécution de la requête !?
    Qu'est que tu entends par «toujours pas de résultat» ?

    Quelle est la valeur tracée par:
    Code WLangage : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace(HNbEnr(sdResultQuery))


    Je vois que tu veux remplir une variable de type liste lstProd avec des données... mais tu fais erreur sur la source de données, j'ai l'impression...

    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    HLitPremier(sdResultQuery)
    TANTQUE PAS HEnDehors(sdResultQuery)
    	Ajoute(lstProd,"sdVueProduits".T_produits_ID)
    	HLitSuivant(sdResultQuery)
    FIN
    Je te propose d'essayer ceci :
    (j'ai utilisé une instruction de parcours HyperFile POUR TOUT, qui équivaut à HLitPremier, TANTQUE PAS HEnDehors, HLitSuivant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    POUR TOUT sdResultQuery
    	Ajoute(lstProd,sdResultQuery.T_produits_ID)
    FIN

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Encore un conseil en ce qui concerne la source de données et l'utilisation de son nom logique, en particulier dans une requête SQL.

    Citation Envoyé par thierrybatlle Voir le message
    Bonjour,

    Depuis que j'utilise les guillemets j'ai le bon nombre d'enregistrement dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trace(HNbEnr("sdVueProduits"))
    Si la procédure reçoit en paramètre une source de données, autant utiliser "son" nom logique, plutôt qu'un nom logique tapé "en dur", n'est-ce pas ?

    Dans une requête SQL, pour éviter de recopier le nom logique autant de fois que c'est nécessaire, je te propose d'utiliser un ALIAS SQL (cf. mot clé AS dans la requête SQL).
    Ainsi, en déclarant l'alias SQL V_Produits, il sera plus simple de coder la requête

    C'est la fonction ChaîneConstruit() qui se chargera d'insérer le nom logique dans la requête SQL.

    Cerise sur le gateau : tu remarqueras que le nom logique est placé entre crochets pour se protéger de l'éventualité d'un nom logique qui pourrait contenir des caractères problématiques via à vis de la syntaxe SQL (espace, tabulation, point...).

    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
     
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery est une chaîne
    sdResultQuery est une Source de Données
     
    Trace(HNbEnr(sdVueProd))
    Trace(sdVueProd)
     
    sQuery = [
        SELECT 
            V_Produits.T_produits_ID AS T_produits_ID, 
            T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays 
        FROM 
            T_distributeurs, 
            [%1] AS V_Produits 
        WHERE 
            V_Produits.T_produits_numDistributeur = T_distributeurs.T_distributeurs_ID 
            AND T_distributeurs.T_distributeurs_numPays = %2 
    ]
     
    sQuery = ChaîneConstruit(sQuery,sdVueProd,nNumPays)

  8. #8
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    J'ai encore un soucis et j'ai beau le tourner dans tous les sens je ne comprend pas pour je ne remonte aucun enregistrement.
    Voici 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
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery 			est une chaîne
    sdResultQuery 	est une Source de Données
     
     
    Trace(HNbEnr("sdVueProduits"))
     
    sQuery = [
    	SELECT 
    		V_Produits.T_produits_ID AS T_produits_ID,	
    		T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays
    	FROM 
    		T_distributeurs,	
    		[%1] AS V_Produits
    	WHERE 
    		V_Produits.T_produits_numDistributeur	=	T_distributeurs.T_distributeurs_ID
    	AND	T_distributeurs.T_distributeurs_numPays = %2
    ]
     
    sQuery = ChaîneConstruit(sQuery,sdVueProd,nNumPays)
     
    SI PAS HExécuteRequêteSQL(sdResultQuery,hRequêteDéfaut,sQuery) ALORS
    	Erreur(ErreurInfo())
    FIN
    Trace(HNbEnr(sdResultQuery))
     
    POUR TOUT sdResultQuery 
    	Ajoute(lstProd,sdResultQuery.T_produits_ID)
    FIN
    Dans le premier trace ma vue contient des enregistrements et quand je fais ma requête je n'ai plus d'enregistrement dans mon trace suivant ??

    Alors que quand je vérifie ma table si il y a des lien existant il n'en manque pas.

    Si quelqu'un a une idées elle serait la bienvenue.

    Merci

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 353
    Points : 3 881
    Points
    3 881
    Par défaut
    Salut,

    La fonction ChaineConstruit(..) a comme paramètres des chaines avec guillemet.

    A voir si cela change quelque chose.

  10. #10
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Oui, le problème vient du 2e paramètre de ton ChaîneConstruit. Tu essaie d'insérer le nom de ta vue dans la requête :

    Dans ta chaine sQuery, tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    		V_Produits.T_produits_ID AS T_produits_ID,	
    		T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays
    	FROM 
    		T_distributeurs,	
    		[%1] AS V_Produits
    	WHERE 
    		V_Produits.T_produits_numDistributeur	=	T_distributeurs.T_distributeurs_ID
    	AND	T_distributeurs.T_distributeurs_numPays = %2
    Or dans ton ChaîneConstruit tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sQuery = ChaîneConstruit(sQuery,sdVueProd,nNumPays)
    Essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sQuery = ChaîneConstruit(sQuery,"sdVueProd",nNumPays)
    et ça devrait fonctionner un peu mieux !

    Bon courage

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par peijnoob Voir le message

    Oui, le problème vient du 2e paramètre de ton ChaîneConstruit. Tu essaie d'insérer le nom de ta vue dans la requête :

    [...]

    Essaye avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sQuery = ChaîneConstruit(sQuery,"sdVueProd",nNumPays)
    et ça devrait fonctionner un peu mieux !
    Mais non peijnoob, tu te trompes.
    Il faut bien suivre le fil avant d'intervenir.

    sdVueProd est un paramètre de type source de données.

    L'évaluation d'une variable (ou un paramètre) de type source de données retourne une chaîne de caractères, qui est le nom logique du jeu de données correspondant dans le contexte HyperFile.

    Ici, l'évaluation de sdVueProd devrait (probablement) retourner la chaîne de caractères "sdVueProduits".

    Le problème n'est pas là.
    Il est plutôt sur la requête SQL sQuery ou sur les données.

    thierrybatlle, dans ta procédure, tu dois cesser d'utiliser le nom en dur "sdVueProduits".
    (1) Cela crée une confusion.
    (2) Cela montre que tu n'es pas sûr de ton code.

    Ensuite, essaye de modifier ta requête sQuery pour ne plus filtrer sur le n° de pays. Juste pour voir si tu récupères des enregistrements.

    Si ça ne fonctionne toujours pas, fais des tests avec WDSQL jusqu'à trouver la bonne requête.
    Une fois celle-ci déterminée, il sera facile de la reprendre dans ton code.

    Encore une fois, je suis persuadé que le souci vient de la requête, ou des données.
    _

  12. #12
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    Je ne comprend vraiment plus rien, voici le code de ma requête dans WDSQL, qui me remonte bien des résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT 
    T_PRODUITS.T_produits_ID AS T_produits_ID,	
    		T_distributeurs.T_distributeurs_numPays AS T_distributeurs_numPays
    FROM 
    T_PRODUITS,
    T_distributeurs
    WHERE
    t_produits.t_produits_numdistributeur = t_distributeurs.t_distributeurs_ID
    AND
    T_distributeurs.T_distributeurs_numPays = 74
    Il n'y a, ou du moins je ne le voie pas, aucune différence avec ma requête si ce n'est que j'utilise une vue plutôt que ma table produits.

    Peut-être ne pouvons nous pas faire de jointure entre 2 tables ?

    Si quelqu'un à encore des idées ??

    Merci bien.

  13. #13
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Mais non peijnoob, tu te trompes.
    Il faut bien suivre le fil avant d'intervenir.

    sdVueProd est un paramètre de type source de données.
    Oups, c'est vrai que j'ai un peu lu en diagonale pour le coup, je vais aller m'auto flageller à coups de cordon de clé Windev

  14. #14
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 353
    Points : 3 881
    Points
    3 881
    Par défaut
    Alors je vais me flageller avec peijnoob, parce qu'il a rebondi sur ma remarque

    Ensuite, j'ai effectué des tests de mon côté, et le code fonctionne bien. Il doit y avoir un élèment que l'on ne connait pas qui doit interférer sur le résultat.

  15. #15
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Si je fais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 
    	V_Produits.T_produits_ID AS T_produits_ID,
    	V_Produits.T_produits_numDistributeur
    FROM 
    	[%1] AS V_Produits
    J'ai bien les numéros des distributeurs quand j'exécute ma requête.

    Je ne vois pas pourquoi ma liaison ne veut pas fonctionner ???

  16. #16
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Même cela ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 
    	V_Produits.T_produits_ID ,
    	V_Produits.T_produits_numDistributeur
    FROM 
    	[%1] AS V_Produits JOIN T_distributeurs ON V_Produits.T_produits_numDistributeur = T_distributeurs.T_distributeurs_ID
    WHERE
    	T_distributeurs.T_distributeurs_numPays = %2
    Alors que dans WDSQL ce code marche très bien.

  17. #17
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Salut Thierry, ne désespère pas.

    Je n'ai pas de réponse pour l'instant, mais à titre de comparaison, je vais te montrer mon code de test qui fonctionne.

    Code WLangage : 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
     
     
    srcVue est une Source de Données
    srcVue+=HeureSys()
     
    HCréeVue(srcVue,PIECES,"*","T_JOURNAL","",hVueDéfaut)
     
    Info(HNbEnr(srcVue))
     
    srcReq est une Source de Données
    SQL est une chaîne = [
    SELECT 
    	V.ID_BORDEREAU, V.ID_PIECE, V.T_JOURNAL, V.D_PIECE, 
    	V.T_CPT_TIERS, V.T_NUM_PIECE, 
    	BORDEREAUX.T_FICHIER 
    FROM 
    	[%1] AS V, BORDEREAUX 
    WHERE 
    	T_JOURNAL='VTEDIV' 
    	AND V.ID_BORDEREAU = BORDEREAUX.ID_BORDEREAU 
    ]
    SQL=ChaîneConstruit(SQL,srcVue)
     
    SI HExécuteRequêteSQL(srcReq,hRequêteDéfaut,SQL) = Faux ALORS
    	Erreur()
    	RETOUR
    FIN
     
    Info(HNbEnr(srcReq))

  18. #18
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Petite remarque :
    Est-ce que cela ne viendrait pas du fait que j'ai tout mon code avec la vue dans une procédure globale ?

    Merci.

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Citation Envoyé par thierrybatlle Voir le message
    Petite remarque :
    Est-ce que cela ne viendrait pas du fait que j'ai tout mon code avec la vue dans une procédure globale ?
    Je ne vois pas pourquoi...

    Peut être que tu pourrais nous montrer le code qui construit la vue (de la déclaration de la variable source de données jusqu'à la déclaration de la vue) ?

    Comme je te l'ai déjà proposé, as-tu essayé ta requête SQL en gardant la jointure mais sans filtrer sur le pays ?
    _

  20. #20
    Membre actif Avatar de thierrybatlle
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2005
    Messages : 620
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    J'ai essayé sans jointure et cela fonctionne.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sdVueProduits est une Source de Données
     
    SI VérifieExpressionRégulière(SAI_Numéro_de_produit, "[>][0-9]+") ALORS
    		HCréeVue(sdVueProduits, T_produits, "*", "T_produits_numSecatTrie", "T_produits_numSecatTrie" + SAI_Numéro_de_produit, hVueDéfaut)
    	FIN
    Voici le code que j'utilise pour appeler ma procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nNumPays = COMBO_T_pays..ValeurMémorisée
    	Procedures_globales_de_GPI.ListeDesProduitsParPays(nNumPays, listeIDProduits, sdVueProduits)
    Et voici le code de ma procédure :
    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
     
    PROCEDURE ListeDesProduitsParPays(nNumPays est un entier, lstProd est une Liste d'entier, sdVueProd est une Source de Données)
     
    sQuery 			est une chaîne
    sdResultQuery 	est une Source de Données
     
     
    Trace(HNbEnr(sdVueProd))
     
    sQuery = [
    SELECT 
    	V_Produits.T_produits_ID ,
    	V_Produits.T_produits_numDistributeur
    FROM 
    	[%1] AS V_Produits,
    	 T_distributeurs	
    WHERE
    	 V_Produits.T_produits_numDistributeur = T_distributeurs.T_distributeurs_ID
    AND  T_distributeurs.T_distributeurs_numPays = %2
    ]
     
    sQuery = ChaîneConstruit(sQuery,sdVueProd,nNumPays)
     
    SI PAS HExécuteRequêteSQL(sdResultQuery,hRequêteDéfaut,sQuery) ALORS
    	Erreur(ErreurInfo())
    FIN
    Trace(HNbEnr(sdResultQuery))
     
    POUR TOUT sdResultQuery 
    	HLitRecherchePremier(T_distributeurs,T_distributeurs_ID,sdResultQuery.T_produits_numDistributeur)
    	SI T_distributeurs.T_distributeurs_numPays = nNumPays ALORS
    		Ajoute(lstProd,sdResultQuery.T_produits_ID)	
    	FIN
    FIN
     
    Trace(lstProd..Occurrence)
    Voilà vous avez tout.

    Merci bien.

Discussions similaires

  1. Requête sur une vue et temps de réponse
    Par shaun_the_sheep dans le forum SQL
    Réponses: 47
    Dernier message: 20/02/2012, 14h21
  2. limiter les requêtes /le CPU sur une vue db2
    Par batou22003 dans le forum DB2
    Réponses: 4
    Dernier message: 08/11/2011, 18h43
  3. Requête sur une vue indexée
    Par VladTepes dans le forum Développement
    Réponses: 0
    Dernier message: 10/08/2010, 18h37
  4. Problème de requête sur une vue Hibernate
    Par littlebear dans le forum Hibernate
    Réponses: 16
    Dernier message: 05/01/2009, 15h48
  5. delete sur une vue: rule
    Par Bouboubou dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 18/05/2004, 19h58

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