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

Lazarus Pascal Discussion :

Validation dans un DBGrid


Sujet :

Lazarus Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Developpeur independant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Developpeur independant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Validation dans un DBGrid
    Salut, je suis un nouveau venu dans le monde Lazarus et Pascal (J'avais programmé dans le passé avec C++ builder donc je connais quelque peu la VCL mais c'etait un peu lointain)

    Ma question concerne le DBGrid, quel est le moyen de valider les entrées dans la cellule. par validation j'entends les deux etaps

    1- Intercepter les erreurs de conversion de type (par exemple date mal saisie); Pour l'instant j'ai placé un handler dans la classe Application pour les EConvertError mais j'aimerais savoir s'il y a un moyen plus 'local' dans le grid lui meme

    2- Validation suivant des contraintes sur la valeur de donnée (par exemple min et max, required etc, j'ai lu qu'il existe un evenement OnValidate mais c sur une version 'non stable'). j'aimerai savoir comment vous faites pour resourdre ce volet

    j'utilise la version 0.9.28

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Avec une DBGrid, il faut faire les validations dans l'événement OnValidate et les reformatages sans validation dans l'événement OnSetText des champs de la table associée. On peut aussi les mettre dans le OnBeforePost de la table une validation de plusieurs champs ensemble d'un même "enregistrement", et même dans le OnCommit de la connection pour une transaction.

    Avec la version 0.29 un évènement OnValidate a effectivement été ajouté dans les StringGrids, mais je ne sais pas si il est aussi dans les DBGrids.

    Bon courage
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  3. #3
    Candidat au Club
    Homme Profil pro
    Developpeur independant
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Developpeur independant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse.

    Bon pour OnValidate il semble qu'il y a un problème car le handler n'est jamais executé, sur le site de Lazarus j'ai vu qu'ils ont ouvert un issue dans le bug tracker mais ce n'est pas encore fixé
    http://bugs.freepascal.org/view.php?id=17510

    Pour ce qui est de OnSetText, le problème est tout autre, car si le code est effectivement executé, le problème devient que si on sort de la cellule en saisie (meme si la valeur est correcte), le focus de l'editeur dans la cellule reste active et empeche l'edition des autres cellules. Est ce qu'il y a une procedure speciale a appeler pour informer que l'edition est terminée

    [Edit] Après quelques essais, je pense que le problème vient du fait que dans le handler j'ai placé un appel à ShowMessage si la valeur est invalide (Je sais que c n'est pas le bon endroit mais c'etait juste un essai), il est indiqué que dans le handler on doit affecter une valeur au TField, donc il semblerait que le DbGrid d'attend à ce que la valeur soit affectée pour terminer l'édition. Dans tous les cas le probleme peut etre contourné en reaffectant l'ancienne valeur[/Edit]

  4. #4
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Dans plusieurs tables et champs de mes applications le OnValidate est bien exécuté.

    Toutefois, suite à ton message, j'ai trouvé un cas où il est effectivement ignoré, ce qui est bien fâcheux.

    Le rapport de bug que tu cites concerne la version 0.29 SVN, le type de Dataset TFixedFormatDataSet est le seul mentionné, et enfin il n'a pas été indiqué comme reproductible.

    Cela ne veut pas dire qu'il n'y a pas un problème en 0.28 sur les autres types de Dataset, mais je crois qu'il n'est pas systématique. Ce serait assez incroyable que cela soit passé inaperçu depuis un an et demi.

    Je vais essayer de prendre le temps de chercher... Si d'autres ont des avis là dessus, ils seront les bienvenus.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  5. #5
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bon, il y a effectivement des soucis, jusque dans la version 0.9.31 en cours de dev.

    J'ai l'impression que l'évènement OnValidate n'est pas déclenché quand on est en Insert, mais qu'il est toujours déclenché en Edit.

    Pour contourner, on peut appeler les validations de chaque champ dans le OnBeforePost...

    J'ai ajouté un commentaire sur le rapport de bug que tu as cité. Espérons une résolution avant validation de la 0.9.30...
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 14h18
  2. hauteur de ligne dans un DBGrid
    Par mustang-gx dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/03/2004, 20h27
  3. inserer une image dans un dbgrid delphi
    Par cello dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2004, 18h51
  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. lenteur d'affichage de requete dans un DBGrid
    Par nico27 dans le forum InterBase
    Réponses: 9
    Dernier message: 23/06/2003, 13h54

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