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 :

Problème de parenthèse


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut Problème de parenthèse
    Salut

    J'ai un problème qui va peut-être vous paraître stupide ou évident mais voilà :
    Cela fait référence à la fonction de test (voir la question sur le forum :"[Résolu] Faire des test dans une base de donnée") dans cette fonction on doit vérifier si la quantité retirée par l'utilisateur n'est pas supérieur à la quantité présente dans la base de donnée.

    Si c'est le cas un simple message s'affiche mais maintenant ce que je voudrais c'est q'une boite de dialogue s'affiche et indique la quantité en stock du produit sélectionné , pour cela j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int reponse ;
     
    reponse = Application->MessageBox("La quantité en stock est de :(ADOQuerySortieStock->FieldByName("StockMini")->AsString)","Quantité en stock insuffisante", MB_OK );
    if(reponse == IDOK)
    {
    //instructions
    }
    else
    {
    //instructions
    }
    mais j'obtiens le message d'erreur suivant :
    ) manquante dans l'appel de fonction.

    Je ne vois pas ou elle manque.

    Voilà encore une fois désolé pour la question

  2. #2
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    Ce sont les guillemets autour de StockMini qui provoque l'erreur.

    Si tu veux mettre la valeur de ta requette dans la boîte de dialogue,
    il faut d'abord construire la chaine de caractère et la passer ensuite à MessageBox.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Salut

    Je comprends pas bien ce que tu dis : construire la chaîne de caractère ?

  4. #4
    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
    Oui de cette maniere :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int reponse ;
    AnsiString message = "La quantité en stock est de : " ;
    message += (ADOQuerySortieStock->FieldByName("StockMini")->AsString) ;
    reponse = Application->MessageBox(message,"Quantité en stock insuffisante", MB_OK ) ;
    if(reponse == IDOK)
    {
    //instructions
    }
    else
    {
    //instructions
    }

  5. #5
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,
    Je pense qu'il faut que tu construise ton Message:
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reponse = Application->MessageBox("La quantité en stock est de :(ADOQuerySortieStock->FieldByName("StockMini")->AsString)","Quantité en stock insuffisante", MB_OK );
    fait un truc comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AnsiString message 
    message = "La quantité en stock est de :" +
    (ADOQuerySortieStock->FieldByName("StockMini")->AsString);
    reponse = Application->MessageBox(message,"Quantité en stock insuffisante",MB_OK);
    Je ne sais pas si ta fonction récupérant la donnée dans ta base de données te renvoie un entier ou une AnsiString, attention à ca.

  6. #6
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 051
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 051
    Points : 8 283
    Points
    8 283
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AnsiString st;
    st = "La quantité en stock est de : " + ADOQuerySortieStock->FieldByName("StockMini")->AsString;
    Application->MessageBox(st.c_str(),"Quantité en stock insuffisante", MB_OK );

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    J'ai fais comme t'a dit mais j'obtiens deux erreur au niveau de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reponse = Application->MessageBox(message,"Quantité en stock 
         insuffisante", MB_OK ) ;
    erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [C++ Erreur] fensortistock.cpp(60): E2034 Impossible de convertir 'AnsiString' en 'const char *'.
    [C++ Erreur] fensortistock.cpp(60): E2342 Mauvaise correspondance de type dans le paramètre 'Text' ('const char *' désiré, 'AnsiString' obtenu).

  8. #8
    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
    dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    reponse = Application->MessageBox(message.c_str(),"Quantité en stock insuffisante", MB_OK ) ;

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    L'instruction ne provoque plus d'erreur mais aucune quantité ne s'affiche .
    Je pense que le problème vient du fait que cette instruction se trouve à l'intérieur d'un if qui a comme paramètre :
    if(ADOQuerySortieStock->FieldByName("StockMini")->AsString=="")

    Mais pour que se soit plus compréhensible voilà mon programme :

    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
     
         AnsiString Quantite_demande = ComboBoxQuantiteSortie->Text ;
         AnsiString ParamNomProduit ;
         int Quantite_Disponible = 0 ;
         AnsiString nomProd = DBLookupComboBoxProdSorti->Text  ;
         ADOQuerySortieStock->SQL->Clear();
     
         ADOQuerySortieStock->SQL->Add("SELECT StockMini FROM tblProduit WHERE NomProduit = '"+nomProd+"'and StockMini>"+(AnsiString)Quantite_demande+" ");
     
          ADOQuerySortieStock->Open();
     
          if(ADOQuerySortieStock->FieldByName("StockMini")->AsString=="")
          {
     
             int reponse ;
             AnsiString message = "La quantité disponible en stock est de : " ;
             message += (ADOQuerySortieStock->FieldByName("StockMini")->AsString) ;
     
             reponse = Application->MessageBox(message.c_str(),"Quantité en 
             stock insuffisante", MB_OK ) ;
             if(reponse == IDOK)
             {
                //instructions
             }
             else
             {
                //instructions
             }
     
     
        }
       else
       {
          Quantite_Disponible=ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;
     
         //Suite du programmme
     
       }
    Explication :
    Lorsqu'un utilisateur souhaite retirer un produit du stock il faut qu'il donne le nom de ce produit ainsi que la quantité . C'est à ce moment là que ce bout de programme intervient , il faut vérifier que la quantité à retirer n'est pas supérieur à la quantité présente dans la base de donnée.

  10. #10
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Je ne connais pas du tout les bases de données, mais pour être sur, fais ce test qu'une seul fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    AnsiString Donnee = ADOQuerySortieStock->FieldByName("StockMini")->AsString;
     
    if(Donnee == "")
    {
     ...
     AnsiString message = "La quantité disponible en stock est de : "  + Donnee;
    }
    Si ADOQuery te renvoie un AnsiString. Comme ca, tu ne testes qu'une fois et tu réutilise ton résultat après.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    Salut

    Désolé de répondre aussi tard mais le ADOQuery renvoi toujours une valeur NULL.
    A mon avis le problème vient du fait que au moment ou l'on veut afficher le contenu de "StockMini" avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsiString message = "La quantité disponible en stock est de : " ;
    message += (ADOQuerySortieStock->FieldByName("StockMini")->AsString) ;

    ADOQuerySortieStock->FieldByName("StockMini")->AsString est égal à NULL
    puisque c'est la condition du if.

    Voilà si vous avait d'autre explication je suis preneur.

  12. #12
    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 : 38
    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
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Dans le code ci dessous, tu testes la valeur de stock mini et tu regardes si c'est supérieur au stock demandé par l'utilisateur?

    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
    if(ADOQuerySortieStock->FieldByName("StockMini")->AsString=="")
          {
     
             int reponse ;
             AnsiString message = "La quantité disponible en stock est de : " ;
             message += (ADOQuerySortieStock->FieldByName("StockMini")->AsString) ;
     
             reponse = Application->MessageBox(message.c_str(),"Quantité en 
             stock insuffisante", MB_OK ) ;
             if(reponse == IDOK)
             {
                //instructions
             }
             else
             {
                //instructions
             }
     
     
        }
    Si c'est le cas, moi j'aurai fais autrement :

    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
         AnsiString Quantite_demande = ComboBoxQuantiteSortie->Text ;
         AnsiString ParamNomProduit ;
         int Quantite_Disponible = 0 ;
         AnsiString nomProd = DBLookupComboBoxProdSorti->Text  ;
         ADOQuerySortieStock->SQL->Clear();
     
         ADOQuerySortieStock->SQL->Add("SELECT StockMini FROM tblProduit WHERE NomProduit = '"+nomProd+"'and StockMini>"+(AnsiString)Quantite_demande+" ");
     
          ADOQuerySortieStock->Open();
     
          if(ADOQuerySortieStock->FieldByName("StockMini")->AsInteger>=StrToInt(Quantite_demande))
          {
     
             int reponse ;
             AnsiString message = "La quantité disponible en stock est de : " ;
             message += (ADOQuerySortieStock->FieldByName("StockMini")->AsString) ;
     
             reponse = Application->MessageBox(message.c_str(),"Quantité en 
             stock insuffisante", MB_OK ) ;
             if(reponse == IDOK)
             {
                //instructions
             }
             else
             {
                //instructions
             }
     
     
        }
       else
       {
          Quantite_Disponible=ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;
     
         //Suite du programmme
     
       }
    Peut être que je me trompe caremment mais au niveau de tes tests, je ne vois pas trop ce que tu cherches à faire

    Ce que je comprends, c'est que l'utilisateur entre une quantité désiré, ensuite dans la BD tu compares cette quantité à la quantité restante en stock.

    Si la quantité est supérieure, tu affiches un message en précisant que le stock demandé est supérieur au stock mini et qu'il reste autant d'articles en stock.
    Si la quantité désirée est inférieure ou égale au stock, tu déduis de ton stock restant la valeur de la quantité désirée par l'utilisateur et tu peux par la suite affiché un message en affichant la quantité restante après "le passage de la commande". (en faisant une requête)....

    Enfin j'espère que c'est cela que tu cherches à faire car sinon tu vas devoir l'expliquer

    Bon Courage

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Points : 22
    Points
    22
    Par défaut
    C'est ça tu as compris .

    J'ai essayé ton code mais ça ne donne rien non plus .

    Remarque :
    Dans la condition du if ce n'est pas plutôt : "<=" que ">=" , c'est juste pour être clair.

    Enfin voilà la quantité en stock ne s'affiche toujours pas dans la boîte de dialogue.

  14. #14
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour;

    Je tente,

    1- Verifi le type de StockMini dans la table de la bd.
    2- au lieu d'utiliser Application -> MessageBox ,
    Utilise

    MessageDlg Par exemple

    3- Verifi qu'il existe une valeur dans le champ StockMini de la Table .


    @+

  15. #15
    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 : 38
    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
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je viens de faire un petit test rapide et chez moi tout fonctionne !

    Le code est celui ci dessous à la différence que j'utilise le composant TQuery au lieu du TADOQuery (cependant, le fonctionnement est identique).

    Voici le code :

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
         AnsiString Quantite_demande = 10 ;
         AnsiString ParamNomProduit ;
         int Quantite_Disponible = 0 ;
         AnsiString nomProd = "Fruit";
         Query->SQL->Clear();
     
         Query->SQL->Add("SELECT StockMini FROM tblProduit WHERE NomProduit = '"+nomProd+"' and StockMini>"+(AnsiString)Quantite_demande+";");
     
          Query->Open();
     
          if(Query->FieldByName("StockMini")->AsInteger>=StrToInt(Quantite_demande))
          {
     
             int reponse ;
             AnsiString message = "La quantité disponible en stock est de : " ;
             message += (Query->FieldByName("StockMini")->AsString) ;
     
             reponse = Application->MessageBox(message.c_str(),"Quantité en stock insuffisante", MB_OK ) ;
             if(reponse == IDOK)
             {
                //instructions
             }
             else
             {
                //instructions
             }
     
     
        }
       else
       {
          Quantite_Disponible=Query->FieldByName("StockMini")->AsInteger;
     
         //Suite du programmme
     
       }
    }
    A toi de remplacer les Query par les ADOQuery et ne pas oublier de modifier les champs Quantite_Demande ainsi que nomProd car j'y ai mis des valeur afin de pouvoir tester

    Comme l'a dis Kmaniche, vérifie dans ta BD le type de StockMini (chez moi je l'ai mis en int).

    Voilà! Tiens nous au courant

Discussions similaires

  1. [RegEx] Problème de parenthèses capturantes
    Par Tuttu dans le forum Langage
    Réponses: 3
    Dernier message: 27/02/2009, 14h37
  2. Problème de parenthèses dans un String
    Par cameron dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 15/10/2008, 07h15
  3. ALTER MODIFY problème de parenthèse
    Par ldims24 dans le forum SQL
    Réponses: 1
    Dernier message: 30/06/2008, 14h37
  4. [ANTLR] Problème de parenthèses imbriquées
    Par vkphoenixfr dans le forum Autres langages
    Réponses: 0
    Dernier message: 30/11/2007, 11h40
  5. [TP] Problème de parenthèse
    Par AjeAurel dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 13/11/2007, 21h55

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