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 :

Faire des test dans une base de donn�e


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 Faire des test dans une base de donn�e
    Salut c'est encore moi

    Je suis d�sol� de vous emb�ter encore une fois avec mes questions mais je dois rendre le programme sur lequel je travaille vendredi donc c'est un peu urgent .

    Bref , mon probl�me maintenant est qu' avant de mettre � jour la table tblConsommation il vaudrait pouvoir v�rifier si la quantit� de produit demand� par l'utilisateur n'est pas sup�rieur � la quantit� de produit pr�sente dans la base de donn�e.

    Je ne sais pas si il faut utiliser une requ�te SQL ou une fonction de test ( par exemple if ...) .

    Voil� , A+

  2. #2
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut
    il faut que tu fasse une requete et test le r�sultat dans borland

  3. #3
    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 n'ai pas suivi tes posts pr�c�dents, n�anmoins, je pense pouvoir t'aider l� dessus.

    Pour savoir si la quantit� demand� est encore en stock, ce que je ferai c'est une requ�te afin de r�cup�rer dans la BD la quantit� de produits restants.

    Exemple:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    MaRequete->SQL->Clear();
    MaRequete->SQL->Add("SELECT Nbre_Dispo FROM tblConsommation WHERE Nom_Produit= ... ;");
    MaRequete->Active=true;
    Quantite_Disponible=MaRequete->FieldByName("Nbre_Dispo")->AsInteger;
    Ensuite tu passes par une comparaison dans ton code pour v�rifier si la quantit� demand�e est en stock :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    if(Quantite_Choisie<=Quantite_Disponible)
    // Instruction
    else
    // Instruction
    Personnellement je proc�derai de cette fa�on, apr�s, si d'autres ont une meilleure solution ...

    Voil� @ +

  4. #4
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut
    Pourquoi ne pas faire le test de la quantit� dans la requete quitte � en faire une, puis tu teste si le retour est null ou bien ta quantit� en stock.

  5. #5
    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
    Merci pour la r�ponse

    J'ai fais comme tu a dis mais en executant le programme pas � pas � la ligne :

    Quantite_Disponible=MaRequete->FieldByName("Nbre_Dispo")->AsInteger;

    Quantite_Disponible vaut 0 alors que dans la table elle n'est pas �gale � 0.

  6. #6
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut
    tu as essayer la requete effectu� dans un analyseur de requete pour voir ce qu'elle retourne

  7. #7
    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
    Normalement ce code fonctionne car je m'en sert dans mon programme. Poste nous ton code afin qu'on y jette un oeil ... ca sera plus simple pour te corriger

  8. #8
    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

    Voil� je poste mon code (avec un peu de retard) :

    int Quantite_Disponible = 0 ;
    AnsiString nomProd ;

    ADOQuerySortieStock->SQL->Clear();
    ADOQuerySortieStock->SQL->Add("SELECT NomProduit,StockMini FROM tblProduit WHERE NomProduit = ':ParamNomProduit' ");
    ADOQuerySortieStock->Active=true;

    Quantite_Disponible = ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;

    nomProd = ADOQuerySortieStock->FieldByName("NomProduit")->AsString;

    if("Quantite_Disponible" < ":ParamStockMin")
    {
    LblStockInsuffisant->Visible = true ; (message indiquant que le stock est
    insuffisant)
    }
    else
    {
    " Suite du programme "
    }

    Petite pr��ision :

    ":ParamNomProduit" et ":ParamStockMin" sont les valeurs entr�es par l'utilisateur.

  9. #9
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut Petit suggestion
    La � mon avis ca ne risque pas de fonctionn�.

    fais plut�t

    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
     
    int Quantite_demande = donnée saisie par utilisateur ;
    int Quantite_Disponible = 0 ;
    AnsiString nomProd= produit choisi par utilisateur ;
     
    ADOQuerySortieStock->SQL->Clear();
    ADOQuerySortieStock->SQL->Add("SELECT StockMini FROM tblProduit WHERE NomProduit = ':ParamNomProduit' and StockMini>"+(AnsiString)Quantite_demande+" ");
    ADOQuerySortieStock->Parameters->ParamByName(ParamNomProduit)->Value=nomProd;
    ADOQuerySortieStock->Open();
     
    if(ADOQuerySortieStock->FieldByName("StockMini")->AsString=="")
    {
    LblStockInsuffisant->Visible = true ; (message indiquant que le stock est 
    insuffisant)
    }
    else
    {
    Quantite_Disponible=ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;
    " Suite du programme "
    }
    voila je pense que ceci devrait fonctionn�

  10. #10
    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
    Merci pour la r�ponse

    Quand j'execute le programme j'obtiens l'erreur suivante :
    Le projet ... a provoqu� une classe d'exception EDataBaseErreur avec le message ' ADOQuerySortieStock : Param�tres 'ParamNomProduit' non trouv�s'.
    ...

    Je comprends pas car je l'ais d�clar� (dans la propri�t� Parameters de ADOQuery) et en plus dans la suite du programme j'utilise ce param�tre sans avoir de message d'erreur.

    De plus si tu pouvais me donner quelques explications sur ce code se serai sympa car je n'ais pas tout compris.

    Voila encore merci.

  11. #11
    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, essaie ce 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
    int Quantite_demande = donnée saisie par utilisateur ;
    int Quantite_Disponible = 0 ;
    AnsiString nomProd= produit choisi par utilisateur ;
     
    ADOQuerySortieStock->SQL->Clear();
    ADOQuerySortieStock->SQL->Add("SELECT StockMini FROM tblProduit WHERE NomProduit = "+(AnsiString)ParamNomProduit+" and StockMini>"+(AnsiString)Quantite_demande+";");
    ADOQuerySortieStock->Parameters->ParamByName(ParamNomProduit)->Value=nomProd;
    ADOQuerySortieStock->Open();
     
    if(ADOQuerySortieStock->FieldByName("StockMini")->AsString=="")
    {
    LblStockInsuffisant->Visible = true ; (message indiquant que le stock est 
    insuffisant)
    }
    else
    {
    Quantite_Disponible=ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;
    " Suite du programme "
    }
    Une chose que je ne comprends pas trop :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ADOQuerySortieStock->Parameters->ParamByName(ParamNomProduit)->Value=nomProd;
    A quoi sert cela?
    Et ParamNomProduit, est d�clar� en AnsiString? On lui affecte une valeur avant d'ex�cuter le code que tu nous a donn�? Car si ParamNomProduit ne contient aucune valeur, ton prog va plant�... enfin si je ne dis pas de b�tise

    Tiens nous au courant

  12. #12
    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
    Je ne peus pas te r�pondre quant � l'utilisation de cette ligne car moi non plus je n'ais pas compris ,il faudrait demander � BOUBOU81 , d'ailleurs elle est la cause de mon erreur:

    "Le projet ...a provoqu� une classe d'exception EDataBaseErreur avec le
    message d'erreur 'ADOQuerySortieStock' :Param�tres 'ParaNomProduit'non
    trouv�s'...

    Pour ma part je n'ais pas bien compris ce qu'il y a apr�s le WHERE dans la requ�te SQL:
    NomProduit = "+(AnsiString)ParamNomProduit+" and StockMini>"+(AnsiString)Quantite_demande+";"); (c'est plutot la syntaxe employ� qui me pose probl�me).

  13. #13
    Membre �clair� Avatar de BOUBOU81
    Profil pro
    system integrator
    Inscrit en
    Juin 2004
    Messages
    358
    D�tails du profil
    Informations personnelles :
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : system integrator

    Informations forums :
    Inscription : Juin 2004
    Messages : 358
    Par d�faut
    moi je suis parti du code que tu avais post� , ou vous vouliez utilisez les param�tres.
    Donc tu donnes la valeur du parametre avant d'executer le query sinon
    il te ramene quoi le query si tu lui defini pas le nom du produit.


    si vous ne voulez plus de parametre :

    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
     
    int Quantite_demande = donnée saisie par utilisateur ;
    int Quantite_Disponible = 0 ;
    AnsiString nomProd= produit choisi par utilisateur ;
     
    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=="")
    {
    LblStockInsuffisant->Visible = true ; (message indiquant que le stock est 
    insuffisant)
    }
    else
    {
    Quantite_Disponible=ADOQuerySortieStock->FieldByName("StockMini")->AsInteger;
    " Suite du programme "
    }

  14. #14
    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

    Excusaient moi si je r�ponds un peu tard , le code sans l'utilisation de param�tre fonctionne je vous remercie c'est super cool.

    Par contre BOUBOU81 si tu pouvais m'expliquer la syntaxe que tu a utilis� pour construire la requ�te car je ne suis pas tr�s famili� avec ce genre d'�criture.

    Et aussi dans la condition du if que signifie exactement le : ==""

    Voil� bonne journ�e et encore merci.

  15. #15
    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
    Le == "", signifie que l'AnsiString plac� devant le double = doit etre vide (rien entre les ").

  16. #16
    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
    Merci pour la r�ponse pottiez

    A+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [c#] [dataadapter] effacer des ranger dans une base de donne
    Par mahboub dans le forum Acc�s aux donn�es
    R�ponses: 4
    Dernier message: 02/12/2005, 01h26
  2. Comment stocker des images dans une base de donn�es ?
    Par [Silk] dans le forum Bases de donn�es
    R�ponses: 4
    Dernier message: 21/07/2005, 11h29
  3. [Conception] Gestion des accents dans une base de donn�es
    Par MiJack dans le forum PHP & Base de donn�es
    R�ponses: 7
    Dernier message: 07/07/2005, 11h41
  4. Interet de mettre des fichiers dans une base de donn�e
    Par Oberown dans le forum D�cisions SGBD
    R�ponses: 7
    Dernier message: 04/07/2005, 11h35
  5. inserer des images dans une base de donn�es
    Par alilou04 dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 28/06/2004, 18h54

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