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 à 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 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 averti 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
    Points : 315
    Points
    315
    Par défaut
    il faut que tu fasse une requete et test le résultat dans borland
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  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 : 37
    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 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 averti 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
    Points : 315
    Points
    315
    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.
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  5. #5
    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
    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 averti 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
    Points : 315
    Points
    315
    Par défaut
    tu as essayer la requete effectué dans un analyseur de requete pour voir ce qu'elle retourne
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  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 : 37
    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
    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 à 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

    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 averti 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
    Points : 315
    Points
    315
    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é
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

  10. #10
    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
    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 : 37
    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, 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 à 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
    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 averti 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
    Points : 315
    Points
    315
    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 "
    }
    Boubou from The SpAcE GaLaXy....
    AhAhAhAhAh

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

    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
    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
    Le == "", signifie que l'AnsiString placé devant le double = doit etre vide (rien entre les ").
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

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