Affichage de données et tri [Résolu]

zouheir_ali 23 Messages postés jeudi 22 décembre 2005Date d'inscription 2 juillet 2007 Dernière intervention - 21 juin 2007 à 15:35 - Dernière réponse : zouheir_ali 23 Messages postés jeudi 22 décembre 2005Date d'inscription 2 juillet 2007 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
michelatoutfox 834 Messages postés mardi 5 octobre 2004Date d'inscription 7 mai 2013 Dernière intervention - 22 juin 2007 à 10:35
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de michelatoutfox
michelatoutfox 834 Messages postés mardi 5 octobre 2004Date d'inscription 7 mai 2013 Dernière intervention - 21 juin 2007 à 17:12
0
Utile
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?
Commenter la réponse de michelatoutfox
zouheir_ali 23 Messages postés jeudi 22 décembre 2005Date d'inscription 2 juillet 2007 Dernière intervention - 22 juin 2007 à 09:04
0
Utile
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
Commenter la réponse de zouheir_ali
zouheir_ali 23 Messages postés jeudi 22 décembre 2005Date d'inscription 2 juillet 2007 Dernière intervention - 25 juin 2007 à 10:00
0
Utile
Bonjour ,

Un grand Merci à toi Michel.
Commenter la réponse de zouheir_ali

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.