passage de paramètre de champ

Posté par john le 8/8/2007 10:58:48
Bonjour,

Voici mon problème, j'aimerais passer des champs en paramètres à mes procédures, comme pour les procédure WinDev natives.
C'est à dire que je veux pouvoir la passer avec ou sans guillemets.

Si vous avez déjà résolu ce problème, où si une solution existe dans une version supérieure à WinDev 9, je suis intéressé.

Voici un début de code qui me permet d'avoir le nom du champ dans la variable s_Zone à la fin, il n'est pas encore parfais, car des cas tordus peuvent faire que cela ne marche pas.


PROCEDURE maProcedure(x_nomChamp)

s_Zone est une chaîne

//// si le paramètre n'est pas une chaine, alors c'est forcement un champ de type numérique
SI TypeVar(x_nomChamp)<>wlChaîne ALORS
s_Zone=x_nomChamp..Nom

SINON // si c'est un champ de type chaine, ou bien un chaine qui contient le nom du champ (dont le type reste indéterminé)
SI Taille(x_nomChamp)=0 ALORS
// c'est un champ texte qui ne contient rien
// ça pourrait être aussi une chaine de caractère vide, mais c'est quasi impossible,
// car le paramètre est obligatoire, et cela fesait planter l'utilsation d'une indirection
s_Zone=x_nomChamp..Nom
SINON
//// c'est un champ texte qui contient qq chose
// on suppose que le contenu du champ texte, ne peut pas être un nom de champ qui existe
// sinon si ce champ existe et est vide, cela va faire un faux positif


// si le valeur de x_nomChamp n'est pas un champ qui existe, alors x_nomChamp doit être un champ texte
// ce champ texte qui contient qq chose => il ne faut rien faire sauf s'il s'agit d'une date fausse
SI Occurrence(x_nomChamp)=0 ALORS
s_Zone=x_nomChamp..Nom
SINON
// sinon il s'agit d'une chaine qui contient le nom du champ => il faut tester la valeur du champ
// ou bien cela peut être un champ texte, qui a pour valeur le nom d'un champ (cas tordu et quasi-impossible)
s_Zone=x_nomChamp
FIN
FIN
FIN

Trace(TypeVar(x_nomChamp),s_Zone)

Cette contribution était de : http://old.wdforge.org/newbb/viewtopic.php?forum=14&topic_id=5321&post_id=21970