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 dynamique avec chaîne construite [WD19]


Sujet :

WinDev

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 210
    Points : 164
    Points
    164
    Par défaut Requête dynamique avec chaîne construite
    Bonjour,

    Je souhaite effectuer une requête sur une liste de fichier et le tout construit dynamiquement selon plusieurs critères :
    1/ le fichier sélectionné dans une liste combo (ex client)
    2/ le champ dans une combo avec un "Listerubrique" dépendant de ma combo fichier précédente (1)
    3/ une combo opérateur avec un conentu en programmation :
    -Aucun-
    égal à
    différent de
    commence par
    contient
    ne contient pas
    inférieur à
    supérieur à
    inférieur ou égal à
    supérieur ou égal à
    4/Un critère à saisir dans un champ

    Le problème se pose avec l'utilisation des guillemets ' ' dans la syntaxe d'une requête et l'utilisation des %1% dans la fonction chaineconstruit (%1%).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sCresultat="SELECT * FROM %1 WHERE %2 ='%3' " 
     
    sReq=ChaîneConstruit(sCresultat,COMBO_Fichier..ValeurAffichée,COMBO_CHOIX1..ValeurAffichée,SAI_Critère)
    Evidemment ce code ne fonctionne pas.

    auriez-vous une piste svp ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    HListeRubrique (avec hLstDétail ou hLstDétailPlus) fournit : <Nom de la rubrique 1> + TAB + <Type> + TAB + <Type HyperFileSQL> + ...
    où <Type> : Type de la rubrique : "T" pour texte (et monétaire) ou "N" pour numérique

    Sur base de Type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sCritère est une Chaîne
    sCritère = SansEspace(SAI_Critère)
    SI Rubrique.Type = "T" ALORS sCritère = "'" + sCritère + "'" 
    
    sCresultat="SELECT * FROM %1 WHERE %2 %3 %4 " 
    sReq=ChaîneConstruit(sCresultat,COMBO_Fichier..ValeurAffichée,COMBO_CHOIX1..ValeurAffichée, Opérateur , sCritère)
    Ceci devrait faire l'affaire, sauf sur les Monétaires si vous en utilisez.
    Dans ce cas, il faudrait prendre <Type HyperFileSQL> en compte, quitte pour avoir un code plus compact à juste tester s'il s'agit ou non d'un monétaire, avant de tester <TYPE>.


    Attention à ne pas oublier votre opérateur.


    Bon travail

    Hemgé

  3. #3
    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

    En complément de ce que dit Hemgé, tu peux aussi tester la propriété ..Type de la rubrique que tu traites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI {COMBO_CHOIX1..ValeurAffichée, indRubrique}..Type DANS (hRubTexte, hRubTexteUnicode, hRubMémoTexte, hRubMémoUnicode)
       sCritère = Remplace(sCritère, "'", "''")   // si on a des ' dans la chaîne on doit les doubler
       sCritère = "'" + sCritère + "'"
    FIN

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par hpascal Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SI {COMBO_CHOIX1..ValeurAffichée, indRubrique}..Type DANS (hRubTexte, hRubTexteUnicode, hRubMémoTexte, hRubMémoUnicode)
       sCritère = Remplace(sCritère, "'", "''")   // si on a des ' dans la chaîne on doit les doubler
       sCritère = "'" + sCritère + "'"
    FIN
    Bien vu pour les ' à doubler.

    Si on teste " ..Type DANS ", ne faut-il pas compléter avec hRubDate8, hRubHeure, hRubDateHeurehRubDurée et hRubCaractère ?

  5. #5
    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
    Oui je n'ai pas mis toutes les constantes, il faut bien sur gérer les autres types

    J'utilise ce principe sur d'autres bases que HF où il faut en plus faire un formatage spécifique sur les date, timestamp etc ...

    Le mieux dans ce cas c'est de faire un SELON {COMBO_CHOIX1..ValeurAffichée, indRubrique}..Type

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Globalement, tous ces types sont couverts par <Type> = "T", ... du moins en ce qui concerne l'usage des ' '.

    C'est pour cela que, dans l'optique d'un code léger générant un traitement non exhaustif mais assez complet, j'avais préconisé <Type> plutôt que <Type Hyperfile>, qui sont de toute façon disponibles tous les deux à partir du HlisteRubrique qui alimente la COMBO et peuvent être placés en colonne cachée.

    Mais, effectivement, dans ma routine, je traite également chaque type de Rubrique.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 210
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Merci beaucoup pour ces éléments de réponses très explicites, je vais m'empresser de les appliquer dans mon projet !

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

Discussions similaires

  1. Requête dynamique avec l'api Criteria
    Par Keitaro44 dans le forum JPA
    Réponses: 0
    Dernier message: 04/03/2012, 22h26
  2. Requête dynamique avec des chaînes Unicodes
    Par Adorien dans le forum Développement
    Réponses: 4
    Dernier message: 15/05/2008, 11h35
  3. Requête SQL avec groupement dynamique
    Par driou1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/02/2007, 18h31
  4. [Sql Server 8.0]Requête dans une chaîne avec Cursor à executer
    Par Nicodemus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/11/2006, 17h34
  5. Requête crosé dynamique avec paramètres saisi
    Par tamerlan dans le forum Access
    Réponses: 3
    Dernier message: 23/03/2006, 14h30

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