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 :

Exploiter le résultat d'une requête SQL avec C++ builder [Débutant(e)]


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    DevOps
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Exploiter le résultat d'une requête SQL avec C++ builder
    Bonjour à tous,

    J'utilise C++ builder 5, je suis en cours de développement d'une application qui suite à un clic sur un bouton doit générer un code aléatoire sur 4 chiffres entre 1000 et 9999. Ensuite je dois tester l'éxistance de ce code dans ma table AccessVL ainsi que la valeur d'un champs. Celle ci est composée de :
    -Code_Aleatoire(int)
    -Entree_Effectuee(bool)
    -Sortie_Effectuee(bool)

    Une fois mon code généré, je dois effectuer une requête SQL sur ma table pour vérifier si le code éxiste déjà et si le champ Entree_Effectuee est bien à false, auquel cas je regénère un code. Le problème est que je ne sais pas comment exploiter le résultat de ma requête pour vérifier mes conditions.

    Voici le code associé à mon bouton :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    void __fastcall TfAppli::bpGenerationCodeClick(TObject *Sender)
    {
    //ouverture de la table
    //dmProg contient tous les composants ADO
    //tCodeAletoire type ADOTable
    dmProg->tCodeAleatoire->Open();
     
    //déclaration code alléatoire
    int CodeAleatoire;
    randomize();
     
    //génération du code aleatoire
    CodeAleatoire = random(9000) + 1000;
     
    //vérification si le code existe déjà
    //tQCodeAleatoire type ADOQuery
    tQCodeAleatoire->Close();
    tQCodeAleatoire->SQL->Clear();
    //essai avec le code 1578 déjà créé dans la base
    tQCodeAleatoire->SQL->Add("SELECT * FROM AccesVL WHERE Code_Aleatoire='1578'");
    tQCodeAleatoire->Open();
     
    if () 
    //vérification du résultat de la requête (si code existe)
    ...
    && ()
    //vérification du champs Entree_Effectuee
    ...
    {
    //nouveau code aléatoire
    CodeAleatoire = random(9000) + 1000;
    }
     
    //message si ok
    ShowMessage ("Le code Aléatoire à saisir est :" + String(CodeAleatoire) );
     
    //enregistrement dans la table
    dmProg->tCodeAleatoire->Append();
    dmProg->tCodeAleatoire->FieldValues["Code_Aleatoire"]= CodeAleatoire;
    dmProg->tCodeAleatoire->Post();
     
    //fermeture de la table
    dmProg->tCodeAleatoire->Close();
    }
    Merci par avance de vos réponses

  2. #2
    Membre expérimenté
    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 : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    j'ai pas Builder sous la main, mais ca dois ressembler a ca:

    Tu parcoure toutes les lignes de résultat de ta requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tQCodeAleatoire->First() ;
    while( !tQCodeAleatoire->EoF ) 
    {
       int value = tQCodeAleatoire->FieldByName("Nom_Du_Champ")->AsInteger // ou AsString ,ou AsDateTime, etc....
     
      // tu test value 
       tQCodeAleatoire->Next() ;
    }

  3. #3
    Débutant Avatar de devlopassion
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2006
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Août 2006
    Messages : 576
    Points : 276
    Points
    276
    Par défaut
    bonjour,
    je ne sait pas si j'ai bien compri ton probleme , mais si tu cherche ou se trouve les résultat de ta requète , et bien ils son dans "tQCodeAleatoire", que tu peux l'utilisé comme une simple table ADO , par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (tQCodeAleatoire->FieldByName("Entree_Effectuee")->Value=false)
    ShowMessage (".....");

  4. #4
    Membre à l'essai
    Profil pro
    DevOps
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Merci bien pour vos réponses j'ai pu finir cette partie de mon code sans

  5. #5
    Membre à l'essai
    Profil pro
    DevOps
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    je reviens vers vous pour une nouvelle question concernant les résultats de requête SQL. Le but étant d'effectuer une requête sur une base mdb qui ne renvoie qu'un seul résultat, et de modifier plusieurs champs de ce résultat.

    Les champs sont :

    test1 de type text
    test2 de type bool
    test3 de type date/heure

    Après l'éxecution de la requête je dois :

    -ajouter un texte dans le champ test1
    -passer le champ test2 à Vrai
    -ajouter la date et heure au moment de la modification dans test3

    D'apprès ce que j'ai trouvé comme infos le résultat de la requête renvoie un tableau de Variant, mais comment modifier mes champs ???


    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
    void __fastcall TForm1::Button4Click(TObject *Sender)
    {
            ShowMessage("fermeture sql");
            ADOQuery1->Close();
            ADOQuery1->SQL->Clear();
            ShowMessage("creation requete");
            ADOQuery1->SQL->Add("SELECT * FROM Contact WHERE societe = '6650'");
            ShowMessage("execution requete");
            ADOQuery1->Open();
            ShowMessage("goto first");
            ADOQuery1->First();
            ShowMessage(ADOQuery1->FieldByName("test2")->AsString);
            //affiche "Faux"
            ADOQuery1->Append();
            ShowMessage("modification champ test1");
     
    //---------code qui renvoie une erreur----------------------------
            //modifier le champ test1 qui est à la base un champ de type text
            ADOQuery1->FieldValues["test1"]=Variant("essai");
            //modifier le champ test2 qui est à la base un champ de type bool
            ADOQuery1->FieldValues["test2"]=Variant("Vrai");
            //ajouter la date et l'heure dans le champ test3
            //code inconnu
    //--------------------------------------------------------------
     
    ADOQuery1->Post();
    }
    Merci d'avance pour vos réponses...

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Salut,
    pour modifier une valeur dans ta table, il faut que tu passe également par des requête sql, ici ce sera une requête de type UPDATE et tu aura un code du style suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            ShowMessage("fermeture sql");
            ADOQuery1->Close();
            ADOQuery1->SQL->Clear();
            ShowMessage("creation requete");
            ADOQuery1->SQL->Add("UPDATE ... suite de la requete");
            ShowMessage("execution requete");
            ADOQuery1->ExecSQL();
    Note bien qu'il faut exécuter cette requête par la fonction ExecSQL et non Open car cette requête modifie la base

  7. #7
    Membre expérimenté
    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 : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Effectivement utilise une requete UPDATE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            ADOQuery1->SQL->Clear();
            ADOQuery1->SQL->Add("UPDATE MaTable");
            ADOQuery1->SQL->Add("SET Champ1 = " + QuotedStr("Valeur du Champ"));
            ADOQuery1->SQL->Add(", Champ2 = 1");
            ADOQuery1->SQL->Add(", Champ3 = " + QuotedStr( DateTimeToStr(Date()));
            ADOQuery1->SQL->Add("WHERE [condition]");
            ADOQuery1->ExecSQL();

  8. #8
    Membre à l'essai
    Profil pro
    DevOps
    Inscrit en
    Août 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : DevOps

    Informations forums :
    Inscription : Août 2008
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    merci pour ces réponses rapides

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/08/2012, 23h13
  2. remplir un Tableau avec le résultat d'une requête SQL
    Par Jean-Claude Dusse dans le forum ASP.NET
    Réponses: 13
    Dernier message: 23/02/2009, 15h00
  3. Exploiter les résultats d'une requête SQL
    Par grinder59 dans le forum C#
    Réponses: 2
    Dernier message: 29/01/2009, 11h36
  4. [SQL] Comparer résultat d'une requête Sql avec php
    Par nicoxweb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2007, 22h46
  5. Réponses: 1
    Dernier message: 25/06/2007, 16h33

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