PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment afficher rapidement une table très volumineuse ?
Comment afficher rapidement une table très volumineuse ?
Débuté par Fredo, 05 nov. 2004 10:54 - 19 réponses
Posté le 05 novembre 2004 - 10:54
Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais :

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.
Posté le 05 novembre 2004 - 10:10
Salut !
On 5-Nov-2004, "Fredo" <info@capet.org> wrote:

Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements
se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais :


HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier
est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.


Tu utilises une table mémoire et donc tu charge tous les enregistrements en
mémoire ...
Si tu utilisais une table fichier, le chargement de ta table serait
"instantané" ( si tu n'as pas de filtre ) car tu ne ne chargerait que les
enregistrement affichés ...

A+

--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posté le 05 novembre 2004 - 11:08
Il me semble que WDMap fonctionne désormais sur une table fichier
et non plus en table mémoire comme en WD5, puisque l'on a plus
le tri systématique sur toutes les colonnes.
Maintenant tu peux provoquer l'affichage de la première page et poursuivre
ton remplissage

Yves

"Fredo" <info@capet.org> a écrit dans le message de news:
418b364b@news.pcsoft.fr...

Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements

se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais :

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier

est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.

Posté le 05 novembre 2004 - 11:18
utilise une table fichier et non une table mémoire.

"Fredo" <info@capet.org> a écrit dans le message de
news:418b364b@news.pcsoft.fr...

Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements

se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais :

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier

est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.

Posté le 05 novembre 2004 - 11:52
La méthode la plus rapide rest la table fichier comme beaucoup le préconise
mais
une autre solution consiste à remplir ta table via un Thread secondaire
cette méthode permet de visualiser très rapidement ta fenêtre pendant quelle
continue de se charger en tache de fond.

[Drcharly93]

"Fredo" <info@capet.org> a écrit dans le message de news:
418b364b@news.pcsoft.fr...

Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements
se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais :

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier
est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.

Posté le 05 novembre 2004 - 12:37
"Carlos DOS REIS" <carlos@mnk-informatique.fr> a écrit dans le message de
news: 418b4491$1@news.pcsoft.fr...

La méthode la plus rapide rest la table fichier comme beaucoup le
préconise
mais
une autre solution consiste à remplir ta table via un Thread secondaire
cette méthode permet de visualiser très rapidement ta fenêtre pendant
quelle
continue de se charger en tache de fond.

[Drcharly93]

"Fredo" <info@capet.org> a écrit dans le message de news:
418b364b@news.pcsoft.fr...

Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000 enregistrements
se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je fais
:

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que Fichier
est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.




Bonjour

Dans certaines situations et si tu tiens vraiment à utiliser une table
mémoire, il existe une autre solution.
Tout d'abord, tu dois désactiver l'ascenseur de la table.

Ensuite, tu remplis la table mémoire par paquet de 10 lignes si la table
contient 10 lignes, 12 lignes si elle en contient 12, 13 lignes si elle en
contient 13, etc ...
Tu places ensuite divers boutons de façon à ce que l'utilisateur puisse
parcourir la table
<page suivante> : tu remplis la table avec les x enregistrements suivants
<page précédente> : tu remplis la table avec les x enregistrements
précédants
<première page> : tu remplis la table avec les x premiers enregistrements
<dernière page> : tu remplis la table avec les x derniers enregistrements

Bien sur, si tu défini des colonnes triables, le résultat sera faux puisque
la totalité du fichier ne sera jamais chargé.
Cette solution peut donc être utilisée dans certains situations seulement.

A+

Val
Posté le 05 novembre 2004 - 13:09
HNBENREG(Client) est tres lent

Pour le remplissage de la table en elle-meme, c'est tres lent dans tous les cas.
Aucune solution n'a ete trouve a ce jour.
Posté le 05 novembre 2004 - 13:09
Merci à tous pour vos réponses : la table fichier marche parfaitement !

Encore une question : maintenant que ma table est reliée à un fichier, je voudrais qu'une colonne de ma table affiche la concaténation de deux rubriques (de type chaine) de mon fichier. Je m'explique : j'ai deux rubriques Fichier.nom et Fichier.prenom. Je voudrais afficher dans la colonne NOM de ma table : Nom + " " + Prenom.

Je pensais que je pouvais lier la colonne NOM de ma table à une requête SQL :

CONCAT (Fichier.nom, ' ', Fichier.prenom)

Je n'y arrive pas !!!
Posté le 05 novembre 2004 - 13:15
avec une requete par exemple c'est impossible d'utiliser une table fichier.
Posté le 05 novembre 2004 - 13:21
Je ne vois pas comment tu fais par programmation.

Car si c'est le resultat d'une requete il faut definir le dernier IDNUMERIQUE de la requete elle-meme, je ne sais pas si c'est possible.
Au cas ou cela serait possible, ce serait une des meilleurs solutions
Je serais heureux de savoir si c'est possible et dans ce cas pourquoi personne n'y a pense a ce jour.
Posté le 05 novembre 2004 - 14:37
il y a une LST (je sais plus laquelle) qui donne un exemple de comment est fait WDMAP
Il s'agit en fait d'une table fichier remplie avec l'instruction ConstruitTableFichier qui affiche rapidement les premiers enregistrements mais qui remplit la table par un THREAD (si tu cliques sur l'ascenseur tu verras le nombre d'enregistrements qui augmentent dans la bulle)

Bye
Posté le 05 novembre 2004 - 14:38
Exécute une requete puis appelles la commande ConstruitTableFichier.

Antoine

Fredo wrote:
Bonjour,

Avec l'outil WDMAP, l'affichage de mon fichier de 100.000
enregistrements se fait quasiment instantanément.

En programmation, ce n'est pas aussi performant !!! Voici ce que je
fais :

HLitPremier (Fichier, nom)

POUR i = 1 A HNbEnr (Fichier)
TableAjouteLigne (LISTE, Fichier.nom + " " + Fichier.prenom)
HLitSuivant (Fichier)
FIN

Il faut bien attendre 5 secondes pour l'affichage. Je précise que
Fichier est bien dans mon Analyse.

Qui peut m'aider ? Existe-t-il un exemple tout fait ?

Merci 1000 fois.
Posté le 05 novembre 2004 - 14:39
Salut !

On 5-Nov-2004, "braun" <medow@inter.net.il> wrote:

avec une requete par exemple c'est impossible d'utiliser une table
fichier.


Non non ...
Il suffit de changer la source de données de la table ...
Matable..FichierParcouru = <MaSourceDeDonnées>
ou <MaSourceDeDonéées> est le résultat d'une rquète ...
A+
--
Marcel Berman
c/o Managing Business SPRL
Allée du Petit Paris, 11
B - 1410 - Waterloo
Tel : +32 2 351.60.64
Fax : +32 2 351.45.78
Gsm : +32 475.799.477
Posté le 05 novembre 2004 - 14:39
si tu utilses une table fichier, c'est instantané ! les tables fichiers sont faites pour ça.
si tu utilises une table mémoire qui n'est pas faite pour ça effectivement c'est lent !

A+
Adrien.
Posté le 05 novembre 2004 - 14:41
mais enfin !

pourquoi s'acharner à créer une usine à gaz alors que la table fichier est faite pour ça !

tu as une autre solution : requête + construittablefichier()

A+
Adrien.
Posté le 05 novembre 2004 - 14:41
Dans ce cas, tu crés une requête, dans cette requête tu fait une formule
mathématique du genre Nom + Prenom.
Tu utilises ConstruitTableFichier pour afficher ta table, et la c'est hyper
rapide.

Antoine.



Fredo wrote:
Merci à tous pour vos réponses : la table fichier marche parfaitement
!

Encore une question : maintenant que ma table est reliée à un
fichier, je voudrais qu'une colonne de ma table affiche la
concaténation de deux rubriques (de type chaine) de mon fichier. Je
m'explique : j'ai deux rubriques Fichier.nom et Fichier.prenom. Je
voudrais afficher dans la colonne NOM de ma table : Nom + " " +
Prenom.

Je pensais que je pouvais lier la colonne NOM de ma table à une
requête SQL :

CONCAT (Fichier.nom, ' ', Fichier.prenom)

Je n'y arrive pas !!!
Posté le 05 novembre 2004 - 15:09
Si je comprends bien je fais un hexecuterequete et puis apres je fais un construittablefichier de la requete.
Si ca marche c'est une nouveaute depuis quand cela existe sur Windev, j'ignorais a ce jour cette incroyable possibilite.
Si ca marche on doit avoir une difference incroyable quand on remplit une table qui a un grand nombre de lignes. Meme si le nombre de ligne n'est pas important le systeme doit fonctionner d'une facon plus legere (je pense dans le cas d'un pocket PC)
Posté le 05 novembre 2004 - 15:14
"Fredo" <info@capet.org> a écrit dans le message de news:
418b55ee@news.pcsoft.fr...

Merci à tous pour vos réponses : la table fichier marche parfaitement !

Encore une question : maintenant que ma table est reliée à un fichier, je
voudrais qu'une colonne de ma table affiche la concaténation de deux
rubriques (de type chaine) de mon fichier. Je m'explique : j'ai deux
rubriques Fichier.nom et Fichier.prenom. Je voudrais afficher dans la
colonne NOM de ma table : Nom + " " + Prenom.

Je pensais que je pouvais lier la colonne NOM de ma table à une requête
SQL :

CONCAT (Fichier.nom, ' ', Fichier.prenom)

Je n'y arrive pas !!!





Re-Bonjour

Une fois que tu as créé ta table fichier et que les liaisons fonctionnent,
tu ajoutes une colonne à la table en prenant soin de ne pas la lier à une
rubrique du fichier.
Ensuite, dans le code "affichage d'une ligne" de la table, tu entres le code
suivant

// Table est le nom de la Table
// NOMPRENOM est le nom de la colonne que tu as ajoutée
// NOM est la colonne de la table, liée à la rubrique NOM de ton fichier
// PRENOM est la colonne de la table, liée à la rubrique PRENOM de ton
fichier

TABLE.NOMPRENOM=TABLE.NOM+" "+TABLE.PRENOM

A+

Val
Posté le 05 novembre 2004 - 15:42
Quel sont les critères pour savoir si l'on doit utiliser une table
fichier ou une table mémoire pour un traitement déterminé ?

JL
Posté le 05 novembre 2004 - 16:15
Si j'ai bien compris quand on a par exemple un hexecuterequete(requete1)

au lieu de faire un tableajouteligne apres hlitpremier(requete1) et tantque pas hendehors on fait:

construittablefichier(table1,requete1) qui est beaucoup plus rapide et efficace.



Conclusion:
Si j'ai bien compris on doit utiliser en priorite construittablefichier qui est plus efficace.
Mais alors dans quel cas on peut encore utiliser tableajouteligne?