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 :

Remplacer dans un DbGrid un ID d'une table par son équivalent string d'une autre table


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut Remplacer dans un DbGrid un ID d'une table par son équivalent string d'une autre table
    Bonjour à tous,
    Débutant en base de données, je vais peut-être poser une question triviale.

    J'ai une base de données comportant plusieurs tables.
    Dans la table 1 "OPERATION" , j'ai un champ ID_CATEGORIE (int)
    Dans la table 2 "CATEGORIE", j'ai deux champs ID_CATEGORIE (int) et NOM_CATEGORIE (string).

    J'affiche sans problème dans un DBGRID tous les champs de ma table 1 "OPERATION", mais je voudrais remplacer dans la colonne "ID_CATEGORIE" la valeur (integer) par son équivalent (string) contenue dans NOM_CATEGORIE de la table 2 "CATEGORIE".

    Est-ce possible sans passer par un autre affichage, par exemple avec un stringGrid ?

    Merci de vos réponses.

    Jean-Louis

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Bonsoir,
    Citation Envoyé par illuch Voir le message
    Est-ce possible sans passer par un autre affichage, par exemple avec un stringGrid ?
    Oui, mais pas par un StringGrid c'est un travail sur la source de données qu'il faut faire.

    Deux solutions : la meilleure utiliser une Requête (Query) comme source de données, moins bonne ajouter un champ (lookup) à la table
    1- La requête : SELECT O.*,C.NOM_CATEGORIE FROM OPERATION O JOIN CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE ;
    le O.* sera remplacé par O.colonne(s) voulue(s) de la table OPERATION
    inconvénient, si la requête doit être en mise à jour il faudra ajouter un UpdateSQL

    2- il suffit de déclarer tous les champs de la table1 puis de rajouter un champ de type lookup lié à table 2 :moinser:

    P.S.
    il aurait été judicieux d'indiquer la version de Delphi et les Composants de connexion et le SGBD utilisé
    une contrainte de clé étrangére (FOREIGN KEY) entre OPERATION et CATEGORIE améliorera sensiblement la vitesse

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut
    Merci de la réponse

    Je vais étudier tout ça

    J'utilise Delphi XE2 avec interbase et les composants IBQuery, IBDatabase, IBTable ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut
    =le O.* sera remplacé par O.colonne(s) voulue(s) de la table OPERATION
    voilà ce que j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Form3.IBQuery1.Close;      // Close the query,
     Form3.IBQuery1.SQL.Clear;
     Form3.IBQuery1.SQL.Add('SELECT O.ID_OPERATION,C.NOM_CATEGORIE FROM C_OPERATION O JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE ');
     Form3.IBQuery1.Open;
    end;
    Lorsque je clique sur le button1, je n'ai pas d'erreur. Dans mon DBgrid, j'ai toujours l'affichage de ma table C_OPERATION, mais je n'ai pas l'affichage de NOM_CATEGORIE qui se trouve dans la table C_CATEGORIE.

    Merci de votre aide

    Jean-Louis

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 706
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Plusieurs possiblités
    - vous avez déjà défini les colonnes de votre grille
    - vous avez défini les champs (mais je pense qu'il y aurait eu erreur)
    - il y a un problème dans les données/la structure de la base


    Note :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form3.IBQuery1.SQL.Clear;
    Form3.IBQuery1.SQL.Add('SELECT O.ID_OPERATION,C.NOM_CATEGORIE FROM C_OPERATION O JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE ');
    peut se remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form3.IBQuery1.SQL.Text:='SELECT O.ID_OPERATION,C.NOM_CATEGORIE FROM C_OPERATION O JOIN C_CATEGORIE C ON O.ID_CATEGORIE=C.ID_CATEGORIE';
    Note bis : j'ai corrigé les balises encadrant le code (bouton #)

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2010
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 109
    Par défaut
    Merci de votre réponse
    Je viens de trouver.
    La requête est correcte.
    Dans la config, j'avais mis " DataSource1.DataSet:=IBTable1" au lieu de " DataSource1.DataSet:=IBQuery1".

    JL

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/04/2017, 15h39
  2. [Toutes versions] Appel d'une variable par son nom (string)
    Par Wini29 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/02/2013, 21h43
  3. Réponses: 2
    Dernier message: 21/09/2008, 18h21
  4. Réponses: 42
    Dernier message: 19/06/2007, 10h40
  5. Réponses: 3
    Dernier message: 25/02/2007, 19h49

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