Affichage de données et tri

Résolu
Signaler
Messages postés
23
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
2 juillet 2007
-
Messages postés
23
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
2 juillet 2007
-
Bonjour à tous,

je travaille avec vfp9 et sqlserver.
dans une form j'ai des zones et une grille qui sont reliés par le même curseur
je crée un curseur avec la commande sqlexec(...)
pour l'affichage des données j'utilise une méthode Affiche dont voici le code
select moncurseur
thisform.zone1.value = champ1
thisform.zone2.value = champ2
thisform.pageframe1.page1.zone3.value = champ3
.
.
dans Afterrowcolchange de la grille je fais appel de la méthode affiche
1. je pense que ce n'est pas une bonne méthode ou il existe d'autres?
2. si maintenant je veux trier une colonne je peux utiliser index on, mais il met beaucoup de temps car il existe beaucoup d'enregistrement.
pour cela je refait la requête en lui ajoutant un order by
code dans le header pour chaque colonne:
sqlexec(xconn,'select .... from ... order by champ1', 'moncurseur')
ainsi de suite pour les autres colonnes.
est-ce une bonne méthode?


Merci

4 réponses

Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
Bonjour,

si tu connais le nom d'alias et le nom de champ, tu peux parfaitement mettre un controlsource à tes controles, même si tu n'utilises pas l'environnement de données

le meileur endroit pour créer ton cursor par sqlexec est la méthode "beforeopentables" de l'environnement de données (en mettant celui-ci à opentables=.F.)
cet évenement est l'équivalent du load pour le dataenvironment

si tu as des millions d'enregistrements, alors il faut absolument que l'order soit donné par le serveur (don order by dans ton select, et index pour chaque colonne sur le serveur)
mais en client/serveur, il est totalement déconseillé de remonter sur le client autant d'enregistrement, quelques milliers (moins de 10) devrait être un maximum à ne pas dépasser
Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
Bonjour,

tes "zones", ce sont des textbox? si tu leur mets comme controlsource le nom du champ de l'alias de ton curseur, ils seront actualisés automatiquement, et ta méthode affiche ne contiendra au plus qu'un thisform.refresh

pour la question des index ou du order by, ça dépend de plusieurs choses:
beaucoup d'enregistrements, ça veut dire combien?
est-ce que tes tables cotés SQL on un index sur les champs sur lesquels tu vas demander un order by?
Messages postés
23
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
2 juillet 2007

Bonjour,

Merci Michel de ta réponse.
1.les zones sont des textbox, des combobox, des edit ...
comment mettre controlsource vu que je n'utilise pas l'environnement de données?, je crée le curseur dans le load (ou init) de la form avec sqlexec.
2. il y a des millions d'enregistrements, il y a des index mais pas sur tous les champs désirés.
je doit donc mettre un index sur chaque champ que je veux trier?

Merci
Messages postés
23
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
2 juillet 2007

Bonjour ,

Un grand Merci à toi Michel.