OVH Cloud OVH Cloud

pb de valeur de retour dans une methode de classe

2 réponses
Avatar
steph
bonjour,
j'ai un pb que je n'ai pas reussi à résoudre.
J'ai crée une classe avec des méthodes dont certaines renvoient des valeurs.
Ce parametrage a été fait sur le diagramme UML que j'ai généré ensuite.
Au niveau de la syntaxe générée, pas de pb mais à un moment (donc pas
forcement au début) quand j'appel la méthode qui doit retourner une valeur,
il m'affiche un message d'erreur du type " cette procedure aurait du
renvoyer une valeur". Ce n'est pas, à priori un pb dans le code puisqu'il
fonctionnait à un moment donné! j'ai eu beau compiler, cela ne change rien.
J'ai l'impression qu'il y a de nombreux pb avec la programmation objet.
Pour info voila le code de ma méthode et si vous regardez bien, dans tous
les cas elle renvoie une valeur (bReponse) donc il n'y a pas de raison
!!!!!!
FONCTION Identifier ( cLogin est un chaîne , cMdp est un chaîne )

bReponse est un booléen=Faux

// - regarde si le login existe

HLitRecherchePremier(TblUtilisateur,Login,cLogin)

SI HTrouve(TblUtilisateur) ALORS

:m_IdLogué=TblUtilisateur.IDLogué

: m_Login=TblUtilisateur.Login

:m_Mdp=TblUtilisateur.Mdp

:m_Statut=TblUtilisateur.Statut

:m_Connecté=TblUtilisateur.Connecte

:m_HNumEnr=HNumEnr(TblUtilisateur)

//si l'utilisateur est déjà connecté sur un autre poste

SI :m_Connecté=Vrai ALORS

