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 :

Une requete SQL unpeux difficile !!


Sujet :

Bases de données Delphi

  1. #1
    nil
    nil est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Une requete SQL unpeux difficile !!
    Bonjour a tous
    j'ai une table avec un champ de type decimal
    de tel sorte que les nombre sont une incrementation de 10 ex:
    (1120--1130--1140...etc .etc )
    je veux une requete de tel sorte quand je rentre un nombre sur un edit.text il va verifier sur la table le nombre le plus proche de celui que j'ai rentré
    exp sur ma table j'ai ( 150-160-170-180....)
    et edit1.text = 151,6 donc le resultat de ma requete c 150 .
    il me donne tjrs le nombre le plus proche de tel sorte qu'il est inferieur a la valeur que je fais rentré
    merci les amis

  2. #2
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Je te propose de faire le calcul avant de lancer la requette.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Procedure TFiche.PrepareRequette(Var Requette:String);  
    Var I:Integer;
    Begin
      Requette := '';
      I := Trunc(StrToFloat(Edit1.Text));
      While (I > 0) And ((I Mod 10) <> 0) Do Dec(I);
      If I > 0
      Then Requette := 'Where Chp = '+IntToStr(I);   
    End;

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    voici un élément de solution plus orienté SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from (select t.*, ROWNUM from table t where champ<=151.6 order by champ desc) where ROWNUM=1
    Petite remarque, la valeur de ROWNUM ne sera pas forcement égale à 1, mais ce sera quand même la bonne ligne (le ROWNUM résultant semble celui calculé avant le "order by").

    si tu utilises MySql, tu peux utiliser le mot clé LIMIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table t where champ<=151.6 order by champ desc limit 1
    Si jamais il peut arriver dans ta table d'avoir des trous (qu'on ne trouve pas toujours d'enregistrement toutes les 10 valeurs) cette méthode pourra peut être te servir.

    Cordialement

    Eric

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Pourquoi pas faire plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Select ... from MaTable
    where Champ>(:Valeur-10) and Champ<:Valeur
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select ... from MaTable
    where Champ between (:Valeur-10, :Valeur)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    du moment que la valeur peut être un reel il faut appliquer la fonction cast

    select ... from MaTable
    where Champ between (cast(:Valeur as int)-10, cast(:Valeur as int))

  6. #6
    Membre actif Avatar de JerryMouse
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 215
    Points : 295
    Points
    295
    Par défaut
    Ceci devrait marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select Max(Champ)
    from LaTable
    Where Champ<= LaValeur
    Bonne chance.

Discussions similaires

  1. Pivoter les réultats d'une requete SQL
    Par elitost dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/09/2004, 17h55
  2. pb d'execution d'une requete sql
    Par pit9.76 dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/06/2004, 12h03
  3. Réponses: 2
    Dernier message: 03/05/2004, 12h13
  4. date d'une requete sql
    Par innosang dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/04/2004, 09h27
  5. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51

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