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 :

Erreur à l’exécution d'une requête paramétrée


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut Erreur à l’exécution d'une requête paramétrée
    Bonjour,

    Quand j’exécute la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT mouvements1.id_mouvement,mouvements1.Matricule,mouvements1.Type_mouvement,mouvements1.date_début,mouvements1.date_fin
    FROM Mouvement_Personnel mouvements1
    WHERE (mouvements1.date_début BETWEEN {param1} AND {param2} OR mouvements1.date_fin BETWEEN {param1} AND {param2}
    OR ({param1} BETWEEN mouvements1.date_début AND mouvements1.date_fin OR {param2} BETWEEN mouvements1.date_début AND mouvements1.date_fin))

    J'obtiens l'erreur suivante:
    Nom : erreur.jpg
Affichages : 142
Taille : 27,9 Ko

    le code d’exécution de la requête est:

    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
     
    res est entier 
    SI HExécuteRequête(REQ_Doublons_mouv,hRequêteDéfaut,gDate_fin,gDate_debut) ALORS
        HLitPremier(REQ_Doublons_mouv)
        TANTQUE PAS HEnDehors(REQ_Doublons_mouv)
     
            res = TableCherche(TABLE_Personnel.COL_Matricule,REQ_Doublons_mouv.Matricule)
            SI res <> -1 ALORS
                TABLE_Personnel[res]..CouleurFond = RVB(153,204,153)
            FIN
     
            HLitSuivant(REQ_Doublons_mouv)
        FIN
     
    SINON 
        Erreur(HErreurInfo)
    FIN
    Ce code est mis à l’initialisation de la fenêtre, qui reçoit à son tour les deux paramètres gdate_début, gdate_fin.

  2. #2
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Tu es sur que c'est ce code là qui est exécuté ? Le message parle de HExécuteRequêteSQL alors qu'il y a un HExécuteRequête dans ton code

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Oui je suis certain que c'est le code cité qui est exécuté, et pour la création de la requête, j'ai fait Nouveau\Requête\saisir le code SQL
    quand j'enlève la ligne suivante de ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OR ({param1} BETWEEN mouvements1.date_début AND mouvements1.date_fin OR {param2} BETWEEN mouvements1.date_début AND mouvements1.date_fin)
    ça ne pose pas de problème et la requête marche bien mais moi j'ai besoin de signaler aussi les mouvements qui ont des périodes entièrement incluses (la ligne enlevée).
    j'ai un doute sur l’utilisation de paramètres avec BETWEEN:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    {param1} BETWEEN mouvements1.date_début
    .

  4. #4
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Une question : peux-tu faire F9 sur ta requête dans l'éditeur de requête

    Si il te demande une connexion c'est que Windev n'arrive pas à analyser le code SQL de ta requête

    Essaye d'ajouter des parenthèses autour de chaque groupe BETWEEN

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Effectivement, quand je teste l'exécution de la requête par F9, il demande une connexion.
    et pour la parenthèse, il ne l'accepte pas, j'ai fait comme ça:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mouvements1.id_mouvement,mouvements1.Matricule,mouvements1.Type_mouvement,mouvements1.date_début,mouvements1.date_fin
    FROM Mouvement_Personnel mouvements1
    WHERE (mouvements1.date_début BETWEEN ({param1} AND {param2}) OR mouvements1.date_fin BETWEEN ({param1} AND {param2})
    OR ({param1} BETWEEN (mouvements1.date_début AND mouvements1.date_fin) OR {param2} BETWEEN (mouvements1.date_début AND mouvements1.date_fin)))

  6. #6
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Ce n'est pas comme ça que je voyait les parenthèses
    De toute façon laisse tomber les parenthèses, le problème ne vient pas de là

    C'est cette syntaxe qui n'est pas acceptée :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    {param1} BETWEEN mouvements1.date_début AND mouvements1.date_fin
    Si tu mets juste cette condition, tu verras que ça plante avec le même message

    Quand on fait une rétro-analyse de la requête avec le seul filtre ci-dessus on a l'erreur :
    La condition <( {param1} BETWEEN mouvements1.date_début AND mouvements1.date_fin ) > n'est pas dans le bon format. Une condition doit être du type : <Rubrique> <Opérateur de comparaison> <Valeur OU Paramètre>.
    Si tu fais ça à la place ça va marcher :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mouvements1.id_mouvement,mouvements1.Matricule,mouvements1.Type_mouvement,mouvements1.date_début,mouvements1.date_fin
    FROM Mouvement_Personnel mouvements1
    WHERE (mouvements1.date_début <= {param1} AND {param1} <= mouvements1.date_fin)
    Mais il faut faire attention aux parenthèses pour toutes tes conditions

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Je viens d'utiliser:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mouvements1.id_mouvement,mouvements1.Matricule,mouvements1.Type_mouvement,mouvements1.date_début,mouvements1.date_fin
    FROM Mouvement_Personnel mouvements1
    WHERE (mouvements1.date_début BETWEEN {param1} AND {param2} OR mouvements1.date_fin BETWEEN {param1} AND {param2}
    OR ({param1} >= mouvements1.date_début AND {param1} <= mouvements1.date_fin OR {param2} >= mouvements1.date_début AND {param2} <= mouvements1.date_fin))

    et ça marche bien maintenant, c'est ce que je veux.

    donc la conclusion est qu'il ne faut pas utiliser un paramètre devant BETWEEN ?

  8. #8
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Citation Envoyé par compteabdou Voir le message
    donc la conclusion est qu'il ne faut pas utiliser un paramètre devant BETWEEN ?
    Peut être ...
    ça serait bien de poser la question au support. Penses à y joindre un petit projet test qui contient juste :
    - une analyse avec la description de ton fichier (pas besoin de données)
    - une requête simple qui génère le problème
    Tu devrais avoir une réponse

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Oui, je vais le faire.
    Merci de votre suivi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de syntaxe sur une requête paramétrée
    Par deglingo37 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2006, 22h21
  2. Réponses: 5
    Dernier message: 18/11/2005, 23h28
  3. Déterminer une requête paramétrée avec LIKE
    Par priest69 dans le forum Access
    Réponses: 4
    Dernier message: 24/10/2005, 19h29
  4. Ouvrir un curseur avec une requête paramétrée?
    Par nnj dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/07/2005, 14h12
  5. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50

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