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 :

TEdit vs DBGrid


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut TEdit vs DBGrid
    Bonjour à tous,

    J'ai 2 tables : Clients_tbl & Appels_tbl

    J'aimerai comparer une valeur de ma table avec celle d'un TEdit :

    Je récupère dans un TEdit l'id d'une personne de la table clients,

    à partir de cette id je veux afficher les appels correspondant à celui-ci.

    C'est à dire que l'id d'un personne est unique, mais je peux avoir plusieurs appels pour cette personne donc tous les appels auront l'id de la personne.

    Et donc une fois que je récupère l'id de la personne je veux afficher tous les appels de cette personne dans un DBGrid.

    Si quelqu'un a une idée merci bcp

  2. #2
    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
    Il suffit de modifier ta requête en ajoutant une clause "WHERE".

    Par exmeple, en admettant que ton DBGrid soit relié à un composant TQuery appelé Query1, et que l'ID de la personne soit stockée dans Edit1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Query1->Active = false ;
    Query1->SQL->Clear() ;
    Query1->SQL->Add( "SELECT * FROM Appels_tbl" ) ;
    Query1->SQL->Add( "WHERE id_person = " + Edit1->Text ) ;
    Query1->Active = true;

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Arf ça marche pas, pourtant j'ai vérifié dans mon TEdit j'ai bien la bonne valeur de l'id mais ma condition ne marche pas à chaque fois il me prend toutes les valeurs de ma table Appels :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      Debug->Clear() ;
      Debug->Lines->Add(Ed_Id->Text) ;
     
      Tbl_Appels->Open() ;
      QAppels->SQL->Clear() ;
      QAppels->SQL->Add("SELECT * FROM Appels_tbl") ;
      QAppels->SQL->Add("WHERE Appels_tbl.id ="+Ed_Id->Text) ;
      QAppels->Active = true  ;
      QAppels->Open() ;

  4. #4
    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
    QAppels->Active = true ;
    QAppels->Open() ;
    Ces deux lignes font la même chose, tu peut virer soit l'une, soit l'autre.

    A mon avis ton DBGrid est relié à ta TTable Tbl_Appels, et pas à ton TQuery QAppels.

    Vérifie bien celà! (Vérifie la propriété DataSource de ton DBGrid. Le composant TDatasource indiqué doit pointé sur QAppels, et pas sur Tbl_Appels)

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Voilà ce que j'ai :

    MaSession(TSession) -> avs_dB(TDataBase) -> Appels_Tbl(TTable) -> DS_Appels(TDataSource) <- QAppels(TQuery)

    Paramètres :

    avs_dB :
    - AliasName : avs_alias
    - DataBaseName : avs_db
    - SessionName : MaSession

    Appels_Tbl :
    - Active :True
    - DataBaseName : avs_db
    - SessionName : MaSession
    - TableName : appels_tbl

    DS_Appels :
    - AutoEdit : False
    - DataSet : Tbl_Appels

    QAppels :
    - DataBaseName : avs_db
    - DataSource : DS_Appels
    - SessionName : MaSession
    - SQL : J'ai rien mis..

    DBAppels(DBGrid) :
    - DataSource : DS_Appels

    Dans cette configuration je ne peux pas choisir QAppels dans le DataSource pour mon DBAppels(DBGrid).

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    Salut
    Peut etre mais pas sur

    QAppels->SQL->Add("WHERE Appels_tbl.id ="+Ed_Id->Text.c_str() ) ;

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Hum ..

    [BCC32 Erreur] FenPrinc.cpp(267): E2085 Addition de pointeur incorrecte

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    QAppels->SQL->Add("WHERE Appels_tbl.id ="+Ed_Id->Text.c_str() ) ;


    donne

    QAppels->SQL->Add("WHERE Appels_tbl.id =" ) ;
    QAppels->SQL->Add(Ed_Id->Text.c_str() ) ;

    et / ou

    La valeur ne doit pas etre envoyée avec des guillements vers sql ?
    Ne pas oublier de les echapper

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Je vais tester ça, mais je doute que sa marche, je dois avoir un problème autre part car je vois vraiment pas pourquoi il m'affiche tout le temps toute la table :/


    Edit: Je viens de voir qu'en faite il m'affiche toujours TOUTE la table, on dirait qu'il fait un SELECT * et puis c'est tout :/
    Trop bizarre..

  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
    avs_dB :
    - AliasName : avs_alias
    - DataBaseName : avs_db
    - SessionName : MaSession

    Appels_Tbl :
    - Active :True
    - DataBaseName : avs_db
    - SessionName : MaSession
    - TableName : appels_tbl


    DS_Appels :
    - AutoEdit : False
    - DataSet : QAppels

    QAppels :
    - DataBaseName : avs_db
    - DataSource : /
    - SessionName : MaSession
    - SQL : J'ai rien mis..

    DBAppels(DBGrid) :
    - DataSource : DS_Appels

    Et pour Appels_Tbl tu n'en a pas besoin (sauf il t'est utile a autre chose dans ton programme).

    La valeur ne doit pas etre envoyée avec des guillements vers sql ?
    Ne pas oublier de les echapper
    Ca depend du SGBD, mais en général pour les champs de type entier il n'y a pas besoin de guillemets.
    Si le problème venait de la requête, il aurait droit à une belle exception SQL...
    Or là l'erreur vient simplement du faite que son DBGrid affiche Appels_Tbl et non pas QAppels.

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    DS_Appels :
    - AutoEdit : False
    - DataSet : QAppels

    QAppels :
    - DataBaseName : avs_db
    - DataSource : /
    - SessionName : MaSession
    - SQL : J'ai rien mis..
    Problème résolue !

    C'était ça en effet ! Merci


    EDIT : Pour pouvoir voyager dans un DBGrid avec les fonctions First, Next, Prior et Last faut-il obligatoirement afficher la table entière ou juste par une requête TQuery ?
    Car lorsque j'utilise la requête pour voir toute la table mon curseur sur le DBGrid ne bouge plus alors qu'il effectue bien les opérations Next, Prior...

  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
    Citation Envoyé par __sPiKe__ Voir le message
    Pour pouvoir voyager dans un DBGrid avec les fonctions First, Next, Prior et Last faut-il obligatoirement afficher la table entière ou juste par une requête TQuery ?
    Car lorsque j'utilise la requête pour voir toute la table mon curseur sur le DBGrid ne bouge plus alors qu'il effectue bien les opérations Next, Prior...
    Je ne comprend pas trop ta question.
    First, Next, Prior ou Last fonctionnent avec un TQuery (TTable et TQuery ont le même ancêtre TDataSet).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QAppels->First() ;
    QAppels->Next() ;
    QAppels->Prior() ;
    QAppels->Last() ;
    En effectuant une de ces actions tu verra la sélection de ton DBGrid changer. (Encore une fois bien évidemment uniquement si ton DBGrid est relié à ton TQuery!)

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Ah ok j'ai tout compris je pense !

    En fait mon Last, Next .. ne marchait plus car ils pointés sur ma table est non ma requête !

    Voilà tout est réglé !

    Merci bien

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

Discussions similaires

  1. copier valeur Tedit dans une DBgrid
    Par soilaupul dans le forum Débuter
    Réponses: 3
    Dernier message: 17/10/2008, 16h29
  2. Recuperer valeur DBGrid ver TEDIT ?
    Par flo291288 dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/06/2008, 11h51
  3. DBLookupComboBox dans DBGrid
    Par KThrax dans le forum Bases de données
    Réponses: 7
    Dernier message: 24/08/2004, 15h18
  4. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18
  5. [Kylix] Contrôle DBGrid
    Par KThrax dans le forum EDI
    Réponses: 1
    Dernier message: 10/05/2002, 14h18

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