PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Remplissage dynamiquement d'une table par programmation
Remplissage dynamiquement d'une table par programmation
Débuté par BGael, 20 nov. 2019 09:42 - 8 réponses
Membre enregistré
1 message
Posté le 20 novembre 2019 - 09:42
Bonjour tout le monde.

J'aimerai savoir s'il n'est pas possible d'utiliser une fonction plus adaptée que TableAjouteLigne pour le cas d'une table à plusieurs colonnes (dont on connait pas les noms et le nombre colonnes au préalable). Quelque chose du genre

TANTQUE PAS HEnDehors(Source)
table.COL1=Source.champ1
table.COL2=Source.champ2
...
TableAjouteLigne(table)
HLitSuivant(Source)
FIN


--
BKG
Message modifié, 20 novembre 2019 - 09:42
Posté le 20 novembre 2019 - 09:52
sRow = Product.Reference + TAB + Product.ProdCap + TAB + Product.Price
TableAdd(TABLE_Products, sRow)
Membre enregistré
3 messages
Posté le 20 novembre 2019 - 09:59
Bonjour,

Je pense que le mieux c'est d'utiliser TableAjouteLigne mais d'une autre façon, si par exemple vous ne connaissez pas vos colonnes à l'avance vous pouvez jouer sur l'indirection pour régler ce problème

nIndice est un entier
nIndiceColonne est un entier
UneColonne est un Champ

TANTQUE PAS HEnDehors(Source)
nIndiceColonne = 0
nIndice = TableAjouteLigne(TABLE)
SI nIndice <> -1 ALORS
POUR nColonne = 1 _A_ TableOccurrence(TABLE,toColonne)
nIndiceColonne++
UneColonne <- TableEnumèreColonne(TABLE, nColonne)
{TABLE..Nom + "[" + nIndice + "]" + "." + UneColonne..Nom,indChamp} = {Source..Nom + "." + "champ" + nIndiceColonne,indRubrique}
FIN
FIN
HLitSuivant(Source)
FIN


--
Cordialement, Corentin Domanski.
Message modifié, 20 novembre 2019 - 10:02
Membre enregistré
3 845 messages
Popularité : +227 (347 votes)
Posté le 20 novembre 2019 - 10:14
Bonjour,
TableAjoute fait aussi très bien le boulot dans ce cas

sContenuLigne est chaîne

sContenuLigne=ContenuCol1+TAB+ContenuCol2+TAB+.....+ContenuColn

TableAjoute(TABLE_TableARemplir,sContenuLigne)


--
Il y a peut être plus simple, mais, ça tourne
Membre enregistré
352 messages
Popularité : +12 (18 votes)
Posté le 20 novembre 2019 - 11:03
Bonjour.
Le soucis de la fonction TaleAjoute, c'est lorsqu'une donnée contient déjà le caractère de tabulation, qui provoque un décalage dans les colonnes (déjà vécu).
Une autre façon de procéder serait en faisant un binding sur une variable globale, de type tableau d'objets d'une classe à définir au niveau du projet. L'avantage en procédant ainsi, plus besoin de se soucier dans l'ordre des colonnes, le wlangage sait le gérer.
Membre enregistré
3 messages
Posté le 20 novembre 2019 - 12:03
ROMULUS001 a écrit :
Bonjour.
Le soucis de la fonction TaleAjoute, c'est lorsqu'une donnée contient déjà le caractère de tabulation, qui provoque un décalage dans les colonnes (déjà vécu).
Une autre façon de procéder serait en faisant un binding sur une variable globale, de type tableau d'objets d'une classe à définir au niveau du projet. L'avantage en procédant ainsi, plus besoin de se soucier dans l'ordre des colonnes, le wlangage sait le gérer.


Le TableAjoute() a aussi le défaut d'être moins lisible en terme de lecture de code et moins maintenable si les colonnes évoluent avec le temps. En revanche c'est beaucoup plus court à écrire que mon exemple c'est indéniable.

--
Cordialement, Corentin Domanski.
Membre enregistré
352 messages
Popularité : +12 (18 votes)
Posté le 20 novembre 2019 - 14:10
Il y a une variante dans l'utilisation de TableAjoute / TableAjouteLigne qui peut être utilisée, personnellement, je n'aime pas m'en servir mais elle marche très bien :
TableAjoute(TABLE_MaTable) // ou TableAjouteLigne(TABLE_MaTable)
TableAjoute .COL_Col1[TableAjoute ..Occurrence]="valeur 1"
TableAjoute .COL_Col2[TableAjoute ..Occurrence]="valeur 2"
...
Posté le 20 novembre 2019 - 14:38
Bonjour,

Il y a aussi ConstruitTableFichier qui marche bien (https://doc.pcsoft.fr/?3074002&lang=fr-FR&productversion=xxF240077f)
Membre enregistré
3 messages
Posté le 20 novembre 2019 - 14:51
ROMULUS001 a écrit :
Il y a une variante dans l'utilisation de TableAjoute / TableAjouteLigne qui peut être utilisée, personnellement, je n'aime pas m'en servir mais elle marche très bien :
TableAjoute(TABLE_MaTable) // ou TableAjouteLigne(TABLE_MaTable)
TableAjoute .COL_Col1[TableAjoute ..Occurrence]="valeur 1"
TableAjoute .COL_Col2[TableAjoute ..Occurrence]="valeur 2"
...

Je ne connaissais pas cette syntaxe là ! Le plus souvent je passe par un entier qui contient l'indice de ma ligne ajoutée, concrètement c'est exactement pareil.

--
Cordialement, Corentin Domanski.