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

C++Builder Discussion :

StringGrid ou DBGrid ?


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut StringGrid ou DBGrid ?
    Bonjour,

    Voila j'ai une appli en rapport avec une base de données, j'ai créé une interface afin de lister le contenu de ma base en fonction de certains critères...

    donc ma form se compose de TEdit etc...ou je taperai les premières lettres de mes mots clés, et donc en dessous je suis censé mettre un "tableau".

    Donc StringGrid ou DBGrid d'après vous?

    Dans tous les cas je suis bon pour faire des requêtes sql visant à chercher des infos dans ma base mais bon, la question la est plus sur le coté esthétique.

    merci d'avance de me donner votre avis

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    De mon côté: de toutes facons, vu que cela est en rapport avec une base de données, c'est DBGrid de suite afin de pouvoir profiter facilement de toutes les fonctionnalités "d'accès aux données", etc ... et ne pas devoir tout gérer/réécrire soit même.
    Après pour un point de vue esthétique, je ne suis pas sur de toutes manières que la StringGrid puisse être plus "belle" que la DBGrid, et en gérant les évènement de "rendu" et de dessin de la grille et de ses éléments, ya moyen surement d'améliorer / customiser l'aspect de la chose.

    @+

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Donc pour toi, DBGrid serait la meilleure solution.

    D'un certain coté, c'est logique, c'est orienté BDD.

    Je tente la chose...alors

    merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Par défaut
    Je dirait DBGrid aussi.

    Au passage, tu n'est pas obliger de faire appel à du sql pure pour ta recherche. Pour info, voinci un bout de code tiré d'un programme que j'ai fait :

    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
    void __fastcall TRechercheMem::Edit1Change(TObject *Sender)
    {
    if((Edit1->Text!="")&&(Edit2->Text==""))
    appel->Membres->Filter="archiver = 0 AND nom LIKE '"+ Edit1->Text + "%'" ;
    if((Edit1->Text=="")&&(Edit2->Text!=""))
    appel->Membres->Filter="archiver = 0 AND prenom LIKE '"+ Edit2->Text + "%'";
    if((Edit1->Text!="")&&(Edit2->Text!=""))
    appel->Membres->Filter="archiver = 0 AND nom LIKE '"+ Edit1->Text + "%' AND prenom LIKE '"+ Edit2->Text + "%'";
    if((Edit1->Text=="")&&(Edit2->Text==""))
    appel->Membres->Filter="archiver = 0 OR archiver = NULL";
    }
    void __fastcall TRechercheMem::Edit2Change(TObject *Sender)
    {
    Edit1Change(Sender);
    }
    Edit1 contien le nom à recherche, edit2 le prénom.
    appel->Membres et un TADOTable.
    Le code s'exécute sur l'évenement OnChange des 2 TEdit de maniére à changer de facon dynamique.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    C'est valable surtout si tu n'as qu'une seule table.

    Moi mes critères de recherches sont au dela d'une table, ils se font sur 2 tables.

    Donc je suis surement obligé de faire des requetes ?

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Tout a fait, mais ca ne change rien.
    Garde toutes les capacités de liaison avec tes données via le DBGrid, et les objets orientés DB que tu vas utiliser (TQuery, TDatasource, etc ou autre), et travaille sur les évènements "OnDraw..." de la DBGrid pour customiser le dessin / l'aspect de la grille.

    @+

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    le hic c'est que je n'arrive pas à faire mes liens entre DBGrid et Base de données.

    Dans mon projet j'ai mes Forms, un DataModule (ou se trouve mon TQuery,et mes TTables)

    donc sur la form ou se trouve mon DBGrid, j'ai mis un DataSource qui pointe vers DataModule->Tquery

    le DBGrid à la propriété DataSource paramétrée vers le TDataSource de la form.

    Mais après je ne sais pas comment faire une requete pour ne remplir qu'une seule colonne par exemple, et/ou une seconde colonne à partir d'une autre table...


    Faire un DBGrid sur une table ok je sais faire, mais vers plusieurs tables je n'y arrive pas...

    merci d'avance

  8. #8
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Oui mais la, si je comprends bien ton problème, c'est un soucis de SQL et non plus un problème avec builder. Tu dois effectivement faire une requête (que tu mettra dans la propriété "SQL" de ton TQuery) qui va te ressortir les colonnes dont tu as besoin dans les tables dont tu as besoin.

    Donc peut être cela vaut il la peine de jeter un oeil sur les FAQ/forums de developpez.com (évidemment ) qui concernent le type de Base de données sur laquelle tu travailles, afin de trouver ton bonheur.

    Sinon, effectivement, tu peut toujours décrire ici le type de tables, les champs, et les jointures / relations entre eux afin que qqu'un t'aide a faire le SQL.

    C'est quoi au fait comme BDD ?
    @+

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Je taf sur une bdd MySql.

    J'ai bien saisi qu'il faut que je modifie la valeur "SQL" du TQuery (sans doute par le code?), mais je ne vois pas quand ? (sur un OnShow ?) et surtt à quelle propriété de mon DBGrid l'appliquer (Columns->Item ?).

    merci d'avance

  10. #10
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Je taf sur une bdd MySql.

    J'ai bien saisi qu'il faut que je modifie la valeur "SQL" du TQuery (sans doute par le code?), mais je ne vois pas quand ? (sur un OnShow ?) et surtt à quelle propriété de mon DBGrid l'appliquer (Columns->Item ?).

    merci d'avance
    Pour effectuer ta requête SQL via un TQuery c'est tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    myQuery->Active = false ;
    myQuery->SQL->Clear() ;
    myQuery->SQL->Add( "SELECT CHAMPS1, CHAMPS2 FROM MATABLE" ) ;
    myQuery->Active = true ;
    Comme ton DBGrid est relié à ton Query (via le DataSource) il contiendra automatiquement le résultat de la requête. Ce qu'il faut bien comprendre, c'est que tu travail sur ton TQuery, et pas directement sur ton TDBGrid (qui ne fera que afficher les données contenu dans ton TQuery).

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Oki!

    merci de l'infos, par contre, dans la DBGrid, au niveau des différentes colonnes, dois obligatoirement ajouter le nom d'un champ dans la partie "FieldName" ?
    Je suppose que oui, sinon ma requête ne fonctionnera pas.

  12. #12
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Si ton DBGrid est destiné a contenir le même type de donnée (<=> la même requête) tu peux effectivement préparer en mode conception:

    - Compléter la propriété SQL de ton TQuery
    - double-clic sur ton TQuery, puis clic-droit Ajouter des Champs
    - Sélectionne les champs que tu souhaite afficher dans ton DBGrid
    - double-clic ensuite sur ton DBGrid (ou va dans la propriété Columns)
    - Clic sur Ajouter tous les champs

    Tu peux ensuite modifier la taille des colonnes, le nom des colonnes, etc...

  13. #13
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Je viens de tester une requête faites dans le vide, et effectivement elle remonte un de mes champs,
    j'ai alors tenté ceci, faire une seconde requête à la suite, et au final sur mon DBGrid, ne remonte qu'un seul champ...

    Il doit bien falloir faire une requête sur un évènement bien précis non?

Discussions similaires

  1. DBGrid ou StringGrid ou autre
    Par exyacc dans le forum Composants VCL
    Réponses: 17
    Dernier message: 04/11/2014, 12h25
  2. Copier un stringgrid vers un dbgrid
    Par uriel2k dans le forum Bases de données
    Réponses: 4
    Dernier message: 22/02/2010, 16h46
  3. copié les données de DBGrid dans un StringGrid
    Par faniette dans le forum C++Builder
    Réponses: 12
    Dernier message: 07/11/2009, 17h04
  4. D'un DBGrid à un StringGrid
    Par nanine85 dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/05/2009, 11h38
  5. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18

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