Erreur syntaxe pointeur

Bonjour,

j’ai une erreur “Je n’attendais pas une constante de type.”
[]24875042;“Your comment here…”[/]

le contexte: dans une appli web, je recupere les valeurs d’un formulaire,
a partir du nom de l’input du formulaire, je recupere un pointeur sur le champ associe
(avec une simple table de correspondance nom_input <==> pointeur champ fabriquee prealablement)

<code 4D>

		Au cas ou 
				
			: ($pointeur_champ=->[SousTraitance]commande_montant) // pas d'erreur
				
		
			: ($pointeur_champ=->[SousTraitance]bdc_detail) // erreur syntaxe
				
			
				
				
		Fin de cas 

</code 4D>

Est-ce que j’utilise mal la syntaxe pointeur ?

Bonjour

Je ne sais pas si c’est une bonne idee de comparer des pointeurs. A ta place j’utiliserais “RESOUDRE POINTEUR” et je comparerais les numeros de table et de champ

Pour ma culture personnelle, c’est la repetition de la comparaison de pointeur dans le “au cas ou” que tu veux eviter avec un resoudre pointeur c’est ca ?

parce que s’il faut le faire a chaque fois pour chaque cas si c’est des pointeurs differents, je ne vois pas ce que cela va apporter ?

Un resoudre pointeur est-il plus rapide que de faire le test en direct ?

http://doc.4d.com/4Dv16R6/4D/16-R6/Conseils-doptimisation.300-3548409.fr.htmlL’exemple d’optimisation de la doc> fait reference a l’utilisation d’un pointeur depointe dans un cas ou.

Quand est-il d’un test avec une variable pointeur ?

Non, c’est juste l’impression (fondee sur des experiences passees ? je ne me souviens plus) que comparer des pointeurs, ce n’est pas propre. je ne sais pas si le “=” signifie bien “pointe vers le meme champ”. Resoudre le pointeur une fois et ensuite comparer des numeros de tables et de champs, au moins, on est sur un terrain solide, on sait ce qu’on compare.

l’idee est que j’ai 50 inputs dans mon formulaire

j’ai donc ecrit du code generique
le code boucle sur tous les inputs du formulaire
j’ai cree une petite convention d’ecriture pour savoir si l’input est associe a un champ
(si le nom de l’input commence par underscore alors il est lie a un champ)
si oui je retrouve le pointeur sur le champ en fonction du nom
et je met a jour mon champ

ce code fonctionne bien et m’evite de faire 50 tests du genre
si ($nom_input=“prenom”)
[table]prenom = $valeur_input
fin de si
si ($nom_input=“ville”)
[table]ville = $valeur_input
fin de si

SAUF QUE
pour certains champs je dois faire un traitement specifique avant de les stocker en base,
raison pour laquelle j’ai un “au cas ou” avec mes comparaisons de pointeur

en effet tu as raison , si je dois tester 45 champs sur les 50 (ce qui n’est pas le cas ici) alors ca n’a plus d’interet

(mon Dieu que je deteste le developpement web, tout est tellement plus simple avec du “vrai 4D”)

Oui, sauf que cela me parait “old school” que de devoir toujours(encore) travailler avec des N�� pour les tables et les champs, c’est encore plus le cas maintenant avec ORDA… :roll:

ou alors pour rester sur du code 100% generique je derive un nom de methode a partir du nom de l’input et j’utilise la commande EXECUTER METHODE

<code 4D>

$nom_methode:=NomMethode($nom_input)

APPELER SUR ERREUR(“execmeth”)
EXECUTER METHODE($nom_methode)
APPELER SUR ERREUR("")

</code 4D>

oui ? non ?

Mes reponses etaient destinees a Olivier :wink:

Pour ton cas: comment tu construis ton pointeur ?

Pour le coup, comme tu te bases deja sur une nomenclature qui t’est propre, un simple au cas ou avec des tests successifs sur le nom de ton input devrait suffire non??
Dans ce cas, pas de pointeur puisque tu geres effectivement le rapprochement toi-meme entre tes inputs et ta structure.

J’entends ca de plus en plus souvent, j’avoue :slight_smile:

Mais je garde un faible pour le “old school” pas complique pas cher qui marche…

: Olivier DRUT

Mais je garde un faible pour le “old school” pas complique pas cher
qui marche…

http://forums.4d.com/Post/FR/15332300/0/0/J’aimais pas ca deja avant> mais alors maintenant qu’on se lance dans l’ORDA, le “O” m’interpelle de plus en plus, et je supporte de moins en moins les complications de la rigidite de l’ancien fonctionnement par N�� (comme quoi les ressentis ne sont pas les memes) :wink:

et ca :

<code 4D>
Au cas ou

:($pointeur_champ=(->[SousTraitance]commande_montant))

:($pointeur_champ=(->[SousTraitance]bdc_detail))

Fin de cas
</code 4D>

ca marche, je n’ai plus d’erreur avec cette syntaxe

merci Bertrand !

: Olivier DRUT

je ne sais pas si le “=” signifie bien “pointe vers le meme champ”.
http://doc.4d.com/4Dv16R6/4D/16-R6/Operateurs-de-comparaison.300-3547760.fr.htmlD’apres la doc 4D ca semble bien etre le cas.>
NB: il faut aller chercher l’explication dans le commentaire de l’exemple…

Je compare frequemment des pointeurs avec des tables ou des champs. Il faut simplement comme Bertrand l’a dit parentheser a droite du “egal” (jamais compris pourquoi, mais quand je vois la syntaxe qu’il faut adopter avec objet lire pointeur, je cherche plus.)