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 averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    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 confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    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.
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    Par d�faut
    Salut

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

  4. #4
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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 �m�rite
    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
    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 confirm�
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    D�tails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    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 );
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqu� ? (Jacques Rouxel)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    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
    Expert confirm�

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    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 averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    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 �m�rite
    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
    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 averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    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 : 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,

    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 averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    47
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 47
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    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 : 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,

    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