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

Composants VCL Delphi Discussion :

Conseil évènement TEdit


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut Conseil évènement TEdit
    Bonjour,

    J'exécute un moteur de recherche lorsque l'utilisateur renseigne une zone de saisie.

    Dès qu'un nouveau caractère est saisis, une requête avec l'agrégat LIKE est exécutée et le résultat obtenu s'affiche dans un dbGrid. J'obtient l'équivalent d'un moteur de recherche.

    Cela dit, j'hésite pour l'évènement de la zone de saisie qui indique l'appuye d'une touche.

    Voici ma liste d'hésitation :

    - onChange
    - onKeyDown
    - onKeyPress
    - onKeyUp


    J'aimerais connaître votre avis sur les avantages et les inconvénients de chacun, l'évènement que vous utilisez généralement et pourquoi afin de me décider !

    Merci par avance,

    NZs

  2. #2
    Expert confirmé
    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 : 62
    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
    Par défaut
    Salut

    Dans le cas présent, j'utiliserais l'évènement OnChange. Cela simplement parce que tu ne dois réagir uniquement qu'aux changements du texte dans le TEdit.

    Les autres évènements sont utiles lorsque tu veux effectuer, par exemple, des contrôles sur la saisie avant modification. (Interdire la saisie de chiffres par exemple).

    @+ Claudius

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Dans le cas présent, j'utiliserais l'évènement OnChange.
    +1
    C'est ce que j'utilise aussi.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Salut,

    moi je met un bouton "Rechercher" en default à true. l'utilisateur tape son texte de recherche dans le edit et tape la touche entrée pour envoyer la recherche....

    C'était juste pour dire que je n'utilisais pas un évènement de l'edit comme mes 2 confrères

  5. #5
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Rapidité, précision, efficacité, que demandez de mieux !
    Merci à vous ^^

    J'ai donc utilisé l'évènement onChange mais je me trouve maintenant face à un problème :

    Quand je saisie la première touche, celle-ci renvoie la valeurs vide.

    Quand je saisie la seconde touche, celle-ci renvoie la valeur de la première touche ainsi de suite ce qui me provoque une erreur dans ma requête SQL.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure TfrmCtrlmp.zsNumlotKeyPress(Sender: TObject; var Key: Char);
    var
      boolVide : boolean;
    begin
      inherited;
      try
        if self.zsNumlot.Text <> '' then
        begin
        strQuery := ' select Id, date, heure, numlot, qterecep, datefab, residu '
                  + ' from process_labo_mp_tarrivee'
                  + ' where Id_mp = '
                  + self.zsIdMp.Text
                  + ' and numlot like "%'
                  + self.zsNumlot.Text
                  + '" and del = 0 '
                  + ' order by date desc';
        _frmData.prRequete(self.cdsRechRecep, self.sqlRechRecep, strquery);
      end;
      except
      exit;
      end;
    end;
    Mon soucis est donc que les résultats affiché dans mon dbGrid ont toujours un train de décalage .

    Je pense donc que je doit mal utiliser l'évènement ?

    NZs

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Nzs26 Voir le message
    J'ai donc utilisé l'évènement onChange

    ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TfrmCtrlmp.zsNumlotKeyPress(Sender: TObject; var Key: Char);
    Il y a un truc que je comprend pas.
    Tu dis que tu utilises Onchange et je vois OnKeyPress.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  7. #7
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Effectivement,

    J'avais effectuer mes traitements sur les 3 évènements pour tenter de choisir le mieux adpater, j'en ai supprimé deux sur trois, mais apparement le mauvais ...

    Je m'en vais de ce pas tester avec le bon évènement,

    Merci de la remarque !

    NZs

  8. #8
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Le OnChange aura pour effet de lancer la requête à chaque appui sur une touche ?!

  9. #9
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Alors modification effectuée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TfrmCtrlmp.zsNumlotChange(Sender: TObject);
    begin
      inherited;
       try
      if self.zsNumlot.Text <> '' then
      begin
      strQuery := ' select Id, date, heure, numlot, qterecep, datefab, residu '
                + ' from process_labo_mp_tarrivee'
                + ' where Id_mp = '
                + self.zsIdMp.Text
                + ' and numlot like "%'
                + self.zsNumlot.Text
                + '" and del = 0 '
                + ' order by date desc';
                showmessage('change' + strQuery);
      _frmData.prRequete(self.cdsRechRecep, self.sqlRechRecep, strquery);
      end;
      except
      exit;
      end;
    end;
    Le résultat est exactement celui que je souhaitais merci beaucoup

    J'ai juste le petit soucis que malgrès le fait que je test si ma chaîne et vide ou pas avant d'exécutée la requête, ma requête s'exécute tout le temps !

    Je me penche la dessus

    NZS

  10. #10
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Alors j'ai résolu mon problème de condition : il considéré que ma zone de saisie contenait un espace au départ donc la condition ne passait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if self.zsNumlot.Text <> '' then
    J'ai donc rajouté un espace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if self.zsNumlot.Text <> ' ' then
    Au passage j'ai décelé une erreur dans ma requête SQL : l'agrégat LIKE ne s'utilise pas avec des guillements mais avec des côtes ( peut-être que cela pourra aider quelqu'un) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     strQuery := ' select Id, date, heure, numlot, qterecep, datefab, residu '
                + ' from process_labo_mp_tarrivee'
                + ' where Id_mp = '
                + self.zsIdMp.Text
                + ' and numlot like ''%'
                + self.zsNumlot.Text
                + '%'' and del = 0 '
                + ' order by date desc';
    Voilà Merci à tous pour votre aide

    NZs

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/03/2015, 13h56
  2. Plusieurs TEdit en événement
    Par kabakas dans le forum Débuter
    Réponses: 5
    Dernier message: 28/04/2011, 17h33
  3. Creation d'évènement dans un TEDIT
    Par Ludo_360 dans le forum Delphi
    Réponses: 49
    Dernier message: 31/05/2007, 17h56
  4. Courcircuiter l'évènement OnChange d'un TEdit
    Par Captain_JS dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/07/2005, 14h33
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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