begin process at 2008 07 09 03:16:26
1 207 190 membres
36 nouveaux aujourd'hui
14 130 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : re set filter to [ Archives / Débutants ] (brunaux)

re set filter to le 10/03/2006 15:05:02

brunaux
bonjour
merci mike pour les réponses.je vois que tu n'apprecie pas trop SET FILTER TO,
je trouve pourtant que c'est bien pratique et rapide pour les débutants !
je ne vois pas trop comment faire pour mettre le curseur du SELE ...... dans le recordsource de la grille vu qu'il y a déjà la table d'affecté puisque dans la grille on saisie des valeurs,chaque colonne de la grille etant affecté a un champs de la table,je ne comprends donc pas bien ta phrase "Encore une fois considère le curseur pour ton Recordsource de ta grille." j'ai un peu de mal a comprendre.Si on fait un SELECT * from matable where secteur = '200' and motif = '81' into curseur moncurseur. que l'on arrive a afiicher le résultat dans la grille (il faut déjà y arriver !),peut-on faire ensuite des insertions de valeurs,des suppressions...

j'en profite pour vous remercier tous (les benevoles) pour vos reponses qui nous aident bien
merci

Re : re set filter to le 11/03/2006 14:01:42

Mike Gagnon
Membre Club
Réponse acceptée !
>>>je trouve pourtant que c'est bien pratique et rapide pour les débutants !

