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 :

Problèmes avec une base de données et Delphi


Sujet :

Delphi

  1. #1
    Membre chevronné
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 355
    Points : 1 856
    Points
    1 856
    Par défaut Problèmes avec une base de données et Delphi
    Bonjour,

    Ca fait longtemps que j'ai plus fait du Delphi et j'ai un projet (LP SIL GL) à faire.
    Voici une partie du projet qui me pose problème


    A coté du boutton Editer ce formation, il y a une liste des formateurs qui sont dans ma Base de données MySQL. Cette liste est un composant TDBCombobox.
    Ce que je voudrai c'est que en fonction du formateur sélectionné et après avoir appuyé sur le boutton Editer ce formateur, ses informations (tirées de la base de données) soient dans mes TEdit (Nom, prénom....)
    Pour l'instant je n'arrive qu'à avoir que les infos du premier formateur de la liste.

    Par ailleurs je ne sais pas comment sélectionner dans le TDBCombobox Pays, le Pays du formateur qui est dans une autre table et qui est lié à ma table formateur par un code.

    Pourriez vous m'aider ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Au sujet de la première question, une requête paramétrée convient en utilisant comme paramètre la valeur de l'item sélectionné dans la combobox.

    Pour le seconde question il s'agit probablement de faire une petite jointure entre 2 tables (lire de la doc sur les clés primaires et secondaires par exemple les excellents tutoriaux de SQLPro aka Frédéric Brouard en ligne sur le site).

  3. #3
    Membre chevronné
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 355
    Points : 1 856
    Points
    1 856
    Par défaut
    J'y ai bien sur penser, mais je ne peux toucher qu'à ce qu'il y a dans le listbox, or il s'agit du nom et du prénom pas du numéro du formateur (qui est la clé primaire de la table).

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Dans ce cas il suffit de faire un tableau de records(nom, prenom, clé) et le remplir avec les valeurs correspondantes dans la table.
    (Avec 1) une procedure qui charge la table de la DB dans le tableau de records et
    2) une autre procedure qui initialise les champs de l'interface via le tableau de records)

    La logique serait que Nom et prenom soient des champs d'une table et que la combobox soit initalisées à l'aide d'une requete sur cette table.
    Ainsi, si le champ "nom" est dans la table, il suffit de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT nom, prenom, civilite FROM TFormateur where nom = :nom;
    Query1.Params[0].AsString := ComboBox1.Items[ComboBox1.ItemIndex];
    Sinon on peut associer un objet à chaque chaine de la combobox.

    Ps: Il faut revoir la disposition des elements de l'interface et eventuellement mettre des infos dans la statusbar.

  5. #5
    Membre chevronné
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 355
    Points : 1 856
    Points
    1 856
    Par défaut
    Oui mais il faut que je prenne le numéro du formateur et non pas le couple nom / Prénom.

    en gros, j'aurai besoin d'une solution qui permet d'afficher le nom et le prénom du formateur mais si l'on sélectionne ce formateur, ce soit son numéro d'identifiant qui soit en fait enregistré...

  6. #6
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Les derrivés de TSrings possdent une methode addObject(Chaine, Objet) qui permet de passer un "TObject" en plus de la chaine a afficher.
    Dans ton cas ce n'est pas un objet mais un entier. Or Il faut savoir que les variables objets sont des adresses memoire, donc des entiers codés sur 4 octets.
    On peut donc tres bien y passer un entier qui, tant qu'il n'est pas utilisé comme reference d'objet, ne pose pas de probleme.
    En gros si on veux stocker 4 on transmet a la methode l'adresse memoire "4" sensé etre le contenu d'une variable TObject, qui ne correspond a aucun objet valide, mais tant que l'on ne se sert pas de l'objet qui est sensé etre pointé, aucun soucis.

    Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Self.ComboBox1.Items.AddObject('Prof1', Pointer(IDProf));
    Pour le recuperer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i := 0 to Self.Combobox1.Items.count-1 do
      If Self.Combobox1.text = Self.Combobox1.Items[i] Then 
        IPProf := Integer(Self.comboBox1.Items.Objects[i]);
    Apres reste a se servir de IDProf pour le sauver dans la base ou je ne sais quoi.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  7. #7
    Membre chevronné
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 355
    Points : 1 856
    Points
    1 856
    Par défaut
    Je ne comprends pas trop comment l'adapter à mon projet, voici le code complet de ma form peut être pourrais tu le compléter :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    unit Unit3;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls, Grids, DBCtrls, Mask, DB, DBTables;
     
    type
      Tprofs = class(TForm)
        profs: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet3: TTabSheet;
        Labelnom: TLabel;
        Labelprenom: TLabel;
        Labelciv: TLabel;
        Labelpays: TLabel;
        Labeladd: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        Label8: TLabel;
        Label9: TLabel;
        Label10: TLabel;
        Labelville: TLabel;
        Labelcp: TLabel;
        Labelemail1: TLabel;
        Labelemail2: TLabel;
        Label15: TLabel;
        nom_formateur: TEdit;
        prenom_formateur: TEdit;
        adresse_formateur: TEdit;
        cp_formateur: TEdit;
        mel1_formateur: TEdit;
        civ_formateur: TComboBox;
        DBCBPays: TDBComboBox;
        ville_formateur: TEdit;
        mel2_formateur: TEdit;
        btnadddone: TButton;
        DrawGrid1: TDrawGrid;
        Label16: TLabel;
        btnaddformateur: TButton;
        btneditformateur: TButton;
        DBCBformateurs: TDBComboBox;
        QueryPays: TQuery;
        paysds: TDataSource;
        Formateursds: TDataSource;
        Queryformateurs: TQuery;
        btnmodifydone: TButton;
        Queryformedit: TQuery;
        formlistds: TDataSource;
        StringGrid1: TStringGrid;
        procedure QueryformateursAfterOpen(DataSet: TDataSet);
        procedure btnaddformateurClick(Sender: TObject);
        procedure btneditformateurClick(Sender: TObject);
        procedure QueryformeditAfterOpen(DataSet: TDataSet);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      profs: Tprofs;
     
    implementation
     
    {$R *.dfm}
     
    procedure Tprofs.QueryformateursAfterOpen(DataSet: TDataSet);
    begin
    while Not queryformateurs.Eof do
    begin
    DBCBformateurs.Items.Add(queryformateurs.FieldbyName('form_nom').Asstring + ' ' +queryformateurs.FieldbyName('form_prenom').Asstring);
    queryformateurs.Next;
    end;
    queryformateurs.Close
    end;
     
    procedure Tprofs.btnaddformateurClick(Sender: TObject);
    begin
      Labelnom.visible:=true;
      Labelprenom.visible:=true;
      Labelciv.visible:=true;
      Labelpays.visible:=true;
      Labeladd.visible:=true;
      Labelcp.visible:=true;
      Labelville.visible:=true;
      Labelemail1.visible:=true;
      Labelemail2.visible:=true;
      DrawGrid1.visible:=true;
      Label16.visible:=true;
      btnadddone.visible:=true;
      nom_formateur.visible:=true;
      prenom_formateur.visible:=true;
      civ_formateur.visible:=true;
      DBCBPays.visible:=true;
      adresse_formateur.visible:=true;
      cp_formateur.visible:=true;
      ville_formateur.visible:=true;
      mel1_formateur.visible:=true;
      mel2_formateur.visible:=true;
    end;
     
    procedure Tprofs.btneditformateurClick(Sender: TObject);
    begin
      Queryformedit.active:=true;
      Labelnom.visible:=true;
      Labelprenom.visible:=true;
      Labelciv.visible:=true;
      Labelpays.visible:=true;
      Labeladd.visible:=true;
      Labelcp.visible:=true;
      Labelville.visible:=true;
      Labelemail1.visible:=true;
      Labelemail2.visible:=true;
      DrawGrid1.visible:=true;
      Label16.visible:=true;
      btnmodifydone.visible:=true;
      nom_formateur.visible:=true;
      prenom_formateur.visible:=true;
      civ_formateur.visible:=true;
      DBCBPays.visible:=true;
      adresse_formateur.visible:=true;
      cp_formateur.visible:=true;
      ville_formateur.visible:=true;
      mel1_formateur.visible:=true;
      mel2_formateur.visible:=true;
    end;
     
    procedure Tprofs.QueryformeditAfterOpen(DataSet: TDataSet);
    begin
     nom_formateur.text:=queryformedit.FieldbyName('form_nom').Asstring;
     prenom_formateur.text:=queryformedit.FieldbyName('form_prenom').Asstring;
     adresse_formateur.text:=queryformedit.FieldbyName('form_adr').Asstring ;
     cp_formateur.text:=queryformedit.FieldbyName('form_cp').Asstring  ;
     ville_formateur.text:=queryformedit.FieldbyName('form_ville').Asstring ;
     mel1_formateur.text:=queryformedit.FieldbyName('form_mel1').Asstring ;
     mel2_formateur.text:=queryformedit.FieldbyName('form_mel2').Asstring ;
    end;
     
    end.

Discussions similaires

  1. Problème avec une base de donnée Openedge
    Par SDEZA dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 02/07/2015, 19h33
  2. Problème avec une base de données PostgreSQL
    Par katia13 dans le forum Doctrine2
    Réponses: 6
    Dernier message: 25/07/2014, 17h36
  3. Réponses: 7
    Dernier message: 19/03/2013, 15h04
  4. Problème de connection avec une base de données
    Par kj_83 dans le forum C++Builder
    Réponses: 4
    Dernier message: 31/10/2006, 15h40
  5. Connexion de Delphi avec une base de données Oracle 9i
    Par Price dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/12/2005, 12h38

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