PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Remplir un champ table a partir d'un fichier avec rubriques inconnues
Remplir un champ table a partir d'un fichier avec rubriques inconnues
Iniciado por j.lachaud, 19,mar. 2019 10:33 - 4 respuestas
Publicado el 19,marzo 2019 - 10:33
Bonjour,

Je cherche a mettre dans un champ table le résultat d'une requête ayant un nombre de colonnes aléatoire.

J'effectue un HExecuteRequeteSQL sur un fichier externe. Celui ci ne me renvoi pas toujours le même nombre de colonnes. J'utilise donc un TableConstruitFichier(MaRequête). Seulement cette fonction prend beaucoup de temps et peut mettre 30 seconde pour 100 lignes. Je cherche donc un moyen d'optimiser ma table.


Y a t-il un autre moyen de remplir un champ table a partir d'un fichier dont on ne connais pas le nombre de rubriques ?


Cordialement
Publicado el 19,marzo 2019 - 13:42
Bonjour,

Il y a une possibilité :

Soit une table TABLE_resultat avec une colonne COL_ancrage invisible.
Soit une source de données resultat qui contiendra le résultat de la requête SQL

// resultat est une Source de Données
// A mettre dans le code d'initialisation de la fenêtre, permet de manipuler en dehors de la procédure de remplissage de la table

Procedure lproc_maj_resultat_light( _sql est une chaîne )

i, iMax est un entier
sql est une chaîne
rubriques est un tableau de 0 chaînes
c est un Champ

// Nettoyage de la table résultat
TABLE_resultat..AffichageActif = Faux
TABLE_resultat..FichierParcouru = ""
iMax = TableOccurrence( TABLE_resultat, toColonne )
POUR i = iMax À 1 PAS -1
c <- TableEnumèreColonne( TABLE_resultat, i )
SI c..Nom <> COL_ancrage..Nom ALORS ChampSupprime( c..Nom )
FIN // POUR i = 1 A iMax

// Execution de la requête SQL
sql = RTFVersTexte( _sql )
SI HExécuteRequêteSQL( resultat, sql ) ALORS

HLitPremier( resultat )
SI PAS HEnDehors( resultat ) ALORS

ChaîneVersTableau( HListeRubrique( resultat ), rubriques )
POUR TOUTE Rubrique de Rubriques

c <- ChampCrée( TABLE_resultat..Nom + ".COL_" + Rubrique , typColonne )
c..Libellé = Rubrique
c..LiaisonFichier = resultat + "." + Rubrique
c..Visible = Vrai

FIN // POUR TOUTE rubrique de rubriques

TABLE_resultat..FichierParcouru = resultat
TableAffiche( TABLE_resultat, taInit )
TableAjuste( TABLE_resultat )

FIN // SI PAS HEnDehors( rs ) ALORS

FIN // SI HExécuteRequêteSQL( resultat, sql ) ALORS

TABLE_resultat..AffichageActif = Vrai


Le code crée par programmation les colonnes de la table et les lient avec les rubriques du résultat de la requête.
Miembro registrado
134 mensajes
Publicado el 19,marzo 2019 - 13:58
Bonjour,

Mon message a du se perdre, je reposte.

Le principe est de
- mettre une table TABLE_resultat avec une colonne invisible COL_Ancrage (on ne peut pas créer de table sans colonne...)
- créer par programmation les colonnes en fonctions de la source de données qui contient le résultat de la requête est de les lier avec les rubriques de cette source de données.

Donc en gros ça donne ça :
resultat est une Source dede Données // A mettre en variable globale à l'initialisation de la fenêtre pour pouvoir manipuler en dehors de la prcédure de remplissage


Procedure lproc_maj_resultat_light( _sql est une chaîne )

i, iMax est un entier
sql est une chaîne
rubriques est un tableau de 0 chaînes
c est un Champ

// Nettoyage de la table résultat
TABLE_resultat..AffichageActif = Faux
TABLE_resultat..FichierParcouru = ""
iMax = TableOccurrence( TABLE_resultat, toColonne )
POUR i = iMax À 1 PAS -1
c <- TableEnumèreColonne( TABLE_resultat, i )
SI c..Nom <> COL_ancrage..Nom ALORS ChampSupprime( c..Nom )
FIN // POUR i = 1 A iMax

// Execution de la requête SQL
sql = _sql
SI HExécuteRequêteSQL( resultat, sql ) ALORS

HLitPremier( resultat )
SI PAS HEnDehors( resultat ) ALORS

ChaîneVersTableau( HListeRubrique( resultat ), rubriques )
POUR TOUTE Rubrique de Rubriques

c <- ChampCrée( TABLE_resultat..Nom + ".COL_" + Rubrique , typColonne )
c..Libellé = Rubrique
c..LiaisonFichier = resultat + "." + Rubrique
c..Visible = Vrai

FIN // POUR TOUTE rubrique de rubriques

TABLE_resultat..FichierParcouru = resultat
TableAffiche( TABLE_resultat, taInit )
TableAjuste( TABLE_resultat )

FIN // SI PAS HEnDehors( rs ) ALORS

FIN // SI HExécuteRequêteSQL( resultat, sql ) ALORS

TABLE_resultat..AffichageActif = Vrai
Miembro registrado
2.321 mensajes
Publicado el 19,marzo 2019 - 15:01
Bonjour,

Plus simple : https://doc.pcsoft.fr/fr-FR/index.awp?3074005
// Remplir le champ TABLE_resultat avec le contenu de resultat
FichierVersTableMémoire(TABLE_resultat, resultat)


--
Bon dev,
Jean-Pierre
Miembro registrado
134 mensajes
Publicado el 19,marzo 2019 - 16:03
Jean-Pierre a écrit :
Bonjour,

Plus simple : https://doc.pcsoft.fr/fr-FR/index.awp?3074005
// Remplir le champ TABLE_resultat avec le contenu de resultat
FichierVersTableMémoire(TABLE_resultat, resultat)


--
Bon dev,
Jean-Pierre


Bonjour Jean-Pierre,

Je n'ai jamais utilisé cette fonction, elle ne nécessite pas d'avoir déjà les colonnes créées dans la table ?
Il n'y a pas un risque de saturation mémoire par rapport à une table avec un remplissage en Fichier / Requête ?