A ton choix, mais je crois que les débutants qui apprennent à programmer, devraient apprendre de la bonne facon, la plus efficace et la plus sécure. Surtout si un jour tu écrit une applicatiion qui va aller sur un serveur, avec 200 utilisateurs avec une table à filtrer de 100,000 records, ton client va se plaindre tres vite de la lenteur de ton application.  Qunad tu allais (ou va encore) apprendre à l'école, et le prof te dit 'voici comment faire' est-ce que tu décide de faire à ta facon parce ce que c'est 'pratique et rapide'? Je dois espérer que non. Voici un example de la facon de faire que j'utilse dans mes applications.
1. Crée un simple formulaire.
2. Ajoute un grille (fait rian avec pour l'instant autre que la déposer sur le formulaire.
3. Dans le dataenvironment met un table (par example pour le cas de notre excercise met la table 'customer' que se trouve probablement dans ton dossier HOME(2)+'\tastrade\data'.
4. Met le buffering de la table (cursor) à 5. Qui est bon pour les applications à plusieurs utilisateurs.
5. Ajoute un bouton sur la forme pour sauvegarder les records.
6. Dans l'init de la forme met ceci:

Thisform.grid1.RecordSource =''  && preserver le format de la grille et clairer les records
Select * From customer Where country ="Mexico" Into Cursor moncurseur Readwrite && Faire un select pour les clients qui demeurent au Mexique
CURSORSETPROP("Buffering",5,"moncurseur") && Changer le buffering du curseur
With This.grid1 
    .ColumnCount = 2  && Mettre le nombre de colonnes à la grille
    .RecordSource="moncurseur"  && Mettre le recordsource vers le curseur
    .Column1.header1.Caption = "Société"  && Le titre de la colonne 1
    .Column1.ControlSource ="moncurseur.company_name"  && Assigner le champs
    .Column1.Width = 200  && Ajuster la largeur
    .Column2.ControlSource ="moncurseur.COUNTRY"  && Assigner la colonne 2
    .Column2.header1.Caption = "Pays"  && Titre de la colonne 2
Endwith

En faisant comme ci-haut, c'est vite et sécure et tu peux changer tout ce que tu veux sans déranger les autres utilisateurs puisque tu est en mode curseur.
Pour ce que est de sauvgarder, la c'est peut-etre un peu plus compliqué comme technique, mais une fois compris, tu reviendra jamais en arriere. Voci le code du click du bouton sauvegarde:

LOCAL Array monarray[1]  && Créer un tableau pour compter les champs
LOCAL x  && Variable juste pour l'exemple
x = 0   && Initialise à 0
Select moncurseur  && Selectionner le curseur
nFieldCount=Afields(monarray,'Moncurseur')  && Compter combien de champs on doit vérifier
Scan
    For i = 1 To nFieldCount  && Faire un loop pour voir si on a un champs quio a changé de valeur
        If Getfldstate(monarray[i,1]) > 1  && Si la valeur est plus haute que 1 c'est que le champs a été modifié on doit suavegarder le records au complet
                ** ce champs a changé on doit le sauvegarder dans la table principale
              x = x + 1  && On compte combien de records on sauvegarde
            Scatter Name oRecord  && On se crée un objet que contient toute les valeurs du record
            Select customer  && On va a la table principale
            Set Order To customer_i  && On change l'index
            If Seek(oRecord.customer_id)  && On cherche le records
               if  Getfldstate(monarray[i,1]) = 2  && record supprimé
                 DELETE
               else
                Gather name oRecord  && Un fois trouvé on replace tous les valeurs avec la valeurs de l'objet
               endif
               Loop  && et on sort de la loop, puisqu'on vient de sauvegarder et on passe au prochain
            Endif
        Endif
    Endfor
ENDSCAN
=TABLEUPDATE(.t.,.t.,'customer')  && On fait un mis a jour de la table principale
MESSAGEBOX("Il y a "+TRANSFORM(x)+" champs qui ont changé")  && A titre d'exemple on montre combien de records on été sauvegardés

Tout cela pour te dire que moi aussi j'ai commencé avec SET FILTER, mais on réalise tres vite qu'il y a de meilleur facons, plus rapide et plus sécure.


Mike Gagnon

Re : re set filter to le 11/03/2006 14:42:19

Mike Gagnon
Membre Club

Un autre point que j'ai oublié. Dans le bouton sauvegarde à la dernière ligne tu devrait refaire le select, sinon VFP va resauvegarder les record meme si il sint déjà sauvargés. Tu pourrait ajouter la ligne suivante

THISFORM.Init()  && Refaire le curseur


Mike Gagnon

Re : re set filter to le 13/03/2006 08:16:24

brunaux
Bonjour
merci mike pour les réponses.dès que j'ai un peu de temps libre j'essairai de bien lire ton code,tout comprendre  et de le mettre en application en essayant de le refaire pour m'entrainer. je précise que je ne suis absolument pas informaticien de formation! j'ai appris foxpro (enfin le peu que je connais) tout seul avec un bouquin,ce qui n'est pas toujours facile,quand vous comprenez pas un truc et que personne n'est là pour bien vous l'expliquez en décomposant bien les choses.je fais juste des toutes petites application internes en me debrouillant tant bien que mal (formulaires de saisies,programmes de controles des données,impressions de tableaux de comptages,etc... des petits trucs quoi !),j'utilise foxpro de temps en temps.je ne ferais donc jamais des applications serveur pour 200 personnes !!!
je vais donc m'entrainer avec ton code et essayer d'oublier un peu SET FILTER !
dommage pour la barre de progression,je ferais sans.... le dernier point concernant le combobox ,c'est que avec le combo par defaut de VFP je ne sais pas faire les filtrages avec les lettres et les ajout de données.celui la le fait tout seul.quand je charge les 36000 communes,on tape une lettre (EX: 'p'),il affiche tts les communes commencant par p,puis 'a',affiche tts les communes commencant par 'pa' en mettant en surbrillance noir les 2 lettres tapes (comme dans access) et ainsi de suite ca reduit au fur et a mesure la liste des villes et on peut saisir une communes n'y figurant pas (et qui sera reproposer plus tard)et quand on quitte le combo la valeur utilisé (soit existantes ou  saisie manuellement) est stocke dans le champs correspondant de la table.
bonne journée et encore merci pour les réponses.

Re : re set filter to le 13/03/2006 11:13:26

Mike Gagnon
Membre Club
En passant il n'y pas d'école pour apprendre Foxpro au Canada non plus. Moi aussi j'ai appris tout seul. Et il y a 20 ans, il n'y avais pas de livres ni d'internet alors je comprends tres bien ta situation.
La description du combo que tu décrit est tres similaire à un type d'utilisation du combo natif à VFP sur lequel j'ai écrit il y a un certain temps. Mais il était plutot 'autofill' comme l'internet explorer (ou Excel), aussitot que tu tapais une lettre il te montre le prepier mot qui commence avec cette lettre, et un deuxieme lettre, il te montre le premier mot qui commence avec ces deux lettres etc...Et lorques tu écrit un mot qui n'existe pas il te demmande de le sauvarger. La seulle différence est que je n'utiliserais pas un combo pour 36,000 entrées.
J'utiliserais peut etre un combo en combinaison avec une grille. Charger 36,000 entrées dans un grille est rien pour VFP et le combo pourrait ne pas contenir la liste, mais strictement l'utiliser comme outil de recherche. Sino tu pourrais aussi créer ta liste an array lorsque le programme commence, ou on est habitué à un certain délai.
Tu peux trouver un description du combo autofill chez Atoutfox
http://www.atoutfox.com/articles.asp?ACTION=FCONSULTER&ID=0000000036


Mike Gagnon


Classé sous : set, grille, curseur, to, filter

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS