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 :

Pour les spécialistes de TStringGrid


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 Pour les spécialistes de TStringGrid
    Salut à tous!

    voila j'ai un petit problème non dur à résoudre je pense, mais la je bute dessus.

    J'ai une TStringGrid sur ma Form, elle a 3 colonnes: NomEnfant, PrenomEnfant, et DateNaissanceEnfant.

    Je veux envoyer le contenu de cette grid dans une base, où chaque colonne serait un champ de ma table Enfant.

    Le hic dans tout ca, est que je ne vois pas comment ressortir mes infos de la grid. J'ai réussi a tout passer dans un TStringList, mais après je suis bloqué...

    Avez vous une idée de la facon dont je pourrai extraire les infos de ma grid et les envoyer dans la bdd?

    merci par avance,

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut,

    Un petit truc de ce genre ne t'irai pas ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      for (int ligne=1;ligne<=StringGrid1->RowCount-1;ligne++)
      {
          Query1->SQL->Clear();
          Query1->SQL->Add("INSERT INTO maTable (NomEnfant,PrenomEnfant,DateNaissanceEnfant)");
          Query1->SQL->Add("VALUES (:Nom,:Prenom,:DateNaissance)");
          Query1->ParamByName("Nom")->AsString=StringGrid1->Cells[0][ligne];
          Query1->ParamByName("Prenom")->AsString=StringGrid1->Cells[1][ligne];
          Query1->ParamByName("DateNaissance")->AsDate=StringGrid1->Cells[2][ligne];
          Query1->ExecSQL();
      }
    }
    A toi de faire la connexion avec la BDD correctement
    A+

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    tu peux également utiliser les fonctions C+Builder (sans doute plus rapide qu'une requête SQL):
    Code c++ : 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
     
       int ligne;
       try
        {
            MaTable->Open(); // ouverture de la table
            MaTable->Append(); // on se place à la fin
     
            for (ligne=1; ligne < StringGrid1->RowCount; ligne++)
            {
                MaTable->Insert();  // mode insertion
                MaTable->FieldByName("NomEnfant")->AsString  = StringGrid1->Cells[0][ligne];
                MaTable->FieldByName("PrenomEnfant")->AsString  = StringGrid1->Cells[1][ligne];
                MaTable->FieldByName("DateNaissanceEnfant")->AsString = StringGrid1->Cells[2][ligne];
                MaTable->Post(); //on ajoute les valeurs à la table
            }
     
            MaTable->Close(); //fermeture de la table
        }
        catch(...)
        {
            MaTable->Close();
            MessageBox(this->Handle, "Erreur...", "Erreur", MB_OK | MB_ICONWARNING);
        }

    N'oublie pas de préciser les attributs Tablename et DataBasename de l'objet MaTable de type TTable.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    Oki je vois un peu mieu, merci.

    Par contre dans mon cas, j'ai passé le contenu de chaque cellule de ma StringGrid dans une TStringList.

    Donc ce pose le problème de ressortir correctement les valeurs de ma StringList et de les ajouter a la base...

    Comment utilisez vous les StringList?

    Merci par avance,

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    exemple :

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TStringList *MaListe = new TStingList();
    int n;
    AnsiString data;
     
    //.....
    for (n=0; n<MaListe->Count; n++)
        data = MaListe->Strings[n];

    si tu utilises 3 listes (une pour chaque colonne) veille bien à ce que MaListe->Sorted = false, sinon tu pourrais avoir des surprises

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    ok merci

    Sinon, petit conseil ce coup ci, vu que sur ma Form j'utilise une TStringGrid, j'ai besoin de transférer à une classe autres que ma form le contenu de cette Grid, j'utilisais jusqu'a maintenant une TStringList, d'où mes différentes questions.

    Est ce que la StringList est plus appropriée à ce genre de chose, ou existe il d'autres méthodes plus rapide ou plus "pratique" .

    Merci par avance,

  7. #7
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Est ce que la StringList est plus appropriée à ce genre de chose, ou existe il d'autres méthodes plus rapide ou plus "pratique" .
    Transmet ta TStringGrid au lieu de ta TStringList


    Si je ne me trompe pas cela donnerait quelque chose dans ce genre.
    Dans ta classe :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void __fastcall MaClasse::GestionGrille(TStringGrid *MaGrille)
    {
       AnsiString data;
       data = MaGrille->Cells[0][1];
     
       // .........
    }


    et dans ta forme principale :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      //........
      AutreClasse->GestionGrille(StringGrid1);
      //.......
    }

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Par défaut
    D'accord merci.

    J'essaie ca ce soir et je te tiens au courant!

Discussions similaires

  1. Pour les spécialistes des Cartes Mères !
    Par zakuli dans le forum Composants
    Réponses: 8
    Dernier message: 04/12/2005, 07h30
  2. Probleme pour les insertion au format etranger
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 19/03/2003, 10h55
  3. Réponses: 2
    Dernier message: 08/10/2002, 18h26
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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