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 :

condition sur l'insertion dans un DBGrid


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut condition sur l'insertion dans un DBGrid
    Bon soir tt le monde,

    Je saisie mes données dans un DBGrid, le problème que j'ai c'est :
    comment empêcher l'insertion d'un enregistrement que si une condition est valable. (Exemple : prix non valid!!)

    Je veux que le curseur de la DBGrid ne pass pas à la ligne insérée que si il véfirife la condition.

    Merci.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Salut,
    Je te conseillerais plutôt d'attendre que les pro répondent mais intuitivement j'aurais fait un truc du genre:

    (si la donnée que tu veux mettre en base de donnée est dans un TEdit )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (Edit1->Text ==prix)
    {
     // ta condition en fait, si tu veux un entier, si ça doit etre inf ou sup à telle ou telle valeur ...ect
    Form1->Query1->SQL->Clear();
    Form1->Query1->SQL->Add( "INSERT INTO table (champ)" );
    Form1->Query1->SQL->Add( "VALUES ( " );
    Form1->Query1->SQL->Add( QuotedStr( Form1->Edit1->Text ) + " ) " );
    Form1->Query1->ExecSQL();
    }

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    non, je travaille avec une DBGrid

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    Si le Prix est Global (vient d'ailleurs)
    voir BeforeInsert du DataSet lié au DBGrid !
    Provoqué un Abort annulera l'insertion

    Si le Prix est saisie dans la Grille
    voir BeforeInsert...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Merci ShaiLeTroll,

    Oui c'est juste ce que tu dit, mais le problème c'est que :
    l'utilisateur peut appuyer sur la touche vers le bas, ou sur la touche tabulation, dans ce cas la ligne précédente et accptée même
    si la condition n'est pas vérifiée.

    Ce que je veux moi, c'est :
    est=ce qu'il y a une possibilité de bloquer le (bookmark) de la ligne jusqu'à ce que la condition soit vérifié;

    J'est essayé avec la boucle infinie ()

    while (true)
    {

    }

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    mais ça marche pas.

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    En même temps, j'ai écrit n'importe quoi !
    Pour le second cas, c'est BeforePost pas BeforeInsert ...

    Si le Prix est saisie dans la Grille
    voir BeforePost...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Même BeforePost ne bloque pas l'enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (Table1PV->Value < Table1PA->Value)
    {
             ShowMessage("Prix de vente non valid");
             Table1->Cancel();
    }
    Etant donnée que :
    Table1PV->Value : est le prix de vente saisie dans la dbgrid
    Table1PA->Value : est le prix d'achat de la table

    Les deux champs PV et PA sont dans la même table Table1;

    A l'execution de la commande cancel :
    Tout les anciens lignes saisies sont perdues!

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    les Anciennes Lignes ?
    Cela n'annule que la ligne en cours !

    Perso, je ne fais pas Cancel dans BeforePost mais un throw !

    Citation Envoyé par Aide de C++ Builder
    Une application peut utiliser BeforePost pour effectuer des contrôles de validité sur les modifications de données avant de les valider. En cas de problème de validité, il suffit d'appeler Abort pour annuler l'opération de validation (Delphi) ou de déclencher une exception (C++).
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Merci,
    Je vais essayer throw;

    Mais, Comment peut-on utilser throw ?

    Merci encore

  11. #11
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    Faudrait pas pousser quand même !throw : Comment lever une exception ?
    C'est quand même les bases du langage !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Merci,

    Je sais bien comment ça marche le throw; mais comment on peut l'utiliser à l'interieur d'un dbgrid :

    L'evenement = saisir le prix de vente PV
    La condition = PV > PA (Prix d'Achat)

    Comment peut-on utiliser try catch throw dans ce cas ?
    Etant donnée que je veut pas que l'index de la ligne en cours de DBGrid ne soit pas changée soit vers le haut soit vers le bas (c.à.d bloquage de Bookmark) que si le PV > PA.

    J'espère que tu ma bien compris Monsieur ShaiLeTroll.

  13. #13
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    le plus simplement du Monde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (Table1PV->Value < Table1PA->Value)
    {
      ShowMessage("Prix de vente non valide");
      throw Exception();
    }
    Pour cette histoire de curseur, tu veux empêcher le déplacement, as-tu consulté l'aide pour voir les autres évènements ?
    Effectivement BeforePost n'est peut-être pas le bon choix
    Comme BeforeScroll mais je n'ai jamais tenter d'empecher le déplacement, à voir !
    Voir aussi dans quel ordre se produit BeforePost et BeforeScroll, avec de la chance, d'abord BeforeScroll si OK, cela Post donc BeforePost, si NOK cela ne Scroll pas donc pas de Post...
    Si pas de chance, tu n'auras surement pas le comportement que tu souhaites!
    Sinon la Saisie directement dans les Grilles c'est pas le truc le plus ergonomiques ! c'est souvent une uzinagaz pour un ressenti utilisateur médiocre
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #14
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Merci ShaiLeTroll,

    Mais s.t.p sans commentaires.

    Ce qui est merveilleux dans ce site c'est qu'il est fait pour tout le monde, pour les médiocres, même pour les nuls, et aussi pour les super-pros (comme vous ...).

    Propose ta solutions mais sans commentaires, et merci.


    Même BeforeScroll ne marche pas.

  15. #15
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 057
    Par défaut
    le médiocre ne s'appliquait pas aux membres du forum, tu t'es senti visé ?
    mais à l'ergonomie d'une saisie directement depuis une grille !
    relit bien
    c'est souvent une uzinagaz pour un ressenti utilisateur médiocre
    c'est le ressenti utilisateur qui est médiocre, l'utilsateur qui va utiliser ton appli qui va pester parce qu'il est compliqué de l'utiliser
    Tu commence une ligne de saisie, tant qu'elle n'est pas correcte tu ne peux pas en sortir, il faut penser alors au bouton echap que peu de monde connait finalement !

    désolé, si tu l'as mal pris (et mal compris) !

    Je préfère avoir un Formulaire de saisie indépendant accessible via la Double-Clic ou un Bouton Modifier
    En fait, très proche de ce que génère l'Expert de Fiche Bases de Données !
    La Saisie directe dans une grille pose toujours énormément de problème !
    J'ai été aussi forcé de le faire et j'ai parfois galéré !

    Perso, je viens de tester, un TTable, un TDataSource, un TDBGrid
    une table Paradox avec Champ1 et Champ2
    Je vais dans le TTable, F11, Evènements, DoubleClic sur BeforePost

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Table1BeforePost(TDataSet *DataSet)
    {
      if (Table1->FieldByName("Champ1 ")->AsInteger <= Table1->FieldByName("Champ2")->AsInteger)
      {
        Abort();
      }
    }
    et Tant que Champ1 est inférieur à Champ2, je ne peux pas me déplacer dans la Grille ni avec les flèches ni avec la souris
    Cela ressemble à ce que tu voulais !
    Créer un petit projet de test, juste pour avoir ce comportement, une fois fonctionnelle dans le petit projet de test, reporte le dans le vrai projet

    Tu dois avec un code parallèle qui provoque un effet de bord
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Merci ShaiLeTroll,

    Merci pour ton aide, je vais essayer cette solution.

    Merci encore.

Discussions similaires

  1. Condition sur les valeurs dans un formulaire
    Par afrodje dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/03/2009, 16h38
  2. Ecrire sur plusieurs lignes dans un DBGrid
    Par stfanny31 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/08/2008, 23h26
  3. simuler un double click sur une liste dans un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 1
    Dernier message: 01/09/2005, 10h45
  4. insertion dans un DBGrid avec un DBNavigator
    Par jakouz dans le forum Composants VCL
    Réponses: 4
    Dernier message: 05/08/2005, 16h12
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

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