PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WEBDEV 2024 → Comportement bizarre param passé =E
Comportement bizarre param passé =E
Iniciado por Eric R., jan., 30 2005 8:31 PM - 4 respostas
Publicado em janeiro, 30 2005 - 8:31 PM
Bjr,

Vraiment bizarre.
J'ai une proc locale qui reçoit un param pPapa.

Ce param pPapa sert à composer une req SQL et en fin de proc à
initialiser un champs écran
curPere=pPapa

Comme cela ne fonctionnait pas; je me suis mis en debug.
Pour constater que mon pPapa subissait des modifs (remise à null, puis
init par une autre valeur) sans qu'il soit touché par un quelconque
code.

Pire un ZoneRepéteeSupprimeTout(ZRFils) d'une zone répétée (qui n'avait
rien à voir) provoquait sa mise à blanc.

Comme s'il y avait un melange d'adresse mémoire de zones ???

En passant par une variable locale
maProc(pPapa)
wPapa est un entier
wPapa=pPapa

cela fonctionne comme attendu. C'est vrai que je ne travaille que
rarement directement avec la variable passée en paramètre, mais la
plupart du temps avec une var loc initiée avec le dit param.

Je vais donc systématiser cela.

Avez vous déja rencontré ce genre de dysfonctionnement ??? et avez vous
une explication ?

--
Eric
Webmaster des Wtablettes
www.wtablettes.net
Publicado em fevereiro, 01 2005 - 10:52 AM
Eric R a formulé :
Bjr,

Vraiment bizarre.
J'ai une proc locale qui reçoit un param pPapa.

Ce param pPapa sert à composer une req SQL et en fin de proc à
initialiser un champs écran
curPere=pPapa

Comme cela ne fonctionnait pas; je me suis mis en debug.
Pour constater que mon pPapa subissait des modifs (remise à null, puis
init par une autre valeur) sans qu'il soit touché par un quelconque
code.

Pire un ZoneRepéteeSupprimeTout(ZRFils) d'une zone répétée (qui n'avait
rien à voir) provoquait sa mise à blanc.

Comme s'il y avait un melange d'adresse mémoire de zones ???

En passant par une variable locale
maProc(pPapa)
wPapa est un entier
wPapa=pPapa

cela fonctionne comme attendu. C'est vrai que je ne travaille que
rarement directement avec la variable passée en paramètre, mais la
plupart du temps avec une var loc initiée avec le dit param.

Je vais donc systématiser cela.

Avez vous déja rencontré ce genre de dysfonctionnement ??? et avez vous
une explication ?

--
Eric
Webmaster des Wtablettes
www.wtablettes.net


Salut Eric,

j'ai remarqué hier un comportement semblable mais dont je me suis expliqué
simplement la cause.
En fait, il faut se méfier : un paramètre passé à une procédure est du type
variant donc si on passe 1 par ex. on a Vrai, 0 = Faux .....
En utilisant une variable locale déclarée, ça résoud le problème
normalement.

Par contre, je n'avais pas remarqué de souci tel que tu le décris.... je
vais faire gaffe !

A+

Olivier
Publicado em fevereiro, 01 2005 - 11:07 AM
Olivier Priser a exprimé avec précision :

Eric R a formulé :
Bjr,

Vraiment bizarre.
J'ai une proc locale qui reçoit un param pPapa.

Ce param pPapa sert à composer une req SQL et en fin de proc à
initialiser un champs écran
curPere=pPapa

Comme cela ne fonctionnait pas; je me suis mis en debug.
Pour constater que mon pPapa subissait des modifs (remise à null, puis
init par une autre valeur) sans qu'il soit touché par un quelconque
code.

Pire un ZoneRepéteeSupprimeTout(ZRFils) d'une zone répétée (qui n'avait
rien à voir) provoquait sa mise à blanc.

Comme s'il y avait un melange d'adresse mémoire de zones ???

En passant par une variable locale
maProc(pPapa)
wPapa est un entier
wPapa=pPapa

cela fonctionne comme attendu. C'est vrai que je ne travaille que
rarement directement avec la variable passée en paramètre, mais la
plupart du temps avec une var loc initiée avec le dit param.

Je vais donc systématiser cela.

Avez vous déja rencontré ce genre de dysfonctionnement ??? et avez vous
une explication ?

--
Eric
Webmaster des Wtablettes
www.wtablettes.net


Salut Eric,

j'ai remarqué hier un comportement semblable mais dont je me suis expliqué
simplement la cause.
En fait, il faut se méfier : un paramètre passé à une procédure est du type
variant donc si on passe 1 par ex. on a Vrai, 0 = Faux .....
En utilisant une variable locale déclarée, ça résoud le problème
normalement.

Par contre, je n'avais pas remarqué de souci tel que tu le décris.... je
vais faire gaffe !

A+

Olivier

Salut Olivier,

Peut être une piste car effectivement la première valeur passée est 0;
donc considéré comme un booléen.
mais que cela se modifie après, là c'est totalement inattendue,
certainement explicable mais je pense qu'il y a un bug là dessous.
La règle : Ne jamais utiliser un param sans repasser par une variable
locale.

--
Eric
Webmaster des Wtablettes
www.wtablettes.net
Publicado em fevereiro, 01 2005 - 3:32 PM
La règle : Ne jamais utiliser un param sans repasser par une variable
locale.


Ne pas oublier non plus que l'on peut typer les paramètres dans la
déclaration d'une procedure

PROCEDURE MaProcedure(pNom est une chaîne)

il faut alors faire attention que l'appel de la procedure soit dans le type
attendu sinon erreur compile !

un truc que je n'ai pas testé PROCEDURE MaProcedure(pNom="")
ça revient au même ?
--
Gilles Balp
http://cerbermail.com/…
(clic sur ce lien pour me contacter en privé)
Publicado em fevereiro, 01 2005 - 3:42 PM
Gilles Balp a écrit :
La règle : Ne jamais utiliser un param sans repasser par une variable
locale.

Ne pas oublier non plus que l'on peut typer les paramètres dans la
déclaration d'une procedure

PROCEDURE MaProcedure(pNom est une chaîne)

il faut alors faire attention que l'appel de la procedure soit dans le type
attendu sinon erreur compile !

un truc que je n'ai pas testé PROCEDURE MaProcedure(pNom="")
ça revient au même ?


c'est ce que je fais tout le temps. Mais dans le cas présent comme
c'est
PROCEDURE MaProcedure(pNum=0)
peut être est-ce typé comme un booléen

--
Eric
Webmaster des Wtablettes
www.wtablettes.net