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 :

Opérateur LIKE avec les numériques


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut Opérateur LIKE avec les numériques
    Bonjour,

    J'ai commencé à developper une petite application de comptabilité d'un magasin. pour aller vite j'ai choisis paradox. alors je suis tombé sur un problème sql c'est comment utiliser l'opérateur LIKE avec les numériques (Débit,Crédit) ?
    voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(Débit) AS Total_Débit, SUM(Crédit) AS Total_Crédit,SUM(Débit)-SUM(Crédit) AS Solde FROM Operations WHERE CAST(Débit AS CHAR(20)) LIKE '+QuotedStr(EdDebit.Text+'%')
    Cette requête me donne rien. une orientation de votre part et merci.
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Avec les numériques , il faut utiliser de opérateurs numériques
    =,>,>=,<,<= ou BETWEEN ou encore IN (liste)
    quelle est la valeur à tester ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    L'opérateur LIKE est à réserver aux données de type CHAR/VARCHAR.
    Pourquoi ne pas utiliser les opérateurs classiques pour les valeurs numériques (>, <, =, <>, BETWEEN) ?

    Nota: Ton CAST(... AS CHAR(20)) ramène toujours une chaine d'une longueur de 20 caractères (complétée par des espaces si nécessaire).

    [edit] Sergio est de mon avis

    @+ Claudius.

  4. #4
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    pardon,

    Comme je suis pressé j'ai posé ma question sur autre chose,
    c'est le filtre de la table Opérations qui ne marche pas et non pas la requete,
    je veux utiliser les caractères génériques avec les numériques :

    genre de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Operations.Filter := Débit = 1*
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    J'ai du mal à saisir l'intérêt de ce genre de filtre.
    Puisque tu vas obtenir des valeurs comme 1, 10, 19, 128 ou 124554.

  6. #6
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    Je vous explique :

    Dans la fiche d'opérations j'ai un dbgrid relié à la table Operations que je dois filtrer en fonction des montants saisis en débit et crédit à l'aide un Tedit (EdDebit)
    (Ce filtre est exigé par le patron du magasin)
    et en bas j'ai les totaux reliès à la requête QTotaux dont sql est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT SUM(Débit) AS Total_Débit, SUM(Crédit) AS Total_Crédit,SUM(Débit)-SUM(Crédit) AS Solde FROM Operations WHERE CAST(Débit AS CHAR(20)) LIKE '+QuotedStr(EdDebit.Text+'%')
    J'ai pu passé la requete mais pas le filtre !!!
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Le filtre devrait plutôt être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Operations.Filter := 'Débit like ''1*'''; // ou ... like ''1%''';
    Mais il n'est pas certain que la propriété Filter l'accepte. Filter n'aime les expressions "complexes".

    Utilise plutôt l'événement OnFilterRecord qui est beaucoup plus souple.

    [edit]
    Mon exemple ne fonctionnera pas non plus.
    Passe par OnFilterRecord ce sera beaucoup simple.

    @+ Claudius

  8. #8
    Membre averti
    Avatar de witch
    Inscrit en
    Mai 2007
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 346
    Points : 335
    Points
    335
    Par défaut
    Salut,

    J'ai une ptite remarque par rapport aux définitions Débit et Crédit employé dans ta requête.
    Ce qui me parait logique pour cette simple opérations est que :
    Solde = SUM(Crédit)-SUM(Débit) et non pas Solde = SUM(Débit)-SUM(Crédit)

    La définition débit :
    Le débit bancaire désigne les dépenses et sorties d’argent dans un relevé de compte en banque.
    Sauf s'il s'agit d'une opération assez particulière

    A+
    If a pretty poster and a cute saying are all it takes to motivate you, you probably have a very easy job. The kind robots will be doing soon.

  9. #9
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Utilise plutôt l'événement OnFilterRecord qui est beaucoup plus souple.
    @+ Claudius
    Merci Claudius, j'ai suivi ton conseil et voici la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TData.OPERATIONSFilterRecord(DataSet: TDataSet;
      var Accept: Boolean);
    var
      Chaine:string;
    begin
      Chaine:=FloatToStr(OPERATIONSDebit.Value);
      Accept:=(LeftStr(Chaine,Length(fOperations.EdDebit.Text))=fOperations.EdDebit.Text);
    end;
    Avec les numériques on ne peux utiliser que les opérateurs (=,<,>,<>,<=,>=)
    c'est avec les chaines qu'on peut utiliser les caractères génériques dans les filtres.

    Une autre solution que j'ai réalisé encore :
    J'ai créé ChDebit char(20) et ChCredit char(20) dans la table opérations qui seront mis à jour en fonction de Débit et Crédit. et dans le filtre j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OPERATIONS.Filter:='[ChDebit]='+QuotedStr(EdDebit.Text+'*');
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

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

Discussions similaires

  1. Clause ‘Like’ avec les données en arabe sous D2010
    Par Powerdj dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/03/2015, 10h09
  2. Réponses: 8
    Dernier message: 23/04/2012, 16h26
  3. opérateur like avec deux conditions
    Par petit-ours dans le forum SAS Base
    Réponses: 5
    Dernier message: 28/07/2010, 12h23
  4. probleme like avec champ numérique
    Par popofpopof dans le forum Access
    Réponses: 3
    Dernier message: 10/12/2007, 22h58
  5. Réponses: 1
    Dernier message: 21/01/2006, 18h00

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