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 :

combobox et listbox avec plusieurs tables


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut combobox et listbox avec plusieurs tables
    Bonjour a vous tous
    voila j'ai une base access qui contiend 3 tables comme suit
    table 1 nommée readers avec items : id , reader
    table2 nommée radios avec items: ref, idreader, chaine,adress
    table3 nommée tv avec items: ref,idreader,chaine,adress
    je rempli le combobox avec les items de la table readers puis je veux que lorsque je click sur l'tems du combobox affiche l'tem 'chaine' d'une des autres tables

    merci de m'aider sachand que je suis debutant
    si c'ést possible un exemple

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 101
    Par défaut
    Dans le OnChange, tu dois pouvoir faire un SELECT, un Filter ou un Locate en utilisant soit le libellé sélectionné soit en utilisant la propriété Objects pour stocker des Identifiants !
    Tu fais le filtre sur les deux tables qui je suppose sont affichés par des TDBListBox
    Il serait même possible avec une UNION d'afficher Radio+TV dans la même TDBListBox

    Il n'y a pas de grande différence avec le sujet : comment relier combobox et listbox en delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut
    merci mon professeur mais j'ai essayer et je ne suis pas arriver de faire un union ou un select peut tu me donner un exemple et merci une autre fois

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 101
    Par défaut
    Ne m'appelle pas Professeur, c'est un vrai titre qui se mérite, ne l'utilise pas n'importe comment tout simplement parce que mon ton péremptoire te déplait !

    En reprenant les sources du sujet : comment relier combobox et listbox en delphi
    Puisque c'est EXACTEMENT la même chose !

    Avec deux TDBListBox, chacune connecté à leur proprose DataSource
    1 DataSource connecté sur TableRadios
    1 DataSource connecté sur TableTV

    TableRadios et TableTV sont TADOTable ouvert sur Radio et TV, ils contiennent tous les enregistrements des tables
    Tu auras un volume de données très faible et avec ACCESS, le SQL n'est pas très performant, je t'encourage tout de même à lire :

    LE SQL de A à Z : 2eme partie - le simple (?) SELECT et les fonctions SQL
    LE SQL de A à Z : 3e partie - les jointures
    LE SQL de A à Z : 4e partie - groupage et ensembles

    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
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      if combobox1.ItemIndex > -1 then
      begin
        if TableReaders.Locate('reader', combobox1.Items[combobox1.ItemIndex], []) then
        begin
     
          TableRadios.Filtered := False;
          TableRadios.Filter := 'idreader = ' + TableReaders.FieldByName('id').AsString;
          TableRadios.Filtered := True;
     
          TableTV.Filtered := False;
          TableTV.Filter := 'idreader = ' + TableReaders.FieldByName('id').AsString;
          TableTV.Filtered := True;
     
        end;
      end;
    end;



    Si tu ne veux pas utiliser de TDBListBox et de TDataSource, tu peux utiliser la TListBox et remplir avec une boucle


    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
     
          ListBoxRadios.Items.Clear;
          with TableRadios do
          begin
            First;
            While Not EOF do
            begin
              ListBoxRadios.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
     
          ListBoxTV.Clear;
          with TableTV do
          begin
            First;
            While Not EOF do
            begin
              ListBoxTV.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
    Si tu veux une seule ListBox qui regroupent tout

    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
     
          ListBoxRadiosTV.Items.Clear();
     
          with TableRadios do
          begin
            First;
            While Not EOF do
            begin
              ListBoxRadiosTV.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
     
          with TableTV do
          begin
            First;
            While Not EOF do
            begin
              ListBoxRadiosTV.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut
    merci bien voila j'ai un peux combiner vos codes comme cela et pour le moment ca marche

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    procedure TForm1.ComboBox1Change(Sender: TObject);
    begin
      if combobox1.ItemIndex > -1 then
      begin
        if adoTable1.Locate('reader', combobox1.Items[combobox1.ItemIndex], []) then
        begin
           adoTable2.Filtered := False;
           adoTable2.Filter := 'idreader = ' + adoTable1.FieldByName('id').AsString;
           adoTable2.Filtered := True;
           ListBox1.Items.Clear;
     
          with adoTable2 do
          begin
            First;
            While Not EOF do
            begin
              ListBox1.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
     
          adoTable3.Filtered := False;
          adoTable3.Filter := 'idreader = ' + adoTable1.FieldByName('id').AsString;
          adoTable3.Filtered := True;
     
          with adoTable3 do
          begin
            First;
            While Not EOF do
            begin
              ListBox1.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
        end;
      end;
    end;

    maintenant je veut lorsque je click sur la chaine du lisbox mon mediaplayer
    play l'adress,

  6. #6
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut
    merci bien voila j'ai un peux combiner vos codes comme cela et pour le moment ca marche
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    procedure TForm1.ComboBox1Change(Sender: TObject);
     
     
        begin
         if combobox1.ItemIndex > -1 then
      begin
        if adoTable1.Locate('reader', combobox1.Items[combobox1.ItemIndex], []) then
        begin
     
           adoTable2.Filtered := False;
           adoTable2.Filter := 'idreader = ' + adoTable1.FieldByName('id').AsString;
           adoTable2.Filtered := True;
                   ListBox1.Items.Clear;
          with adoTable2 do
          begin
            First;
            While Not EOF do
            begin
              ListBox1.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
     
     
          adoTable3.Filtered := False;
           adoTable3.Filter := 'idreader = ' + adoTable1.FieldByName('id').AsString;
          adoTable3.Filtered := True;
     
          with adoTable3 do
          begin
            First;
            While Not EOF do
            begin
              ListBox1.Items.Add(FieldByName('chaine').AsString);
              Next;
            end;
          end;
        end;
      end;
    end;

    maintenant je veut lorsque je click sur la chaine du lisbox mon mediaplayer
    play l'adress,

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 101
    Par défaut
    C'est toujours la même logique !

    Essaye de mieux comprendre les objets de la VCL comme le TComboBox et TListBox !

    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.ListBox1Click(Sender: TObject);
    begin
      if ListBox1.ItemIndex > -1 then
      begin
        if adoTable2.Locate('chaine', ListBox.Items[ListBox1.ItemIndex], [])   then
        begin
          MediaPlayer.FileName := adoTable2.FieldByName('address').AsString;
          MediaPlayerPlay();
        end
        else
        begin
          if adoTable3.Locate('chaine', ListBox.Items[ListBox1.ItemIndex], [])   then
          begin
            MediaPlayer.FileName := adoTable3.FieldByName('address').AsString;
            MediaPlayerPlay();
          end;
        end;
      end;
    end;
    Je suppose que tu as testé le TMediaPlayer avec une adresse d'exemple !
    Je ne l'ai toujours utilisé que via FileName avec des fichiers en local, tes adresses sont des URL ?


    Je croyais que tu voulais apprendre à programmer ?
    Tu n'as pas l'impresssion que l'on te fait tout là ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2011
    Messages : 20
    Par défaut
    voila mon professeur j'ai un peux modifier ton code pour le lisbox avec ce 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
     
     
     if ListBox1.ItemIndex > -1 then
      begin
        if adoTable2.Locate('chaine', ListBox1.Items[ListBox1.ItemIndex], [])   then
        begin
          edit1.text := adoTable2.FieldByName('adress').AsString;
          MediaPlayer.url:= edit1.text;
        end
        else
        begin
          if adoTable3.Locate('chaine', ListBox1.Items[ListBox1.ItemIndex], [])   then
          begin
            edit1.text := adoTable3.FieldByName('adress').AsString;
          MediaPlayer.url:=edit1.text;
          end;
        end;
      end;
    end;

    un peut moche mais sa fonctionne merci bien une autre fois

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

Discussions similaires

  1. [A-03] Comment alimenter une combobox avec plusieurs tables
    Par MichaSarah dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/01/2009, 11h02
  2. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42
  3. [VB 2005]Dataset avec plusieurs tables
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/05/2006, 14h25
  4. [MySQL] requete avec liaisons avec plusieurs tables
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/03/2006, 22h21
  5. historique avec plusieurs table
    Par Cybher dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2005, 16h38

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