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

Bases de données Delphi Discussion :

Cumuler les WHERE ?


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut Cumuler les WHERE ?
    Bonjour à tous,
    ( en suite à mon tread sur " Effectuer un requête "..)
    Peut on en SQL cummuler plusieurs where à la suite ?
    J'ai besoin d'effectuer plusieurs requêtes sur plusieurs champs d'une base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(NOM,BASEANALYS) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');
    Donc qui me trouve dans la table Nom, ainsi que dans la table BaseAnalys.

    J'ai essayé de faire deux IBQuery1 séparé, mais le DBGrig censé m'afficher le résultat ne fournit que la dernière requête et n'effectue pas le cumul des deux requêtes.. à moins de n'empêcher un rafraichissement du DBGrid ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Euh ... Nom c'est un champ ou un table ? Même question pour BASEANALYS
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Points : 392
    Points
    392
    Par défaut
    une requête en SQL peut imbriquer plusieurs select donc a chaque select ton filtre where. Ou bien utilise les operateurs logique and/or. Voir l'aide de ton SGBD. Certain ont des restrictions...

  4. #4
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Regarde du côté de l'opérateur 'UNION'

    Attention le .NET sur PDA peut causer des chutes de cheveux

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Il s'agit de champs...
    J'ai essayé avec UNION mais sans succès..
    Il s'agit d'une table avec 2 champs : NON et BASEANALYS
    et il s'agit de trouver un mot figurant soit dans un des champs ou les deux champs..
    Donc quand j'utilise :
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    ma requête fonctionne...

    ou lorsque j'utilise la requête :
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(BASEANALYS) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    ma requête fonctionne également...

    Mais lorsque j'effectue ma requête (une à la suite de l'autre..):

    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(BASEANALYS) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    C'est la dernière ligne qui prévaut... alors que je souhaiterais qu'il y ait recherche dans les champs NOM et BASEANALYS...

  6. #6
    Membre expérimenté
    Avatar de Harry
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2002
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 224
    Points : 1 331
    Points
    1 331
    Par défaut
    Citation Envoyé par Telemak
    Il s'agit de champs...
    J'ai essayé avec UNION mais sans succès..
    Il s'agit d'une table avec 2 champs : NON et BASEANALYS
    et il s'agit de trouver un mot figurant soit dans un des champs ou les deux champs..
    Donc quand j'utilise :
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    ma requête fonctionne...

    ou lorsque j'utilise la requête :
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(BASEANALYS) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    ma requête fonctionne également...

    Mais lorsque j'effectue ma requête (une à la suite de l'autre..):

    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');
    IBQuery1.SQL.Text :='SELECT * FROM FLORE WHERE UPPER(BASEANALYS) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');

    C'est la dernière ligne qui prévaut... alors que je souhaiterais qu'il y ait recherche dans les champs NOM et BASEANALYS...
    Ahh, je comprends mieux, c'est plus clair

    Ce qu'il te faut c'est ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBQuery1.SQL.Add := 'SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');
    IBQuery1.SQL.Add :='OR UPPER(BASEANALYS)LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%');
    Alors le seul inconvégnant avec cette méthode c'est que si tu as la valeur dans NOM et dans BASEANALYS ca ne va pas te le remonter (OR : soit dans l'un soit dans l'autre.
    C'est là ou je pense qu'un UNION peux venir s'interposer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IBQuery1.SQL.Add('SELECT * FROM FLORE WHERE UPPER(NOM) LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%'));
    IBQuery1.SQL.Add('UNION');
    IBQuery1.SQL.Add('SELECT * FROM FLORE WHERE UPPER(BASEANALYS)LIKE ' + quotedstr('%'+(UpperCase(ENature.Text))+'%'));

    Attention le .NET sur PDA peut causer des chutes de cheveux

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Ok, merci beaucoup ..ça fonctionne..
    Mon erreur venait du fait que je mettais IBQuery1.SQL.Text au lieu de de IBQuery1.SQL.Add..

    Tag Résolu...

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

Discussions similaires

  1. Un dropdownlist lié à l'autre, cumule les valeurs !
    Par insane_80 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/05/2009, 16h43
  2. Cumuler les filtres sur un dataview
    Par mappy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/02/2009, 15h31
  3. [Java3D] Cumuler les Appearance sur un objet?
    Par themoye dans le forum 3D
    Réponses: 0
    Dernier message: 22/09/2008, 20h08
  4. Réponses: 2
    Dernier message: 02/12/2007, 20h05
  5. Cumuler les filtres
    Par richard_sraing dans le forum C#
    Réponses: 2
    Dernier message: 26/03/2007, 18h54

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