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 :

Tri alphabetique d'un DBGrid [Débutant]


Sujet :

C++Builder

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Merci pour cette longue explication, ça résume parfaitement ce que j'ai besoin de savoir et tellement bien expliqué que je vais l'imprimer. Je bosse dessus et je reviens vers toi si j'ai un problème!

  2. #22
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Ok donc j'ai bien compris ce que tu as écrit mais dans un première temps je dois importer les champs de la ligne d'enregistrement dans les 3 TEdit tels qu'ils sont, c'est après avoir cliqué sur un autre bouton de mise à jour que la requête UPDATE se fera.

    Donc pour récupérer les infos, j'ai donc fait un simple SELECT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString numClient= Query1->FieldByName( "NUMERO_CLIENT" )->AsString ;
    QModif->Active = false;
    QModif->SQL->Clear();
     
    Form2->Edit1->Text=QModif->SQL->Add( "SELECT NOM FROM CLIENT WHERE NUMERO_CLIENT= " + numClient  ) ;
    QModif->ExecSQL() ;
    Form2->Show();
     
    }


    * Mon Query1 est celui que tu appelles QSelect, je le renommerais plus tard

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Il y a du progrès, maintenant au lieu de rien avoir dans le Edit1, j'ai "0".
    Le code utilisé est ci-dessus.

  4. #24
    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 : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Cette ligne est complètement incohérente, normal qu'elle ne donne rien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form2->Edit1->Text = QModif->SQL->Add( "SELECT NOM FROM CLIENT WHERE NUMERO_CLIENT= " + numClient  ) ;
    Regarde ce que retourne la fonction Add (via l'aide F1) et tu comprendra ton erreur. De plus, tu fais un ExecSQL sur un SELECT.

    Mais si je comprend pas trop ce que tu essai de faire...

    Si tu veux récupérer le contenu de la ligne sélectionnée dans un Edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form2->Edit1->Text = Query1->FieldByName( "NOM" )->AsString;

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    En fait ce que je cherche à faire :


    Quand l'utilisateur clique sur un bouton sur le form1, ça ouvre le form 2:


    Et je voudrais que dans ces 3TEdit, s'affiche les 3 champs de la ligne sélectionnée dans le DBGrid.

    Après, les modifications peuvent être faites et le user aura la possibilité de cliquer sur un autre bouton en dessous pour sauvegarder les modifications et les envoyer dans la table. ( mais ça, j'ai compris, c'est pour afficher dans les TEdit que je sais pas comment m'y prendre )

  6. #26
    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 : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Donc il suffit de faire au moment où tu affiche ta Form2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form2->Edit1->Text = Query1->FieldByName( "NOM" )->AsString;
    Form2->Edit2->Text = Query1->FieldByName( "GSM" )->AsString;
    Form2->Edit3->Text = Query1->FieldByName( "MATRICULE" )->AsString;

  7. #27
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    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
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     
    //Récupération de la ligne sélectionnée dans le DBGrid:
    //Query1->SQL->Clear();
    AnsiString numClient2= Query1->FieldByName( "NUMERO_CLIENT" )->AsString ;
    QModif->Active = false;
    QModif->SQL->Clear();
    QModif->SQL->Add( "SELECT * from client" ) ;
    QModif->SQL->Add( "WHERE NUMERO_CLIENT= " + numClient2  ) ;
    ShowMessage( Form1->Query1->SQL->Text );
    ShowMessage( Form1->QModif->SQL->Text );
    QModif->ExecSQL() ;
     
    Form2->Edit1->Text = QModif->FieldByName( "NOM" )->AsString;
    Form2->Edit2->Text = QModif->FieldByName( "NUMERO" )->AsString;
    Form2->Edit3->Text = QModif->FieldByName( "MATRICULE" )->AsString;
     
     
    }
    Franchement, je comprend pas pourquoi ça marche pas, quand je relis, ça suit mais la logique mais on doit pas avoir la même avec le PC.

    Query1 est l'équivalent de ton Qselect qui affiche dans le ShowMessage : select * from client order by nom
    QModif est l'équivalent de ton QUpdate et affiche bien dans le ShowMessage:
    Select * from client where NUMERO_CLIENT =11 ( par exemple )

    Quand je clique sur le bouton qui declenche l'évènement de cette fonction, j'ai une erreur classe d'exception, il ne reconnait pas le champ "NOM" à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form2->Edit1->Text = QModif->FieldByName( "NOM" )->AsString;
    Alors que le champ NOM est bien correct evidemment...
    Si tu vois pas, je crois que je vais laisser tomber...
    thx

  8. #28
    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 : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    C'est normal!!! Tu mélange un peu tout.
    => pas de ExecSQL avec un SELECT
    => QModif doit te servir pour faire un UPDATE, pas pour faire un SELECT puisque tu as déjà Query1 pour le SELECT.
    => Les champs de la ligne sélectionnée dans ton DBGrid peuvent être récupérés directement via un FieldByName

    Pour afficher les infos dans ta deuxième fenêtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    // POUR RECUPERER LA LIGNE SELECTIONNÉ DE TON DBGRID
    //(si bien sûr ton DBGrid est connecté à Query1!!!)  
      Form2->Edit1->Text = Query1->FieldByName( "NOM" )->AsString;
      Form2->Edit2->Text = Query1->FieldByName( "NUMERO" )->AsString; 
      Form2->Edit3->Text = Query1->FieldByName( "MATRICULE" )->AsString;
    }
    Pour enregistrer les modifications:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::BtnUpdateClick(TObject *Sender)
    {
    //Récupération de la ligne sélectionnée dans le DBGrid:
      AnsiString numClient= Query1->FieldByName( "NUMERO_CLIENT" )->AsString ;
      QModif->Active = false;
      QModif->SQL->Clear();
      QModif->SQL->Add( "UPDATE CLIENTS" ) ;
      QModif->SQL->Add( "SET NOM = " + QuotedStr( Edi1->Text ) + " , " ) ;
      QModif->SQL->Add( "    MATRICULE = " + QuotedStr( Edi3->Text )  ) ;
      QModif->SQL->Add( "WHERE NUMERO_CLIENT= " + numClient  ) ; 
      QModif->ExecSQL() ; 
    }

  9. #29
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Ok, c'est déjà plus clair dans ma tête.
    En tout cas ça marche, et j'ai fait la suppression qui marche aussi.

    Je crois que ce qui m'induit en erreur c'est FielByName: sur l'aide C++Builder, j'ai trouvé ça :
    Appelez FieldByName pour obtenir les informations sur un champ quand vous en connaissez le nom.
    FieldName est le nom d'un champ existant.

    Mais ce que je comprend pas trop c'est la manière dont il sait de quelle ligne on parle parce que "obtenir les informations sur un champ" ok , mais de quelle ligne ?
    ça me parle pas trop leur définition.
    C'est pour ça que je faisais un autre SELECT, j'étais convaincu qu'il fallait en faire un autre pour situer vraiment la bonne ligne.
    Bon je bosse tout ça .
    Thanks à toi une fois encore

  10. #30
    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 : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    C'est parce que ton DBGrid n'est qu'un affichage de ton TQuery.
    Lorsque tu sélectionne une ligne dans ton DBGrid, en faite ton TQuery se place sur l'enregistrement correspondant, et c'est celui là que tu récupère via FieldByName.

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Merci pour la précision,
    Sinon, tu sais si il y a un moyen de virer le champ "NUMERO_CLIENT" du DBGrid car du coup il me l'affiche avec les 3 autres champs. Ce qui est normal d'un coté comme j'affiche les données du DBGrid grâce à un SELECT * sur ma table.
    Mais si je fais un SELECT champvoulu1,champvoulu2 par exemple sans mettre le champ "NUMERO_CLIENT" il n'aime pas dans le code comme on l'utilise ce champ.


    EDIT: pour cacher la colonne, j'ai trouvé j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid1->Columns->Items[3]->Visible = false;
    (3 est la colonne en question)

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [deb]Try alphabetique de string?
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/12/2005, 12h04
  2. [LG]Tri alphabetique avec les pointeurs
    Par zbooon dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2005, 18h04
  3. Tri alphabetique
    Par wil4linux dans le forum C++
    Réponses: 17
    Dernier message: 17/02/2005, 00h02
  4. Réponses: 2
    Dernier message: 08/04/2004, 17h30
  5. [LG]tri alphabétique
    Par Marcus2211 dans le forum Langage
    Réponses: 5
    Dernier message: 17/11/2003, 17h55

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