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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    362
    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 : 362
    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 émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    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 Expert
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    362
    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 : 362
    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 émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    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 Expert
    Homme Profil pro
    CTO
    Inscrit en
    Avril 2006
    Messages
    362
    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 : 362
    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 Expert
    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
    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.

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