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

Composants VCL Delphi Discussion :

Affichage des champs significatifs dans un DBGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut Affichage des champs significatifs dans un DBGrid
    Bonjour;

    Mon MCD est le suivant :

    Table 1 : TArchive (Id_arch, libelle_arch, rayonnage, etage_ray, num_boite_arch, date_archivage, duree_vie, scan_arch, observation, id_type_arch, id_dir, id_salle, id_etat_arch, id_langue_arch)

    Table 2 : T Directions (id_dir, libelle_dir)

    Table 3 : TSalles_archives (id_salle, num_salle_arch, surface_salle, etage_salle)

    Table 4 : TEtat_arch (id_etat_arch, etat_arch)

    Table 5 : TLangue_ arch (id_langue_arch, langue_arch)

    Table 6 : Ttypes_archives (id_type_arch, des_type_arch)

    Bon, j'ai pu afficher dans un DBGRID tout les champs de la table TArchive, mais au lieu d'afficher dans cette table les clés étrangers je veux qu’elle m'affiche pour chacune un champ significatif...............par example:

    Au lieu de id_type_arch je veux avoir des_type_arch
    Au lieu de id_dir je veux avoir libelle_dir
    ...................
    .....................
    ......................


    Alors comment forcer mon DBGRID pour afficher ce que je veux?

    Et merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    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 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Réponse : Utiliser une Requête et pour celle-ci les jointures
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT a.Id_arch, a.libelle_arch, a.rayonnage, a.etage_ray, a.num_boite_arch, a.date_archivage, a.duree_vie, a.scan_arch, a.observation,
    ta.des_type_arch,d.libelle_dir .....
    FROM  TArchive A LEFT JOIN  Ttypes_archives ta ON a.id_type_arch=ta.id_type_arch
                              LEFT JOIN  TDirections d on a.id_dir=d.id_dir
                              ....
    il existe une autre solution plus Delphi et moins SQL qui consiste à définir les champs de la table TArchive puis de rajouter les champs de description comme étant des champs de référence mais cela demande à ce que toutes les tables soit ouvertes dans le programme etc...
    bref solution à éviter (même si je l'ai beaucoup utilisée à mes débuts)
    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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut Rien ne change dans mon DBGRID !
    Bonjour,

    Merci SergioMaster pour la réponce;

    j'ai fait ça ( code pour mon boutton Filtrer)
    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
     
    begin
    TdbQuery1.close;
    TdbQuery1.UnPrepare;
    TdbQuery1.SQL.text:='Select a.libelle_arch, a.rayonnage, a.etage_ray, a.num_boite_arch, a.date_archivage, a.duree_vie, a.scan_arch, a.type_interet,';
    TdbQuery1.SQL.text:=TdbQuery1.SQL.text+ 'D.libelle_dir, E.etat_arch, L.langue_doc, T.des_type_arch, S.num_salle_arch, S.surface_salle, S.etage_salle from archive a';
    TdbQuery1.SQL.text:=TdbQuery1.SQL.text+ 'LEFT JOIN directions D ON a.id_dir=D.id_dir LEFT JOIN etat_arch E ON a.id_etat_arch=E.id_etat_arch LEFT JOIN Langue_docum L';
    TdbQuery1.SQL.text:=TdbQuery1.SQL.text+ 'ON a.id_langue_arch =L.id_langue_arch LEFT JOIN salles_archives S ON a.id_salle=S.id_salle LEFT JOIN types_archives T ON a.id_type_arch=T.id_type_arch';
    TdbQuery1.SQL.Add('WHERE 1=1');
    If length(Edit2.text)>0 then TdbQuery1.sql.add('AND rayonnage=:ray');
    TdbQuery1.Prepare;
    If length(Edit2.text)>0 then TdbQuery1.paramByName('ray').asString:=Edit2.text;
    TdbQuery1.Open;
    If length(Edit3.text)>0 then TdbQuery1.sql.add('AND num_boite_arch=:numb');
    TdbQuery1.Prepare;
    If length(Edit3.text)>0 then TdbQuery1.paramByName('numb').asString:=Edit3.text;
    TdbQuery1.Open;
    end;
    Mais Mon DBGRID ne change pas, mème pas une erreur !

    Nom : SQL.jpg
Affichages : 1697
Taille : 251,2 Ko

    Qu'est-ce que je dois faire pour résoudre mon probléme... et merci

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    N'oubliez pas la balise [CODE] (bouton # de l'éditeur) quand vous proposez un extrait de code...

    J'ai réécrit le code afin qu'il soit tout d'abord plus lisible et aussi pour réorganiser les instructions plus logiquement. En effet :
    1. On écrit la requête SQL dans son intégralité, paramètres inclus,
    2. on demande sa préparation,
    3. on affecte les valeurs correspondantes à chacun des paramètres,
    4. on demande l'ouverture de l'ensemble de données.

    Cela donne :
    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
    begin
      TdbQuery1.close;
      //TdbQuery1.UnPrepare; // Inutile ici, on va réécrire la requête
      // 1 Ecriture de toute la requête
      TdbQuery1.SQL.Clear;
      TdbQuery1.SQL.Add('SELECT');
      TdbQuery1.SQL.Add('  a.libelle_arch, a.rayonnage, a.etage_ray, a.num_boite_arch, a.date_archivage, a.duree_vie, a.scan_arch, a.type_interet,');
      TdbQuery1.SQL.Add('  D.libelle_dir, E.etat_arch, L.langue_doc, T.des_type_arch, S.num_salle_arch, S.surface_salle, S.etage_salle')
      TdbQuery1.SQL.Add(' FROM archive a');
      TdbQuery1.SQL.Add(' LEFT JOIN directions D ON a.id_dir = D.id_dir');
      TdbQuery1.SQL.Add(' LEFT JOIN etat_arch E ON a.id_etat_arch = E.id_etat_arch');
      TdbQuery1.SQL.Add(' LEFT JOIN Langue_docum L ON a.id_langue_arch = L.id_langue_arch');
      TdbQuery1.SQL.Add(' LEFT JOIN salles_archives S ON a.id_salle = S.id_salle');
      TdbQuery1.SQL.Add(' LEFT JOIN types_archives T ON a.id_type_arch = T.id_type_arch');
     
      TdbQuery1.SQL.Add(' WHERE 1 = 1');
      If Length(Edit2.text) > 0 then
        TdbQuery1.SQL.Add(' AND rayonnage = :ray');
      If Length(Edit3.text) > 0 then 
        TdbQuery1.SQL.Add(' AND num_boite_arch = :numb');
     
      // 2 Préparation
      TdbQuery1.Prepare;
      // 3 Passage du ou des paramètres
      If Length(Edit2.text) > 0 then 
        TdbQuery1.paramByName('ray').asString := Edit2.text;
      If Length(Edit3.text) > 0 then 
        TdbQuery1.paramByName('numb').asString := Edit3.text;
     
      // 4 Ouverture de l'ensemble de données
      TdbQuery1.Open;
    end;
    Accessoirement, on aère le code avec quelques espaces pour séparer les différents tokens et ainsi permettre plus de lisibilité (et maintenabilité)...
    Philippe.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    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 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonsoir
    Citation Envoyé par Ph. B. Voir le message
    N'oubliez pas la balise [CODE] (bouton # de l'éditeur) quand vous proposez un extrait de code...
    Balises de code mise
    mais je plussoie pour la lisibilité
    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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut Merci ça marche, mais...
    Bonjours,

    Un grand merci Ph. B, votre code marche très bien.

    Je veux maintenant ajouter un autre filtre (Filtrage par Nom de Direction), Alors que ses nom je les récupèrent à partir d'un DBLookupComboBox1

    Le problème c'est que je ne peux pas écrire çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if  Length(RzDBLookupComboBox1.Text) >0 then
        TdbQuery1.SQL.Add(' AND id_dir = :dir');
    If  Length(RzDBLookupComboBox1.text) >0 then
        TdbQuery1.paramByName('dir').asString := RzDBLookupComboBox1.text;
    parceque le contenu de DBLookupComboBox1 n'est pas un Entier.

    Alors je fait quoi au liex de >0

    Mème question pour le filtrage par (date d'archivage)

    Une autre questoin , j'utilise le composant RzDBDateTimePicker1 afin de selectioner une date donnée, mais le probléme c'est que la date affichée par défaut (en mode éxécution du programme) est toujour 30/12/1899 !!! est ce que c'est normale ça?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut svp aidez moi
    svp aidez moi...

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    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 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    tout d'abord j'explique pourquoi j'ai : pas de up

    parce que le contenu de DBLookupComboBox1 n'est pas un Entier.
    et alors ? dans le code proposé ce n'est pas le contenu de qui est testé mais la longueur du texte Length(DBLookupComboBox1.Text)Maintenant si le texte affiché dans le DBLookupCombobox n'est pas la valeur du paramètre mais un libellé c'est la propriété KeyValue qu'il faut utilisé au lieu de Text.
    Alors je fait quoi au lieu de >0
    null et non avenu
    Même question pour le filtrage par (date d'archivage)
    Pour un paramètre date il faudra simplement changer le type du parambyName
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TdbQuery1.paramByName('DateArchivage').asDateTime := Date;
    je ne connais pas les composants rzxxxxxxx mais RzDBDateTimePicker1 doit être dérivé de TDateTimePicker donc avec un peu de chance cela sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TdbQuery1.paramByName('DateArchivage').asDateTime := RzDBDateTimePicker1.Date;
    enfin pour le dernier point
    le problème c'est que la date affichée par défaut (en mode exécution du programme) est toujours 30/12/1899 !!! est ce que c'est normal ça?
    il suffit de lire ceci
    et puisque je pressens par la suite la question
    Alors je fait quoi au lieu de >0
    pour ce genre de composants
    je dirait comme Ray Konopka , il faut utiliser la propriété checked et donc au préalable mettre ShowCheckBox à true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if  RzDBDateTimePicker1.Checked then
      TdbQuery1.paramByName('DateArchivage').asDateTime := RzDBDateTimePicker1.Date;
    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
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut QUESION?
    Merci SergioMaster, j'ai reglé le probléme de DBLookupComboBox1,

    Pour RzDBDateTimePicker1, j'ai essayé le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AjouModif.RzDBDateTimePicker1.Date:=(date());
    La bonne nouvelle c'est que la date '30/12/1899' est remplacée par la date d'aujourd'hui.

    La mauvaise nouvelle c'est que en validant par OK, Mon DBGRID affiche tous les nouveau champs de ma table sauf la date d'aujourd'hui, il affiche une case blanche, je ne sais pas pourquoi?

    Nom : DATEEEEE.JPG
Affichages : 1326
Taille : 140,8 Ko

    ----------------------------------------------------0-0-0-------------------------------------------------------------------

    Autre chose,

    Dans la fiche 'La recherche', je veux que mes 'DBLookupComboBoxxxxxxxx' affiche un Blanc en mode execution, pour que l'utilisateur puisse lui mème choisir sur quel champ faire la rechrche ou non, parceque dans mon etat actuel et quand j'appelle la fiche de recherche, je trouve toutes mes DBLookupComboBoxxxx pleines et affichent pour chaque DBLookupComboBox un champ de la table archive.

    et merci.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2014
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2014
    Messages : 81
    Points : 24
    Points
    24
    Par défaut Besoin d'aide svp...
    • Besoin d'aide svp...


  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    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 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    encore une fois !
    tout d'abord j'explique pourquoi j'ai :moinser: pas de up
    + questions différentes au post d'origine

    si vous vous étonnez du peu de réponses relisez les paragraphes des règles du forum

    pourquoi moi je n'y ai pas répondu ? parce que je n'avais rien compris à votre dernier message, parce que ,comme la plupart d'entre nous, je ne suis pas disponible à temps plein pour répondre (bénévolement dois-je le rappeler) et ce même si j'interviens fréquemment (trop diront les mauvaises langues ) et aussi parce que pour moi les composants raize (rzxxxx) sont des composants tiers que je ne maitrise pas

    La mauvaise nouvelle c'est que en validant par OK, Mon DBGRID affiche tous les nouveau champs de ma table sauf la date d'aujourd'hui, il affiche une case blanche, je ne sais pas pourquoi?
    c'est plutôt du coté du code pour mettre à jour l'enregistrement qu'il faut chercher

    Dans la fiche 'La recherche', je veux que mes 'DBLookupComboBoxxxxxxxx' affiche un Blanc en mode execution,
    c'est certainement parce que les propriétés datasource et datafield sont renseignés alors que seul listsource,listfield et Keyfield doivent être renseignés
    et ce n'est pas en voyant l'image écran que l'on devine cela !
    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

  12. #12
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Maître SM, tout doux..
    une tasse de camomille avec du miel..

  13. #13
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    Salut

    pour n'afficher que les colonne nécessaire il faut juste que tu définisse les colonne de ton dbgrid a l'avance
    soit par programmation soit par l'interface graphique de delphi si les colonnes sont fixe
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. TQuery et taille des champs à afficher dans un DBGrid
    Par kurkaine dans le forum Bases de données
    Réponses: 5
    Dernier message: 15/09/2006, 16h47
  2. mise à jour de champ monétaire dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 30/08/2005, 11h49
  3. champ TEXTE dans un DBGRID
    Par richard038 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/08/2005, 08h44
  4. Taille des champs entres dans un stringGrid
    Par gilles641 dans le forum Composants VCL
    Réponses: 15
    Dernier message: 11/07/2005, 10h38
  5. Réponses: 2
    Dernier message: 14/04/2005, 21h57

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