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 :

comment faire une relation entre 3 dbcombobox


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut comment faire une relation entre 3 dbcombobox
    salut tous le monde , je dévlope une application sous delphi 2009 , j'ai 3 db combobx , le premier dbcombobox qui correspond a une proprité de la table catégorie le deuxieme marque et le troisieme model mon probleme est le suivant comment faire si je selectione dans le premier dbcombobox une catégorie je veut avoir dans le deuxieme uniquement les marques qui coresponde au catégorie selectioner dans 1er dbcombobox ainsi que pour le 2eme dbcombobox si je selctione un iteme le 3eme dbcombobox me donne uniquement les propriété qui corresponde au 1er dbcombobox (catégorie)et au 2eme dbcombobox(marque)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Personnellement j'utiliserai l'événement Onchange des TDBCombobox.

    Par exemple pour la 1° Combobox
    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 Myform.TComboBox1.ComboBox1Onchange(Sender: TObject);
    begin
      Combobox2.Onchange := nil;
      try
       If ComboBox1.Text = 'Valeur1' then begin
         --> Remplir la combobox2 et m'est le text à une valeur par défaut si nécessaire
       end else begin If ComboBox1.Text = Valeur2' then begin
         --> Remplir la combobox2 et m'est le text à une valeur par défaut si nécessaire
       end ele begin
         --> Remplir la combobox2 et m'est le text à une valeur par défaut si nécessaire
     
       end;
        ComboBox2Onchange(ComboBox2);
      finally 
        Combobox2.Onchange := ComboBox2Onchange;
      end;
    end;

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Salut;

    cela se limite à définir une relation maitre/détail/détail qui équivaut à maitre/détail et son détail est lui maitre dans la seconde relation. donc deux relation maitre/détail dont la seconde est imbriquée. de ce point de vue, la solution est comme suite :

    Table1 : id_Table1, autres attributs
    Table2 : id_Table2, id_Table1, autres attributs
    Table3 : id_Table3, id_Table2, autres attributs

    si tu utilise les composants Table tu n'as qu'à renseigner les propriétés MasterSource et MasterField des Tables 2 et 3.

    Table2 : MasterSource : DataSource1
    Table2 : MasterField : id_Table1-->id_Table1

    Table2 : MasterSource : DataSource2
    Table2 : MasterField : id_Table2-->id_Table2

    si tu utilise SQL alors faut faire un Select imbriqué.

    avec ça je crois que tu aura le résultat escompté.

    Bonne chance.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    merci pour votre réponse mais les dbcombobx se trouve sur un autre form mais la recherche pour remplir les dbcombobx se trouve sur une seul table

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Re;

    les forme sont des objets donc faut précéder le DBComboxxxx par le nom de son form exemple : Form1.DBComboxxx.SetFocus.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    Bon je suppose que vous avez une forme regroupant tous les accès à la base de donnée.

    Dans cette forme vous pouvez ajouter une fonction en public renvoyant les données dont vous avez besoins.

    Dans l'exemple suivant vous avez un TSQL donnant accés a la base de donnée et une fonction renvoyant les données formaté pour êtres mis dans le Items de votre ComboBox (Mycombobox.Items.Text := Données_si_Condition1(Value)
    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
     
    Function TMyDBForm.Données_si_Condition1(Value: string) : String;
    var
      Reponse: TStringList;
    begin
      Reponse := TStringList.create;
      try
        If SQLTemp.Open then
          SQLTmp.Close;
        SQLTmp.Sql.Text := 'Select champ1 where champ2 = ' quotedStr(Value);
        SQLTmp.Open;
        SQLTmp.First;
        While not SQLTmp.Eof do begin
          Reponse.add(SqlTmp.fields[0].AsString);
          SQLTmp.Next;
       end; 
        Result := Reponse.text;
      finally
      Reponse.free;
      end;
    end;
    D'un point de vue plus général, il n'est pas très pratique de mettre les accès au Base de donnée dans une forme.

    Les datamodules ont été prévus pour cela.
    Les datamodules sont un composant identique à une forme sur lequel on ne peut déposer que des composants non visuelle (boite de dialogue, accès aux base de donnée etc.) car elle ne sont pas associé a un fenêtre de donnée.
    Les datamodules sont conçût pour regrouper des fonctions (comme l'accès aux donnée, la mise en forme des données leurs sauvegarde et récupération etc.) dans un code unique, pouvant être accessible à toutes les formes ou units.
    Vous pouvez faire la même chose a partir de votre forme contenant votre TTable, mais vous risquer rapidement d'avoir des problèmes d'appels récursif.

    Bon Wekk-end de paque

Discussions similaires

  1. Comment faire une connexion entre talend et weka?
    Par glINSAT dans le forum Weka et MOA
    Réponses: 2
    Dernier message: 15/04/2009, 09h10
  2. Réponses: 2
    Dernier message: 17/06/2008, 10h52
  3. Réponses: 6
    Dernier message: 23/12/2007, 15h06
  4. comment faire une query entre 2 tables de 2 bases?
    Par ch_cu2 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2006, 22h45
  5. Réponses: 4
    Dernier message: 22/08/2006, 12h20

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