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 :

[Access] Relier deux DBLookupComboBox et un DBGrid


Sujet :

Bases de données Delphi

  1. #1
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut [Access] Relier deux DBLookupComboBox et un DBGrid
    Bonjour,

    J'ai une base de données Access qui contient trois tables (table Spécialité, table Section et table Stagiaire). Chaque spécialité comporte plusieurs sections et chaque section contient plusieurs stagiaires. Je veux mettre deux DBLookupComboBox, le premier pour choisir la spécialité et le second pour n'afficher que les sections de la spécialité choisie.
    Ce que je veux réaliser, c’est que lorsque je choisis une spécialité dans le premier DBLookupComboBox, le second DBLookupComboBox n’affiche que les sections qui appartiennent à cette spécialité. Et après que j’aurais choisi une Section dans le deuxième DBLookupComboBox, il ne m’affiche que les stagiaires de cette section dans un DBGrid.

    Nom : Sans titre2.jpg
Affichages : 889
Taille : 300,9 Ko

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Bonsoir,
    Il faudrait probablement que chaque ComboBox soit relié à un DataSource propre : lorsqu'on choisit une spécialité dans le premier ComboBox, un Query peuple celui des sections de cette seule spécialité et autorise (Enabled := True) la sélection dans le second ComboBox.
    Même mécanisme pour le choix de la section et l'affichage de ses stagiaires dans un DBGrid.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Bonjour

    C'est assez facile si les tables sont bien pensées, j'ai quelques exemples.
    Pour info je pense qu'il faudra plus que 3 tables si
    - une section peut faire partie de plusieurs spécialités
    - un stagiaire participe à plusieurs sections
    Peux-tu nous décrire les champs de tes tables (au moins les champs clés) ?

    solilog

  4. #4
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    Oui bien sur, Je vais te montrer directement le MLD de mon MCD


    Table Spécialité: (Nom spécialité, Code Spécialité, Durée formation, Niveau d'accès, Niveau qualification).

    Table Section: (Code section, Date début formation, Date fin formation, #Code spécialité).

    Table Stagiaire: (Num d'inscription, Num d'identification, Nom, Prénom, Date de naissance, Lieu de naissance, Adresse, #Code section).

  5. #5
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Salut,
    Je te prépare un exemple que je posterai demain soir (un peu busy aujourd'hui).

  6. #6
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    Prends ton Temps
    Merci d'avance

  7. #7
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    Salut,
    j'ai réussi a relié le DBLookupComboBox de la section avec le DBGrid, maintenant quand je choisi une section, seule les stagiaire qui sont dans cette Section s'affiche dans le DBGrid, Maintenant il me reste juste a relié le DBLookupComboBox de la spécialité avec le DBLookupComboBox de la section pour a chaque fois que je choisi une spécialité, seule les section concerné s'affiche.

    REMARQUE: j'ai fait ça avec un ADOTable et pas un ADOQuery, lequel est mieux placé pour ce travail??

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    un ADOTable pour la table Spécialité des ADOQuery paramétrées pour les deux autres, il n'y a rien de compliqué pour peu d'indiquer les datasets

    ADOTable1 (Spécialité)+ DataSet1
    ADOQuery1 SELECT "Code section"," Date début formation", "Date fin formation" FROM SECTION WHERE "code spécialité"=:"Code Spécialité" avec MasterSource=dataset1 + Dataset2
    ADOQuery2 SELECT "Num d'inscription", "Num d'identification", Nom, Prénom, "Date de naissance", "Lieu de naissance", Adresse FROM STAGIAIRE WHERE "code section"=:"code section" avec MasterSource=dataset2
    Dataset3 pour lier à la grille

    Bien sûr, si vous évitiez d'utiliser des espaces dans vos noms de colonne, ce serait un plus qui vous éviterais l'utilisation de "" qui vont certainement influer sur la syntaxe.

    PS. je trouve la structure de la base plutôt simpliste
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    Tu peu être un peu plus clair parce que j'ai rien compris a ça???

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Nom : Capture.PNG
Affichages : 774
Taille : 19,5 Ko
    c'est plus clair comme ça ? Il faudrait pas non plus que je crée la base de données et vous fournisse le programme !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Nouveau Candidat au Club Avatar de CreedApollo
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2019
    Messages : 36
    Points : 0
    Points
    0
    Par défaut
    Ouiii si tu veux, ça sera avec joie, MDR je rigole, ça bien marché ta méthode, je te remercie du fond du cœur....

  12. #12
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Bonsoir,
    Alors je viens un peu tard, mais je vais le mettre quand même. Je t'ai fait la même chose avec des tables (sans SQL). Ca me paraissait plus simple pour toi. J'ai simplement raccourcis le nom des champs, vieille habitude.
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    unit TestForum_u1;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids, Data.DB,
      // FireDAC ou un autre, peu importe
      FireDAC.Stan.Intf, FireDAC.Stan.Option,
      FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
      FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.IB,
      FireDAC.Phys.IBDef, FireDAC.VCLUI.Wait, FireDAC.Comp.Client,
      FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
      FireDAC.Comp.DataSet;
     
    type
      TForm2 = class(TForm)
        MyDB: TFDConnection;
        tbSPECIALITE: TFDTable;
        tbSECTION: TFDTable;
        tbSTAGIAIRE: TFDTable;
        dsSPECIALITE: TDataSource;
        dsSECTION: TDataSource;
        dsSTAGIAIRE: TDataSource;
        cbSPECIALITE: TDBLookupComboBox;
        grSTAGIAIRE: TDBGrid;
        grSECTION: TDBGrid;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    { Toutes les propriétés ci-dessous peuvent être renseignées en mode conception via l'EDI}
      MyDb.Connected := true;
     
      tbSPECIALITE.Connection := MyDB;
      tbSPECIALITE.IndexFieldNames := 'SPECOD'; // l'index doit exister sur le code specialité
      tbSPECIALITE.Open;
      dsSPECIALITE.DataSet := tbSPECIALITE;
      with cbSPECIALITE do
      begin
        ListSource := dsSPECIALITE;
        ListField := 'SPENOM;SPECOD';
        KeyField := 'SPENOM';
        // Keyvalue: pour affichage au démarrage du prog, avant la 1er click
        Keyvalue := tbSPECIALITE.Fieldvalues['SPENOM'];
      end;
     
      tbSECTION.Connection := MyDb;
      tbSECTION.IndexFieldNames := 'SPECOD;SECCOD'; // l'index doit exister sur les champs
      tbSECTION.MasterSource := dsSPECIALITE;
      tbSECTION.MasterFields := 'SPECOD';
      dsSECTION.DataSet := tbSECTION;
      grSECTION.DataSource := dsSECTION;
      tbSECTION.Open;
     
      tbSTAGIAIRE.Connection := MyDb;
      tbSTAGIAIRE.IndexFieldNames := 'SECCOD;STANOM'; // l'index doit exister ...
      tbSTAGIAIRE.MasterSource := dsSECTION;
      tbSTAGIAIRE.MasterFields := 'SECCOD';
      tbSTAGIAIRE.Open;
      dsSTAGIAIRE.DataSet := tbSTAGIAIRE;
      grSTAGIAIRE.DataSource := dsSTAGIAIRE;
    end;
     
    end.
    J'ai mis les affichages des sections & stagiaires dans des dbGrid, on a ainsi tous les champs (plus sympa).

    solilog

  13. #13
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    J'ai ajouté le résultat.
    Nom : ComboLink.png
Affichages : 751
Taille : 13,2 Ko
    solilog

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/06/2006, 16h30
  2. Relier deux broches d'un port série
    Par bengign dans le forum C++
    Réponses: 2
    Dernier message: 27/12/2005, 00h37
  3. [TP] Relier deux points ?
    Par wwwroom dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 28/06/2005, 19h04
  4. [débutant] relier deux tables
    Par benoitB dans le forum Débuter
    Réponses: 4
    Dernier message: 27/06/2005, 14h04
  5. synchronisation de deux DBLookUPComboBox
    Par frede dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/02/2004, 08h32

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