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

XMLRAD Discussion :

XMLRAD Trivial : clause SQL Where


Sujet :

XMLRAD

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 57
    Points : 59
    Points
    59
    Par défaut XMLRAD Trivial : clause SQL Where
    Bonjour

    je voudrais pouvoir générer ces 2 requêtes
    SELECT Datas.IdInfo, Datas.Rdt, Datas.DateUpdate FROM bdDatas bdDatas
    where Datas.Machine is null order by Datas.DateUpdate desc, Datas.Machine
    SELECT Datas.IdInfo, Datas.Rdt, Datas.DateUpdate FROM bdDatas bdDatas
    where Datas.Machine = '5' order by Datas.DateUpdate desc, Datas.Machine

    à partir d'un classique dbExtract
    je viens de faire pas mal de tests mais je n'y arrive pas
    même en plaçant ce qu'il faut dans le context et en utilisant la propriété suivante pour le dbExtract

    SELECT Datas.IdInfo, Datas.Rdt, Datas.DateUpdate FROM bdDatas bdDatas
    where :wCondition order by Datas.DateUpdate desc, Datas.Machine
    Evidemment dans le context, je place la variable "wCondition" avec ce qu'il faut ... mais cela ne fonctionne pas


    Merci pour votre coup de pouce

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2002
    Messages
    243
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 243
    Points : 192
    Points
    192
    Par défaut
    il vaut mieux utiliser les template properties.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ....
    {$WhereClause}
    ORDER BY
    et dans BeforeXMLGRAM, tu fais
    maClauseWhere := 'WHERE Datas.Machine = 5';
    Context.SetValue('WhereClause', maClauseWhere);

    Sinon pour info ton cas :wCondition devrait être Datas.Machine = :wCondition et dans le context tu fais Context.SetValue('wCondition', '5');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 57
    Points : 59
    Points
    59
    Par défaut
    Merci pour le coup de pouce

    Où peut t'on trouver ce genre d'information, et existe t'il par exemple un moyen de changer la clause Order

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut
    Tu peux utiliser les Templates Properties, comme l'indique Francois, n'importe où dans ta query. Ca te permet de modifier par concatenation de chaine de caractere ta requete facilement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Datas.IdInfo, Datas.Rdt, Datas.DateUpdate
    FROM bdDatas bdDatas
    {$WHERE_CLAUSE}
    {$ORDERBY_CLAUSE}
    Tous les mots-clefs contenus entre {$ et } seront remplacés par la valeur de ce nom dans le Context.

    Ici avec un bout de code Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Context.Values['Machine'] := '5';
    Context.Values['WHERE_CLAUSE'] := 'WHERE Datas.Machine = :Machine';
    if Context.Values['Order'] = 'desc' then
      Context.Values['ORDERBY_CLAUSE'] := 'ORDER BY Datas.DateUpdate desc, Datas.Machine'
    else
        Context.Values['ORDERBY_CLAUSE'] := 'ORDER BY Datas.DateUpdate, Datas.Machine';
    On met WHERE_CLAUSE et ORDERBY_CLAUSE (ca aurait pu bien sur etre n'importe quel autre nom) dans le Context avec le bout de SQL qu'on veut en lieu et place du {$...}. A l'execution, l'application remplace le code, prepare la requete et l'execute.

    Tu remarqueras le passage de paramètre, meme dans la template property, pour eviter de concatener quelque chose venant du poste client dans la requete, afin d'eviter les SQL Injections (la requete etant repreparée à cause des TP, pas vraiment d'optimisation avec le parametre ici).

    On recommande que la requete SQL s'execute meme si les TP sont à blanc, histoire d'eviter un quelconque probleme. Il faut en revanche toujours s'assurer du contenu de la TP, toujours pour eviter d'executer un code SQL venant du poste client, par exemple (ie. SQL injection, voir Google).

    Tu trouveras pleins d'informations sur xmlrad.com > Training Manual.

    Bon courage !

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

Discussions similaires

  1. requete pl/sql where clause
    Par megapacman dans le forum PL/SQL
    Réponses: 2
    Dernier message: 06/11/2006, 13h59
  2. [SQL] Where Champ1 = 1 or champ = 2
    Par valoji dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/04/2006, 15h06
  3. Taille clause SQL
    Par engi dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/03/2006, 10h42
  4. [ASE][SQL]WHERE non pris en compte
    Par Benjamin78 dans le forum Sybase
    Réponses: 1
    Dernier message: 24/03/2006, 12h00
  5. Réponses: 1
    Dernier message: 08/11/2005, 14h32

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