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

 Delphi Discussion :

Une recherche à la méthode Google


Sujet :

Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Une recherche à la méthode Google
    Bonjour,

    Dans le cadre de mon stage, je dois concevoir un programme qui permet, à partir de données d'une BDD donc, d'effectuer une recherche intuitive.

    Je m'explique, en commençant à taper 0 par exemple il faudrait que ça me propose tout les éléments commençant par 0...

    Je suis bloqué dès le départ, à savoir quel composant utilisé...

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Points : 3 535
    Points
    3 535
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Sans parler de performance, et si tu tape sur une seule table :

    Un simple input, si tu rentre "a", tu peux faire une requête de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom from table where nom like 'a%'
    Cela te ramènera une liste de nom qui commence par "a" que tu pourra mettre dans une listBox au dessous de ton input on donnant le focus sur le premier élément dans le onKeyPress de l'input texte si on tape sur la fleche du bas.

    C'est un exemple basique, et ça ne porte que sur une seule table.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Cela ne portera que sur une seule table et même une seule colonne donc déjà de ce côté, ça pourrait le faire.

    Je vais essayer de partir sur cette voie là.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Question peut être bête, mais le input cela signifie quoi dans Delphi ?

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 674
    Points : 25 485
    Points
    25 485
    Par défaut
    C'est dans le sens général Input comme zone de saisie, donc un TEdit, un TComboBox ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai une question tout bête mais j'ai le code suivant dans mon listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox.Items.Add(ZDBPGA.QRY_PGA_SEC.FieldByName('SECLIB').AsString);
    Il ne m'affiche que la première ligne, comment faire pour que j'ai toutes mes lignes qui s'affiche.
    Dernière modification par Invité ; 09/05/2012 à 16h22.

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai trouver la solution que voici, erreur de débutant de ma part :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.TxtEditChange(Sender: TObject);
    begin
    ListBox.Items.Clear;
    with ZDBPGA.QRY_PGA_SEC do
    begin
      first;
      while not eof  do
      begin
        ListBox.Items.Add(ZDBPGA.QRY_PGA_SEC.FieldByName('SECLIB').AsString);
        next;
      end;
    end;
    end;
    Je ne met pas encore le sujet en résolu car mon problème initial n'est pas encore solutionné, j'attend d'avancer d'abord

  8. #8
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Points : 3 535
    Points
    3 535
    Billets dans le blog
    1
    Par défaut
    Sous delphi on a plus l'habitude d'utiliser des composants lié à la base de donnée :

    Par exemple pour une DBListeBox, on aura,
    - un dataSource
    - un dataSet
    - la DBListeBox avec le dataSource en paramètre dataSource.

    Tu aura ta requête dans ton dataSet.
    Quand tu fait ton .open au niveau du dataSet, la DBListeBox se remplie automatiquement, à condition d'avoir bien entré le keyField au niveau des composant.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 674
    Points : 25 485
    Points
    25 485
    Par défaut
    Il y a aussi la TDBGrid ou TDBListBox qui affichent le contenu d'une Query ouverte passant par un DataSource, cela évite de recopier le contenu du DataSet

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ah très bien, je ne savais pas, j'utilise justement une Query.

    Petite question, est-il possible poser une requête dans un listbox.items.Add afin d'afficher qu'un certain contenu ?
    Car j'ai une erreur toujours d'incompatiblité entre String et Integer, et j'ai tenter le Inttostr et strtoint
    Dernière modification par Invité ; 09/05/2012 à 17h03.

  11. #11
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Si je me réfère au dernier code que tu as posté, tu lis tes champs en String, donc "normalement" une zone Integer de ta base sera vue comme une chaine de caractères. Alors, où est le problème d'incompatibilité ? Est-ce un mauvais affichage (mauvais cadrage) ou autre chose ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    En fait, j'ai un peu contourner le soucis, en faisant ma requête sql avant mon ListBox.Items.Add, comme suit :

    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
    procedure TForm1.TxtEditChange(Sender: TObject);
    var rsql : string;
    begin
    ListBox.Items.Clear;
    with ZDBPGA.QRY_PGA_SECTIONS do
    begin
    close;
    rsql := 'select * from pga_sec where SEC like "'+ TxtEdit.Text +'%"';
    Sql.clear;
    Sql.Add(rsql);
    Open;
    first;
      while not eof  do
      begin
        ListBox.Items.Add((ZDBPGA.QRY_PGA_SECTIONS.FieldByName('SEC').AsString)+(' - ')+(ZDBPGA.QRY_PGA_SECTIONS.FieldByName('SECLIB').AsString));
        next;
      end;
    end;
    end;
    Maintenant le but va être de pouvoir faire afficher mon list box que quand on commence à taper, et sélectionner directement avec les flèches et un entrée l'élément que l'on souhaite et ainsi qu'il se mette à la place dans le Tedit.

    Je travaille dessus je reviens vers vous si je bloque, si vous avez des idées à soumettre pour améliorer je suis preneur

  13. #13
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 674
    Points : 25 485
    Points
    25 485
    Par défaut
    On dirait plutôt une ComboBox avec AutoCompletion !
    Il y a des composants qui sont plus souple que la TComboBox à ce sujet !
    Peut-être même avec une TDBLookupComboBox on pourrait obtenir un truc sympa, dommage qu'il n'existe pas une TLookupComboBox (chez TMS si !)

    Sinon, ta boucle est inutile !
    Utilise une TDBListBox, un TDataSource sur le TQuery, ça se remplira tout seul !
    Cela sera de plus performant car évite une copie des chaines dans la TStrings !
    Comme tu ne fais pas de Close dans le OnChange, tu conserve le Query ouvert donc il consomme de la mémoire en plus de la TListBox !
    Autant donc le laisser ouvert et utiliser un TDBListBox

    le CONCAT pouvant se faire en SQL soit via CONCAT ou via l'opérateur |

    Tu devrais différer le SQL via un Timer ou un PostMessage pour éviter que chaque lettre lance une Query cela rendra pénible la frappe (encore pire lors de BackSpace)

  14. #14
    Invité
    Invité(e)
    Par défaut
    Oula, ça fait beaucoup de choses, mais comme j'ai dit je suis preneur. Commençons par le début.

    J'ai voulu utiliser TDBListBox mais rien ne s'afficher en son sein alors que pourtant je choisis bien tout comme il faut à savoir mon DataSOurce puis mon DataField.

    J'ai regarder sur le forum et j'ai vu dans un autre topic, le même problème, et pour contourner ce problème, il a écrit d'une code ressemblant sensiblement à ce que j'ai taper ci dessus. Sinon je suis partant pour un TDBListBox

    Et pour différer le SQL, pourrais tu m'expliquer le principe s'il te plait

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je réactive mon sujet, car après avoir conserver mon Tedit et ma ListBox, j'ai obtenu le résultat escompté, tout fonctionne parfaitement. Maintenant un autre problème se présente. Je dois faire en sorte cette fonctionnalité devienne un composant. J'ai lu quelques tutos sur la création des composants dans delphi, mais j'avoue que je suis un peu perdu.

    En effet, ma première question concerne l'ancêtre, car j'utilise deux composants pour réaliser ma partie de programme donc lequel choisir pour créer un composant ?

    Si quelqu'un peut m'expliquer rapidement ce serait gentil. J'ai lu ce tutoriel là ==> http://llb.developpez.com/composants/

  16. #16
    Invité
    Invité(e)
    Par défaut
    Je remonte le sujet pour savoir si quelqu'un peut m'éclairer. Pour faire simple, je dois (dans le cadre de mon stage) créer un composant permettant d'effectuer une recherche sur une BDD.

    Pour cela j'ai utiliser un TEdit et les résultat s'affiche au fur et à mesure dans une ListBox. De ce fait comment créer un composant à partir de deux éléments.

    D'ailleurs même à partir d'un seul élément je ne comprend pas vraiment la structure permettant la création d'un composant, et j'ai pourtant lu plusieurs tutoriels.

    Merci d'avance

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 11
    Points
    11
    Par défaut création d'un composant
    en plaçant tes deux composants dans un frame tu vas créer un composant que tu pourras réutiliser dans d'autres programmes....

Discussions similaires

  1. Récupérer les liens d'une recherche Google
    Par rambc dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 11/05/2009, 22h21
  2. Récupérer le résultat d'une recherche Google
    Par Abdelmoumen dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/05/2009, 00h24
  3. Insérer une recherche google sur un site perso
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 16/07/2008, 09h23
  4. Comment rendre ma page accessible depuis une recherche Google ?
    Par Midou45 dans le forum Référencement
    Réponses: 7
    Dernier message: 04/07/2008, 13h40
  5. Cheval de Troie lors d'une recherche google
    Par SLE dans le forum Sécurité
    Réponses: 8
    Dernier message: 14/03/2006, 17h41

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