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

Bases de données Delphi Discussion :

Champs obligatoires


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut Champs obligatoires
    j'ai plusieurs champs obligatoires dans une table et je veux si l'utilisateur n'a pas saisie l'un d'eux que je sache lequel Pour reposionner le curseur sur le DBEdit approprié.
    J'ai constaté ça lors de la saisie dans un DBGrid il le fait tout seul.
    (DB FireBird Delphi 6).
    Merci.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Essaye d'utiliser l'évenement BeforePost afin de vérifier les champs saisis... Je n'ai pas testé, c'est juste une idée comme ça...
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  3. #3
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Si tu utilises des TQUery, double-clic dessus, puis sur la liste vide qui s'ouvre, clic droit, ajouter un champs.
    Tu fais ça pour chacun des champs et dans l'inspecteur d'objet, tu mets required à TRUE
    7 fois à terre, 8 fois debout

  4. #4
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Merci pour vos réponse.
    Higgins Merci mais mon problème n'est pas de fixer mes champs obligatoires ils le sont déjà.
    Pour la réponse de Nono (que j'estime beaucoup :o ) c'est une solution pour une table dont on connait les champs ensuite dans le BeforePost on test chacun des champs. Ce que je veux c'est de récupérer le champs obligatoire (Nom ou indice) qui a causé l'erreur de la validation.
    L'idée et de faire un test passe partout pour toutes les erreurs de validation.
    Si vous avez remarqué lors d'une saisie dans un DBGrid si un champs obligatoire est omis et après le déclenchement de l'exception le curseur est positionné automatiquement sur le champs obligatoire qui doit être saisie.
    j'espère m'avoir bien exprimé. Merci une fois de plus.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    :solution alternative:
    Que penses-tu de forcer la saisie de ces champs? L'idée première étant d'amener l'utlisateur à faire une saisie dans ces champs.

    Je ne sais plus l'il existe un événement OnLoseFocus pour les champs Edit mais je vais vérifier. S'il y en a, alors fais apparaitre une boite de dialogue informant l'utilisateur de son omission puis redonne le focus au champ Edit

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 106
    Points : 59
    Points
    59
    Par défaut
    je ne suis pas sur que base de données, sur une erreur de zone obligatoire lors du commit, soit en mesure de retourner le champ concerné, mais peut être je me trompe, auquel cas, je suis interessé ! 8)
    Delphi 6 entreprise & interbase 6

    Bonne journée 8)

    Tout programme non trivial contient au moins un bug.

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    pourkoi ne teste tu pas chaque DBedit pour controler toi même les entrées dans l'evenement beforepost et pour chaque du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if if trim(DBedit.text)='' then
     begin
      Dbedit.clear;//je ne sais pas si ça existe avec les DBedit
      DBedit.setfocus;
     end;
    Tu fais ainsi pour chaque DBedit;
    Enfin, c'est ainsi que je procède pour controler mes Edit avant la validation ds un prog normal de delphi.Je n'ai pas encore essayer avec les DBedit;alors tiens moi informé.


    [Balise code ajoutée par King Kaiser]

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    j'oubliais, pour eviter que les test sur les DBedit continuent et qu'il n'affiche seulement l'erreur sur le dernier test,ajoute exit après Dbedit1.setfocus;
    finalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if trim(DBedit.text)='' then 
    begin 
     Dbedit.clear;//je ne sais pas si ça existe avec les DBedit 
     DBedit.setfocus; 
     exit; 
    end;

    [Balise code ajoutée par King Kaiser]

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Points : 59
    Points
    59
    Par défaut
    Moi si. J'ai déjà essayé et ça marche. Si je l'ai pas proposé, c'est tout simplement parce que je ne connais pas le nombre de DBEdit à contrôler et ça pourrait facilement devenir un peu gros au niveau du code.
    Dans tous les cas, l'idée reste la même optique que la solution que j'ai proposée, à savoir faire le contrôle au niveau des Edit plutot que de chercher le champ fautif.
    Moi j'avais rajouté un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if MonDBEdit.text='' then //insérer le traitement
    Le traitement chez moi consistait à afficher une boite de dialogue puis à redonner le focus au DBEdit correspondant, mais je n'avais que deux ou trois DBEdit à contrôler…

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    j'ai ajouté trim pour éviter que l'utilisateur "flatte" la programme en appuyant la touche espace dans le champ.Or l'espace, ca donné l'impression qu'on a rien saisi.
    Maintenant si tu veux voilà un code quelque soit le nbre de DBedit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure test(Dbedit:TDbedit);
    if trim((sender as Dbedit).text='') then
     begin
      (sender as Dbedit).clear;
      (sender as Dbedit).setfocus;
      exit
     end;
    ds l'evenement beforepost

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i:=0 to form1.componentcount-1
     if form1.componentcount[i] is TDbedit then
     test(form1.componentcount[i]);
    enfin c'est ce que je pense.J'espère que ça t'aidera.Il se peut qu'il yest des erreurs.j'ai pas testé mais c'est le principe.


    [Balise code ajoutée par King Kaiser]

  11. #11
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Premièrement merci pour toutes vos réponses, mais je dois une fois de plus m'exprimer autrement.
    Si vous avez remarqué lors d'une saisie sans écrire une ligne de code l'exception de Delphi lors d'un champs obligatoire omis
    "Le champs "Nom_Champs" Doit avoir une valeur"
    je veux gérer cette exception en sachant le champs qui a été omis sans a avoir à ce préocuper en premier lieu du composant ou l'on fait la saisie : mon but par là c'est de faire une fonction généralisé qui gère ce type d'exception ensuite l'employer à un repositionnement du curseur.
    Les solutions type if DBEdit ou if DBGrid ou autre qui se préoccupe des composants font perdre de la souplesse offerte à l'utilisateur.
    Merci à tous. Et si je trouve la solution à mon problème je vous ferait part evidemment.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Salut,

    la solution à ton problème est de gérer l'événemnt OnPostError de ton ensemble de donnée.
    Le repositionnement sur le controle est automatique (dans les sources Delphi (DB.pas) tu as la méthode FocusControl sur TField qui a généré une erreur.
    N'oublie de gérer la variable Action de type TDataAction qui indique ce qui se passe à la fin de la gestion de l'événement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Action := dafail; // Abandonne et affiche un message d'erreur standard.
     Action := daAbort; // Abandonnne et reste silencieux. C'est toi qui gère ton propre message d'erreur.
     Action := daRetry; // Essaye de reposter l'élément, sachant que tu auras corriger l'erreur dans la gestion de l'événement.

  13. #13
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Merci c'est une solution rafinée à mon problème c'est juste là ou je cherchait merci merci infiniment.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Salut,
    alors indique que ton problème est résolu avec le flag [Résolu].

    Content d'avoir pu t'aider.

  15. #15
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    salut
    ici je vai donner une petit idée pour éliminer le premier espace dans un edit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm.editonkeypressed(sender,key:char);
    begin
        if (key<=32 ) and (length(edit.text)=0) then key:=0;
    end;
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  16. #16
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Merci pour toutes vos réponses..
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rendre champ obligatoire après un test IF
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 22/01/2006, 19h28
  2. controle d'un champs obligatoirement un chiffre
    Par oceane751 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 06/01/2006, 15h05
  3. Réponses: 5
    Dernier message: 25/10/2005, 16h05
  4. Champs obligatoires dans un formulaire
    Par glloq8 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/09/2005, 16h24
  5. Test si champs obligatoires remplis
    Par michaelbob dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/09/2005, 14h20

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