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 :

Problème avec OnValidate


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut Problème avec OnValidate
    Bonjour

    J'ai écris une exception dans le OnValidate d'un champ d'une table de données mais en faisant une compilation pas à pas je m'aperçois que ce bout de programme n'est jamais appelé ! que peut-être l'erreur ?
    Composant ADO
    BD Access
    Delphi 7


    Merci par avance

  2. #2
    Membre éclairé Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Par défaut
    Salut Just,
    il serait préférable d'utiliser le onchange, car si j'ai bien compris l'exception se déclenche lors des changements de valeur.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Bonjour ,

    J'ai souvent utilisé le OnValidate avec succès , très pratique .
    Bien sur celui ci n'est appelé que lors d'un Post . C'est peut-être ça le hic ?

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour ,

    J'ai souvent utilisé le OnValidate avec succès , très pratique .
    Bien sur celui ci n'est appelé que lors d'un Post . C'est peut-être ça le hic ?
    Très logique et c'est ce qui m'étonne de plus en plus, je fais un F5 sur le post mais jamais le code du OnValidate du champ en question n'est évoqué, j'ai compilé en pas à pas pour voir mais rien, il l'ignore comme s'il n'existait pas !

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    Étonnant !
    une option manquante/mise quelque part dans tes composants peut-être ?
    Difficile de pouvoir le dire en n'ayant que du théorique. Le cas ne m'est jamais arrivé donc je n'ai pas de piste a proposer.

    Quand j'ai un problème de ce genre je refais un petit programme test utilisant juste la fonction a tester . Je pose les composants avec leur valeurs par défauts et ensuite le debug pour tracer tout ca . Evidemment généralement ca fonctionne alors la suite logique est de détecter la différence (pourtant évidente mais que l'on a pas vue )

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par liazidf Voir le message
    Salut Just,
    il serait préférable d'utiliser le onchange, car si j'ai bien compris l'exception se déclenche lors des changements de valeur.
    Merci mais ce n'est pas ce que je cherche.

  7. #7
    Membre très actif Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Bonjour

    J'ai écris une exception dans le OnValidate d'un champ d'une table de données mais en faisant une compilation pas à pas je m'aperçois que ce bout de programme n'est jamais appelé ! que peut-être l'erreur ?
    Composant ADO
    BD Access
    Delphi 7


    Merci par avance
    Et quel est le code que vous avez écrit ?

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Bonjour

    un code très simple dont voici un exemple sur le champ nom_prenom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TDModuleAdo.TClientsNom_PrenomValidate(Sender: TField);
    begin
      if (TClientsNom_Prenom.Value = '') then
        raise Exception.CreateFmt('Champ à renseigner obligatoirement de l''enregistrement %d', [TClients.RecNo]);
    end;

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    j'aurais plutôt mis Sender.value , le dataset n'est pas encore modifié , puisque on teste AVANT sa modification (c'est du moins comme cela que je l'entend) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TDModuleAdo.TClientsNom_PrenomValidate(Sender: TField);
    begin
      if (sender.Value = '') then
        raise Exception.CreateFmt('Champ à renseigner obligatoirement de l''enregistrement %d', [TClients.RecNo]);
    end;
    Edit . PS , j'aurais aussi plutôt mis un asString que value ou un isNull . Un Trim également pour éviter des Espaces malins

  10. #10
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    j'aurais plutôt mis Sender.value , le dataset n'est pas encore modifié , puisque on teste AVANT sa modification (c'est du moins comme cela que je l'entend) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TDModuleAdo.TClientsNom_PrenomValidate(Sender: TField);
    begin
      if (sender.Value = '') then
        raise Exception.CreateFmt('Champ à renseigner obligatoirement de l''enregistrement %d', [TClients.RecNo]);
    end;
    Edit . PS , j'aurais aussi plutôt mis un asString que value ou un isNull . Un Trim également pour éviter des Espaces malins
    C'était mon 1er essai et ça n'a rien donné. Je viens de tester avec isNull mais rien aussi.

    En complément, j'ajoute le code qui devrait, normalement, provoquer l'appel à OnValidate

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TfrmClient.bValiderClick(Sender: TObject);
    begin
      try
        dbDate_debut.Visible := True;
        DateTimePicker1.Visible := False;
        etat_groupe_boutton(True);
     
        // date
        DModuleAdo.TAbonnementsdebut_abn.Value := DateTimePicker1.DateTime;
     
        // code
        DModuleAdo.TAbonnementsCode_client.Value := DModuleAdo.enr_cours + 1;
     
        // type abonnement
        case DModuleAdo.TTypescode_type_abn.Value of
          1 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 30;   // mensuel
          2 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 91;   // trimestriel
          3 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 182;  // semestriel
          4 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 365;  // annuel
        end;
     
        // état de l'abonnement
        if ((DModuleAdo.TAbonnementsdebut_abn.Value >= now) and (now < DModuleAdo.TAbonnementsfin_abn.Value)) then
          DModuleAdo.TClientsActive.Value := True
        else DModuleAdo.TClientsActive.Value := False;
        DModuleAdo.TClients.Post; // c'est là où le code devrait être évoquer mais rien ne se passe !!
     
      Except
        ShowMessage('Problème lors de la sauvegarde de l''enregistrement');
      end;
      etat_groupe_boutton(True);
    end;

  11. #11
    Membre très actif Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    En complément, j'ajoute le code qui devrait, normalement, provoquer l'appel à OnValidate

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TfrmClient.bValiderClick(Sender: TObject);
    begin
      try
        dbDate_debut.Visible := True;
        DateTimePicker1.Visible := False;
        etat_groupe_boutton(True);
     
        // date
        DModuleAdo.TAbonnementsdebut_abn.Value := DateTimePicker1.DateTime;
     
        // code
        DModuleAdo.TAbonnementsCode_client.Value := DModuleAdo.enr_cours + 1;
     
        // type abonnement
        case DModuleAdo.TTypescode_type_abn.Value of
          1 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 30;   // mensuel
          2 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 91;   // trimestriel
          3 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 182;  // semestriel
          4 : DModuleAdo.TAbonnementsfin_abn.Value := DateTimePicker1.DateTime + 365;  // annuel
        end;
     
        // état de l'abonnement
        if ((DModuleAdo.TAbonnementsdebut_abn.Value >= now) and (now < DModuleAdo.TAbonnementsfin_abn.Value)) then
          DModuleAdo.TClientsActive.Value := True
        else DModuleAdo.TClientsActive.Value := False;
        DModuleAdo.TClients.Post; // c'est là où le code devrait être évoquer mais rien ne se passe !!
     
      Except
        ShowMessage('Problème lors de la sauvegarde de l''enregistrement');
      end;
      etat_groupe_boutton(True);
    end;
    Je ne vois pas ou le champ Nom/Prenom est modifié dans ton code ?

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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