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

Composants VCL Delphi Discussion :

Contrôle de saisie dans une DBGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Inscrit en
    septembre 2006
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 248
    Points : 137
    Points
    137
    Par défaut Contrôle de saisie dans une DBGrid
    Bonjour,

    Je travaille en Delphi 2007

    J'ai une DBGrid associée à un DatatSource, lui-même tirant ses données d'une TTable.
    Dans un des champs, je veux saisir une valeur comprise entre 0 et 1. Comment faire, c'est à dire, quel événement intercepter et sur quel composant ?
    J'ai déjà mis un EditMask sur le champ concerné, mais il ne fait qu'une partie du travail.

    Merci d'avance pour votre aide.

    Kim

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 435
    Points : 39 234
    Points
    39 234
    Billets dans le blog
    59
    Par défaut
    OnValidate du champ ?
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    ou alors propriétés CustomConstraint et CustomConstraintMessage du TField ?

  4. #4
    Membre habitué
    Inscrit en
    septembre 2006
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 248
    Points : 137
    Points
    137
    Par défaut Contraintes de saisie sur champs
    Bonjour
    D'abord merci à SergioMaster et evarisnea pour leur participation.
    Mais en fait, aucune des deux solutions ne fonctionne au moment de la saisie, voire simplement du scroll (changement d'enregistrement).

    Donc le pb reste entier.

    Si d'autres ont d'autres idées, elles sont les bienvenues

    Kim

  5. #5
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    ces propriétés et événements sont faits pour ton souci pourtant !

    le TField est un objet représentant un champ de ta source de donnée, une TTable dans ton cas. pour accéder aux objets TFields tu fais un double clic sur ton TTable puis menu contextuel "ajouter tous les champs (Ctrl+F)".
    ensuite alors tu choisis le champ qui t'intéresse et tu modifie ses propriétés/événements à l'aide de l'inspecteur d'objet.

    peux-tu nous expliquer comment tu as procédé pour tester nos 2 suggestions ?

  6. #6
    Membre habitué
    Inscrit en
    septembre 2006
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 248
    Points : 137
    Points
    137
    Par défaut Test de CustomConstraint et CustomConstraintMessage et OnValidate
    Bonjour,
    Merci evarisnea de t'intéresser à mon misérable cas.
    A priori, j'ai fait "tout bien comme y faut", sauf que j'avais un peu simplifié l'exposé pour ne pas embrouiller les honorables lecteurs.
    La Table en question est en fait une table mémoire (kbmemTable) vide à laquelle je rajoute en dynamique des champs dont la définition m'est donnée par une requête.
    Ensuite, j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     MaTableMemoire.FieldByName('NOM_Du_CHAMP').CustomConstraint='x<1.0 AND x>0.0';
    Mais cela n'empêche pas du tout de changer d'enregistrement quand le critère n'est pas respecté.
    Provisoirement, je teste sur AfterPost, et si la valeur ne me convient pas, je laisse l'ancienne valeur. Ce serait nickel si je pouvais, dans ce cas, empêcher de passer à l'enregistrement suivant.

    Kim

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    bizarre ... si j'ai le temps ce soir je testerai

    et pour OnValidate ?

    tu peux créer un gestionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.OnValidateHandler(Sender: TObject);
    begin
      if Assigned(Sender) and (Sender is TField) then
        if (TField(Sender).AsInteger < 0) or (TField(Sender).AsInteger > 1) then
          Abort; 
    end;
    et attacher le gestionnaire d'événement dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTableMemoire.FieldByName('NOM_Du_CHAMP').OnValidate := self.OnValidateHandler;

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2008, 12h52
  2. Réponses: 3
    Dernier message: 28/02/2008, 21h28
  3. [Formulaire]Contrôle de saisie dans une zone de texte
    Par ludovicparis dans le forum IHM
    Réponses: 7
    Dernier message: 29/03/2007, 13h39
  4. Données dans une DBgrid
    Par camino dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/02/2004, 03h40
  5. saisie dans une fenetre de service
    Par gord's dans le forum Composants VCL
    Réponses: 4
    Dernier message: 05/11/2003, 16h25

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