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 :

Transformer ListBox1 en DBLookupComboBox1


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut Transformer ListBox1 en DBLookupComboBox1
    J'utilise une connexion ADO qui affiche mes résultats dans une listbox. Je voudrais faire la meme chose avec DBLookup !

    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
    procedure TForm1.FormShow(Sender: TObject);
    begin
        LabelPseudo.Caption:=pseudo;
        DM.ADOQuery1.Close;
        DM.ADOQuery1.SQL.Clear;
        DM.ADOQuery1.SQL.Add('SELECT NumCompte FROM Comptes WHERE Pseudo="'+Pseudo+'"');
        DM.ADOQuery1.Open;
        while not DM.ADOQuery1.Eof do
          begin
              DBLookupComboBox1.listfield:= ???
              ListBox1.Items.Add(DM.ADOQuery1.Fields[0].AsString);
              DM.ADOQuery1.Next;
          end;
        DM.ADOQuery1.Close;
    end;
    Merci

  2. #2
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut,

    Ce n'est pas vraiment comme ça qu'il faut faire avec les compo DB.
    Il te faut un Datasource connecté à une Table ou Query etc.
    Ensuite renseigner la propriété datasource de ton DBLookupComboBox.
    Ensuite renseigner ListField et KeyField.
    Si tu as des problèmes, n'hesite surtout pas a voir l'aide.

    • Identifie les champs dont les valeurs sont affichées dans le contrôle de référence.

      Syntaxe Delphi :

      propertyListField:String;

      Syntaxe C++:

      __ property AnsiStringListField ={read=FListFieldName,write=SetListFieldName};

      Description

      Le contrôle de référence représente un champ dans une table en affichant la valeur d'un ou plusieurs champs correspondant dans une autre table.ListField est le nom des champs de la table de référence qui sont réellement affichés,par opposition àDataField,qui est le champ de DataSource réellement représentépar le contrôle de référence,ou KeyField,qui est le champ de la table de référence qui contient la même valeur que DataField.

      Pour spécifier totalement les champs liste,il faut définir un ensemble de données pour la table de référence et les champs de cet ensemble de données.La propriétéListSource du contrôle de référence spécifie l'ensemble de données pour la table de référence.

      ListField peut représenter plusieurs champs.Séparez leur nom par des points-virgules.

      Avant de spécifier ListField,spécifiez le lien entre les deux ensembles de données en utilisant la propriétéKeyField.Si aucune valeur n'est affectée àListField,les contrôles de référence affichent par défaut les valeurs du champ KeyField.Si le champ DataField est un champ de référence,ne spécifiez rien pour ListField ;les contrôles de données utilisent automatiquement la propriétéLookupResultField du champ de référence comme ListField.

    • Identifie le champ de l'ensemble de données ListSource qui doit correspondre àla valeur du champ DataField.

      Syntaxe Delphi :

      propertyKeyField:String;

      Syntaxe C++:

      __ property AnsiStringKeyField ={read=GetKeyFieldName,write=SetKeyFieldName};

      Description

      Utilisez KeyField pour lier le ListSource du contrôle de référence au DataSource.Bien qu'il ne soit pas nécessaire que le champ spécifiéen tant que KeyField porte le même nom que le champ spécifiéen tant que DataField,les deux champs doivent avoir les mêmes valeurs.

      Après avoir spécifiéle ListField,choisissez le champ que le contrôle de référence affichera réellement avec la propriétéListField.

      Si le champ DataField est un champ de référence,ne spécifiez rien pour KeyField ou ListField ;les contrôles de référence utilisent automatiquement la propriétéLookupKeyFields du champ de données pour KeyField.
      [list:e80eaad4db]
      Extraits tirés de l'aide de Delphi.
      NB :
      Une fois mis en place, tu peux ouvrir ta source de donnée.

      COurage
    [/list:u:e80eaad4db]
    On progresse .....

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    un petit tour dans la et on trouve ca : http://delphi.developpez.com/faq/?pa...omboboxcomment
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Autant pour moi : j'ai oublié de préciser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ListSource : DM.DataSourceComptes
    ListField : NumCompte;NomCompte
    KeyField : NumCompte
    1 - Lorsque j'excute, dans mon DBLookup, j'ai donc toute la liste de mes NumCompte + NomCompte. Jusque là, ok ?
    2 - Actuellment, je trie les donnees en fonction du ADOQuery et j'affiche dans ma listbox. Tout marche !

    3 - Je veux utiliser maintenant un DBLookup pour enlever mon listbox.
    Je pense que je dois laisser mon SQL actuel, vu que j'obtiens le resultat voulu ...
    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
    procedure TForm1.FormShow(Sender: TObject); 
    begin 
        LabelPseudo.Caption:=pseudo; 
        DM.ADOQuery1.Close; 
        DM.ADOQuery1.SQL.Clear; 
        DM.ADOQuery1.SQL.Add('SELECT NumCompte FROM Comptes WHERE Pseudo="'+Pseudo+'"'); 
        DM.ADOQuery1.Open; 
        while not DM.ADOQuery1.Eof do 
          begin
              // Ca ne marche pas, si je mets :
              DBLookupComboBox1.listfield:= DM.ADOQuery1.Fields[0].AsString;
              // au lieu de :
              // ListBox1.Items.Add(DM.ADOQuery1.Fields[0].AsString); 
              DM.ADOQuery1.Next; 
          end; 
        DM.ADOQuery1.Close; 
    end;
    J'espère avoir été plus clair !

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Avec un dblookupcombobox tu n'as pas besoin de le remplir ca se fait tout seul encore faut il comprendre le fonctionnement du dblookupcombobox.

    Pose un datasource sur ta form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       LabelPseudo.Caption:=pseudo;
        DM.ADOQuery1.Close;
        DM.ADOQuery1.SQL.Clear;
        DM.ADOQuery1.SQL.Add('SELECT NumCompte FROM Comptes WHERE Pseudo="'+Pseudo+'"');
        DM.ADOQuery1.Open;
        DataSource1.Dataset := Adoquery1;
     
        With DbLookupComboBox do
        begin
          ListSource := DataSource1;
          ListField := [les noms des champs que tu veux afficher séparer par des ;];
          KeyField:= [Le champ source qui sera transmis à Datafield si utilisé];
        end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    ???? J'ai pas tout compris !!!!

    Malatar a écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataSource1.Dataset := Adoquery1;
    Pourquoi ajouter un datasource sur ma form ?
    D'autre part, tu mets quoi en SQL dans le adoquery1 ?

    Malatar a écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     With DbLookupComboBox do 
        begin 
          ListSource := DataSource1; 
          ListField := [NumCompte];
    NumCompte : identificateur non déclaré...

    Donc, j'ai quand meme essaye de comprendre et si je modifiais comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    LabelPseudo.Caption:=pseudo; 
        DM.ADOQuery1.Close; 
        DM.ADOQuery1.SQL.Clear; 
        DM.ADOQuery1.SQL.Add('SELECT NumCompte FROM Comptes WHERE Pseudo="'+Pseudo+'"'); 
        DM.ADOQuery1.Open; 
     
     
        With DbLookupComboBox1 do 
        begin 
          ListSource :=DM.DataSourceCompte; 
          ListField := [NumCompte; NomCompte];
    Evidemment, j'aurai toujours :
    NumCompte : identificateur non déclaré...
    On revient à la case de départ : il ne prend pas en compte ma requete, j'aurai tous mes comptes qui s'affichent !!

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Le datasource sert à lié ton adoxxxxx avec le composant dblookupcombobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    LabelPseudo.Caption:=pseudo;
        DM.ADOQuery1.Close;
        DM.ADOQuery1.SQL.Clear;
        DM.ADOQuery1.SQL.Add('SELECT NumCompte FROM Comptes WHERE Pseudo="'+Pseudo+'"');
        DM.ADOQuery1.Open;
     
     
        With DbLookupComboBox1 do
        begin
          ListSource :=DM.DataSourceCompte;
          ListField := 'NumCompte; NomCompte';
          KeyField := 'NumCompte'; 
        end;
    ListField et KeyField sont des strings, normal que ca fonctionne pas.

    On revient à la case de départ : il ne prend pas en compte ma requete, j'aurai tous mes comptes qui s'affichent !!
    C'est normal si tu lies pas ton query à un datasource puis apres au dblookupcombobox.

    1- lier un datasource à Adoquery1
    2- lier le dblookupcombobox au datasource
    3-paramètrer le dblookupcombobox pour afficher les champs nécessaires
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Ok ca marche. Mais encore deux questions ?

    1 -
    Je faisais exactement la meme chose :
    Sauf que je le faisais dans l'inspecteur d'objet comme je l'ai dit au debut :
    ListSource : DM.DataSourceCompte
    ListField : NumCompte;NomCompte
    KeyField : NumCompte

    et dans mon DataModule, j'avais :
    - un datasource relié à adoquery
    - adoquery relié à un adoconnection.

    On ne peut pas faire comme ca, on est obligé de passer en code ?

    2 - Avec un DBImage ?
    Toujours pareil :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DM.ADOQuery1.Close; 
    DM.ADOQuery1.SQL.Clear; 
    DM.ADOQuery1.SQL.Add('SELECT Photo FROM Utilisateur WHERE   Pseudo="'+Pseudo+'"');
    DM.ADOQuery1.Open; 
    DBImage1.Picture. ???

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    Je me suis avancé trop vite :
    le dblookup affiche tous les comptes et ne tiens pas compte du pseudo !!!!!!

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

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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