Re re bonjour,
Vous l'aurez remarqué, je cherche encore mes marques dans 4D.
Ceci dit, j'oserai dire que j'ai une certaine expérience en développement, allant de C++, Objective C, en passant par feu HyperCard, MS Access, et aujourd'hui php et le framework de Zend et mysql, Sql Server, etc.
Bref, il me manque encore quelque chose, et j'ai peur de réinventer la roue dans 4D. Je dois faire une évolution sur une base 4D développée à l'origine par un non informaticien grand spécialiste du copier/coller à grande échelle, et qui a fait entre autre des tables avec des centaines de colonnes. Un truc de fou. Les colonnes sont numérotées, mais elles n'ont pas toujours été créées dans l'ordre, il y a eu des évolutions et donc la numérotation utilisée dans les noms de colonne ne suit pas la numérotation interne à 4D.
Je dois parcourir ces colonnes en construisant leur nom et récupérer les valeurs correspondantes à partir de ce nom.
N'ayant pas trouvé mon bonheur dans les fonctions natives de 4D, j'ai donc écrit une méthode de base qu'on appelle comme ceci :
$valeur:=Valeur Champ Nommé (->[UneTable];$nomColonne)
Voici le code de Valeur Champ Nommé :
C'est testé et approuvé, (par moi-même
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 /* Méthode : Valeur Champ Nommé ` Renvoie la valeur dans l'enregistrement courant d'un champs défini par son nom et le pointeur de la table ` ` Paramètres : ` - $1 : pointeur vers la table ` - $2 : nom du champ (alpha) ` - $3 : valeur par défaut si le champ n'existe pas dans la table ` Valeur retournée : valeur du champ; son type dépend du type du champ */ C_POINTEUR($1) C_ALPHA(31;$2) $0:=$3 /* valeur par défaut si on ne trouve pas le champ */ $nbreColonnes:=Nombre de champs($1) $numeroTable:=Table($1) Boucle ($noCol;1;$nbreColonnes) $nomChamp:=Nom du champ($numeroTable;$noCol) Si ($nomChamp=$2) $pointeurChamp:=Champ($numeroTable;$noCol) $0:=$pointeurChamp-> $noCol:=$nbreColonnes+1 /* sortie de boucle - pas de break dans 4D ? beark :( */ Fin de si Fin de boucle), mais y-a-t-il une fonction native à 4D qui fasse cela ?
(Ou des suggestions pour le faire de façon plus efficace sans parcourir la liste des colonnes ? Je rappelle que j'ai affaire à des tables qui ont plus de 400 champs !)
Merci encore d'avance pour toute suggestion,
Marc
PS : dans l'exemple de code ci-dessus, j'ai mis des commentaires à la C à cause de la balise code du forum qui ne connaît pas vraiment la syntaxe de 4D !![]()
Partager