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 :

LIKE et champs String


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Points : 80
    Points
    80
    Par défaut LIKE et champs String
    Bon Soir
    supposons le champ designation contient
    disque dur 80
    disque dur 40
    Lorsque je veux obtenir dur j'utilise like%dur% dans edit.change mais comment faire pour obtenir disque 80 sans tapper dur
    Merci

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Remplacer les espaces par des %: disque%80
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Remplacer les espaces par des %: disque%80
    Bonsoir
    Merci ,mais ce que je veux : la recherche se fait dans un edit et voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ADOQuery1.SQL.Add('select * from Articles where Designation like "%'+Edit1.Text+'%"');
    et le resultat n'abouti pas à se que je veux
    Merci

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    disque%80
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    disque%80
    Bonsoir

    Pardon; j'ai pas compris; le truque dans edit.text ça veut dire n'importe quel enregistrement(disque 80 se n'est qu'un exemple)
    Merci

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par gentilman_delphi Voir le message
    Bonsoir

    Pardon; j'ai pas compris; le truque dans edit.text ça veut dire n'importe quel enregistrement(disque 80 se n'est qu'un exemple)
    Merci
    ta question n'est pas claire.

    si tu tapes disque%80 dans Edit, la requête sera

    select * from Articles where Designation like "%disque%80%"

    et tu obtiendras "disque dur 80"

    ce qui répond à ta question "comment faire pour obtenir disque 80 sans tapper dur"

    si ce n'est pas ce que tu veux il va falloir reformuler ta question.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ta question n'est pas claire.

    si tu tapes disque%80 dans Edit, la requête sera

    select * from Articles where Designation like "%disque%80%"

    et tu obtiendras "disque dur 80"

    ce qui répond à ta question "comment faire pour obtenir disque 80 sans tapper dur"

    si ce n'est pas ce que tu veux il va falloir reformuler ta question.
    Bonjour
    Effectivement comment faire pour obtenir disque 80 sans tapper dur

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Ce que je crois avoir compris:
    Tu as un jeu de données (exemple);
    Disque dur 40
    Disque dur 80

    Tu veux faire une recherche partielle avec tous les mots contenus dans ton edit.

    Si c'est bien ça, il va falloir décomposer ta liste de mots et avoir dans la requête une condition sur la désignation par mot.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  9. #9
    Membre régulier
    Inscrit en
    Août 2007
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 158
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Ce que je crois avoir compris:
    Tu as un jeu de données (exemple);
    Disque dur 40
    Disque dur 80

    Tu veux faire une recherche partielle avec tous les mots contenus dans ton edit.

    Si c'est bien ça, il va falloir décomposer ta liste de mots et avoir dans la requête une condition sur la désignation par mot.
    Bonjour
    La requête s'execute au début dans(edit.onchange) et ensuite à chaque vk_space
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    ADOQuery1.Active:=false;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from Articles where Designation like "%'+Edit1.Text+'%"');
    ADOQuery1.Active:=True;
    end;
    Ensuite comment?

  10. #10
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il faut décomposer ton edit1.text pour avoir une liste de mots.
    (FAQ: http://delphi.developpez.com/faq/?pa...chaine#explode)

    A partir de cette liste, construire ta requête (un critère par mot: Designation like '%Mots[i]').

    Essaie de prendre un peu de recul. Tu ne dis pas ce qu'il est juste ou faux dans notre compréhension de ton problème.

    Essaie de poser ton algorithme, normalement on t'a donné les clés. Si tu as un problème d'implémentation, montres-nous ce que tu as fait.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour


    si j'ai bien compris je modifierais le code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    ADOQuery1.Active:=false;
    ADOQuery1.SQL.Clear;
    Edit1.Text := StringReplace(Edit1.Text, ' ', '%', [rfReplaceAll]);  // pour remplacer tous les espaces vides par le %
    ADOQuery1.SQL.Add('select * from Articles where Designation like "%'+Edit1.Text+'%"');
    ADOQuery1.Active:=True;
    end;
    Par contre en terme de rapidite des requetes, on ne peut pas dire que ce soit optimum (normalement, pour la plupart de BDD, les index ne pourront etre utilises), correct ?

    mais lancer ce type de requete a chaque evenement "onchange", ca risque de devenir penible a cause du temps d'execution cette requete non indexable

    a+
    olivier
    Merci d'ajouter un sur les tags qui vous ont aidé

Discussions similaires

  1. Valeur d'un champ string
    Par Miss Ti dans le forum Access
    Réponses: 8
    Dernier message: 26/07/2006, 16h39
  2. Réponses: 6
    Dernier message: 15/06/2006, 10h52
  3. [XSD] : Garder les espaces dans un champ string
    Par cvacavant dans le forum Valider
    Réponses: 8
    Dernier message: 10/02/2006, 09h28
  4. date de...a dans un champ string
    Par Yepazix dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/09/2004, 23h54
  5. Que privilégier : %like% dans champs texte, ou plain text ?
    Par Dimitri01 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/01/2004, 11h45

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