Info("L'utilisateur est déjà connecté sur un autre
poste!, veuillez vous déloguer de cet autre poste.","Si le problème
persiste, veuillez faire appel à l'administrateur de l'application")

FenetreLogin.txtLogin=""

FenetreLogin.txtMdp=""

EcranPremier(FenetreLogin.txtLogin)


SINON // vérification du mot de passe

SI cMdp<>:m_Mdp ALORS// si le mot de
passe est erroné

Info("Le mot de passe saisi est
erroné")

FenetreLogin.txtMdp=""

EcranPremier(FenetreLogin.txtMdp)

SINON // si la connection est ok on le
note comme étant connecté

TblUtilisateur.Connecte=Vrai

HModifie(TblUtilisateur,hNumEnrEnCours)

bReponse=Vrai

FIN

FIN

SINON

Info("L'utilisateur n'a pas été reconnu (mauvais login)!")

FenetreLogin.txtLogin=""

FenetreLogin.txtMdp=""

EcranPremier(FenetreLogin.txtLogin)

bReponse=Faux

FIN

RENVOYER bReponse

Voila le code qui appel cette méthode et qui plante (qui se déclenche en
cliquant sur un bouton)
SI ClsMonLogué:Identifier(txtLogin,txtMdp) ALORS

clsMonLogué étant une instance de la classe en question.

Merci beaucoup d'avance pour ceux qui m'apporteront leur aide.

2 réponses

Avatar
Marcel.berman
Salut !



On 12-Sep-2005, "steph" wrote:

bonjour,
j'ai un pb que je n'ai pas reussi à résoudre.
J'ai crée une classe avec des méthodes dont certaines renvoient des
valeurs.
Ce parametrage a été fait sur le diagramme UML que j'ai généré ensuite.
Au niveau de la syntaxe générée, pas de pb mais à un moment (donc pas
forcement au début) quand j'appel la méthode qui doit retourner une
valeur,
il m'affiche un message d'erreur du type " cette procedure aurait du
renvoyer une valeur". Ce n'est pas, à priori un pb dans le code puisqu'il
fonctionnait à un moment donné! j'ai eu beau compiler, cela ne change
rien.
J'ai l'impression qu'il y a de nombreux pb avec la programmation objet.
Pour info voila le code de ma méthode et si vous regardez bien, dans tous

les cas elle renvoie une valeur (bReponse) donc il n'y a pas de raison
!!!!!!
FONCTION Identifier ( cLogin est un chaîne , cMdp est un chaîne )

bReponse est un booléenúux

// - regarde si le login existe

HLitRecherchePremier(TblUtilisateur,Login,cLogin)

SI HTrouve(TblUtilisateur) ALORS

:m_IdLogué=TblUtilisateur.IDLogué

: m_Login=TblUtilisateur.Login

:m_Mdp=TblUtilisateur.Mdp

:m_Statut=TblUtilisateur.Statut

:m_Connecté=TblUtilisateur.Connecte

:m_HNumEnr=HNumEnr(TblUtilisateur)

//si l'utilisateur est déjà connecté sur un autre poste

SI :m_Connecté=Vrai ALORS

Info("L'utilisateur est déjà connecté sur un autre

poste!, veuillez vous déloguer de cet autre poste.","Si le problème
persiste, veuillez faire appel à l'administrateur de l'application")

FenetreLogin.txtLogin=""

FenetreLogin.txtMdp=""

EcranPremier(FenetreLogin.txtLogin)


SINON // vérification du mot de passe

SI cMdp<>:m_Mdp ALORS// si le mot de
passe est erroné

Info("Le mot de passe saisi
est
erroné")

FenetreLogin.txtMdp=""


EcranPremier(FenetreLogin.txtMdp)

SINON // si la connection est ok on le

note comme étant connecté

TblUtilisateur.Connecte=Vrai


HModifie(TblUtilisateur,hNumEnrEnCours)

bReponse=Vrai

FIN

FIN

SINON

Info("L'utilisateur n'a pas été reconnu (mauvais login)!")

FenetreLogin.txtLogin=""

FenetreLogin.txtMdp=""

EcranPremier(FenetreLogin.txtLogin)

bReponseúux

FIN

RENVOYER bReponse

Voila le code qui appel cette méthode et qui plante (qui se déclenche en
cliquant sur un bouton)
SI ClsMonLogué:Identifier(txtLogin,txtMdp) ALORS

clsMonLogué étant une instance de la classe en question.

Merci beaucoup d'avance pour ceux qui m'apporteront leur aide.





J'ai bien lu ... mais je pense que chaque fois que tu utilises
EcranPremier(), le code qui suit cette fonction n'est pas exécuté ...
Autrement dit, tu ne renvoies pas de valeur de retour ...
En esopérant t'avoir aidé ...


--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Avatar
mat
wrote:
J'ai bien lu ... mais je pense que chaque fois que tu utilises
EcranPremier(), le code qui suit cette fonction n'est pas exécuté ...
Autrement dit, tu ne renvoies pas de valeur de retour ...
En esopérant t'avoir aidé ...






Bonjour,

je n'ai pas compris la fonction de cette façon et n'ai jamais rencontré
ce type de comportement. Mais effectivement, l'aide dit que les
traitement de sortie et d'entrée sont exécutés immédiatement. Cela peut
en effet provoquer un arret de traitement si elles incluent
RepriseSaisie, par exemple. Un test rapide confirme que la procédure
d'entrée du nouveau champ est exécuté avant tout autre code suivant
EcranPremier. Lisant la partie sous-ligné de l'aide je pensais toujours
que ces procédures ne s'exécutent qu'une fois le code en cours
s'arrêtera...

Salutations
mat

Extrait de l'aide :

EcranPremier et RepriseSaisie

Ces deux fonctions ont un comportement très différent :

La fonction RepriseSaisie arrête le traitement en cours pour forcer la
reprise de la saisie dans le champ indiqué.

La fonction EcranPremier décrit quel sera le prochain champ ayant la
saisie (lorsque le code en cours s'arrêtera et que la saisie reprendra).
=========================================================================