Affichage de données et tri

Résolu
zouheir_ali Messages postés 23 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 2 juillet 2007 - 21 juin 2007 à 15:35
zouheir_ali Messages postés 23 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 2 juillet 2007 - 25 juin 2007 à 10:00
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

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
22 juin 2007 à 10:35
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
3
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
21 juin 2007 à 17:12
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?
0
zouheir_ali Messages postés 23 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 2 juillet 2007
22 juin 2007 à 09:04
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
0
zouheir_ali Messages postés 23 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 2 juillet 2007
25 juin 2007 à 10:00
Bonjour ,

Un grand Merci à toi Michel.
0