begin process at 2012 05 24 09:50:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Foxpro

 > 

Archives

 > 

Divers

 > 

a faire et ne pas faire en VFP


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

a faire et ne pas faire en VFP

mardi 5 juillet 2005 à 13:55:10 | a faire et ne pas faire en VFP

brunaux

Je suis utilisateur occasionnel et en lisant une contribution dans ATOUTFOX il y a un article qui s'intitule ' a faire et ne pas faire en VFP'
j'aimerais savoir pourquoi il ne faut pas utiliser un groupe de formulaire(formset) ? quand vous avez plusieurs tables ouvertes,avec de la saisie dans des textbox qui servent de parametres dans plusieurs formulaires du groupe c'est bien  pratique, ou alors est-il preferable d'utiliser plusieurs formulaires independant que l'on lance avec DO FORM .... et comment garde t-on les parametres saisies par exemple dans un formulaire 1 et que l'on veut re- utilisez dans un formulaire 5 ?  Egalement ne pas utiliser SET FILTER (qui est bien pratique je trouve),mais une vue parametrée . pourquoi ? et qu'est-ce-qu'une vue parametrée ? merci d'avance pour les conseils
mardi 5 juillet 2005 à 16:21:43 | Re : a faire et ne pas faire en VFP

Mike Gagnon

Membre Club
La réponse la plus simple à donner? Le temps d'exécution.
1. Pour le formset. Si par exemple tu as un formset avec 10 formes à l'intérieur. Lorsque tu créer un instance de ce formset, VFP doit générer toutes les formes du formset (meme si l'utilisera pas les dit formulaires), qu'il soit visible ou non. Très lent. Je te conseille de commencer par un formulaire principal et le reste des classes formulaire que tu instancie et détruit à mesure.

2. Pour ce qui est du SET FILTER TO, la situation est la meme, un SET FILTER TO sur une table de 500,000 records (il m'arrive souvent de gérer des tables de cette dimension), va prendre presque dix fois plus lentement à trouver un record qu'un SQL statement ou une vue parametrée.

Si les techniques proposées ne te sont pas famillier, pose des questions.

Mike Gagnon
mercredi 6 juillet 2005 à 07:56:23 | Re : a faire et ne pas faire en VFP

brunaux

Merci Mike pour les réponses
Encore faut-il tout comprendre !!! Pour nous autres utilisateurs occasionnels c'est pas évident.
Quelle différence entre un Formulaire normal et une "classe Formulaire (comment cree t-on une classe formulaire ?) que l'on  instancie et détruit au fur et a mesure " ? Qu'est-ce-que cela veut dire ? 
 Si je saisie dans un champs une valeur (dans mon formulaire principal ) exemple:un departement , et que je lance mon formulaire 5 avec do form 5 (dans le code click d'un bouton ,exemple 'Afficher les villes'),comment je garde la valeur saisie dans form1 ?
 alors que la dans mon groupe de formulaire quand j'active mon form 5 (thisformset.form5.show) et que je suis dans mon form 5 je fais juste par exemple :set filter to monDepartement = thisformset.form1.text3.value (ou j'ai saisie mon numero de département) , et dans une grille du form 5  j'affiche toutes les villes du departement choisi et quand je veut revenir dans mon form 1 je fais dans un bouton Quitter du form 5 : thisform.hide et je reviens tout de suite dans mon formulaire principal. C'est tout,c'est simple et rapide, alors ou est l'avantage de creer des classes formulaire independantes que l'on utilise et detruit au fur et a mesure ?
 
les plus gros fichiers que j'utilise font 20 000 enregis. donc le set filter est rapide .
voir plus haut ,si dans j'ai une grille(un grid) dans un formulaire et que j'affiche les villes (et autres caracteristiques)du departement, c'est rapide avec le set filter to .
set filter to monDepartement = thisformset.form1.text3.value
thisform.refresh

comment afficher les memes données avec un SQL statement (qu'est-ce-c'est ?) ou une vue parametrée (meme chose ?) et ou est vraiment l'avantage ?

ce n'est pas evident de s'exprimer par message ,j'espere que je ne suis pas trop confus dans les explications,
et j'attends les réponses avec impatience et plaisir !!
bonne journée


  
mercredi 6 juillet 2005 à 12:04:00 | Re : a faire et ne pas faire en VFP

Mike Gagnon

Membre Club
Tes questions reviennent aux principes fondamentaux de OOP (Object Oriented Programming). Et le principe de base de OOP est : Chaque objet (formulaire) dans ce cas-ci doivent être capable de fonctionner seul sans l'aide du restant de l'application). Dans le cas du Formset ce la brise le principe de l'encapsulation (qui veut dire ce que je viens d'écrire)

Je reprends ton texte par morceaux.

>>Quelle différence entre un Formulaire normal et une "classe Formulaire (comment crée t-on une classe formulaire ?) Que l'on  instancier et détruit au fur et a mesure " ? Qu'est ce que cela veut dire ?

Il y a deux façons de créer une classe formulaire. Par code ou en créant un classe formulaire dans une librairie de classes, que l'on peut réutiliser n'importe ou dans l'application (Deuxième principe de OOP - la réutilisation des objets). Mais ce site étant ce qu'il est je ne peu que te montrer comment créer un formulaire via code.
Voici un petit example (roule ceci dans  un prg).
PUBLIC oform1
oform1=NEWOBJECT("form1")
oform1.Show
RETURN
DEFINE CLASS form1 AS form
    Height = 194
    Width = 375
    DoCreate = .T.
    AutoCenter = .T.
    Caption = "Identification"
    MaxButton = .F.
    MinButton = .F.
    AlwaysOnTop = .T.
    Name = "Form1"
    ADD OBJECT text1 AS textbox WITH ;
        ControlSource = "orders.order_id", ;
        Height = 23, ;
        Left = 36, ;
        Top = 36, ;
        Width = 100, ;
        Name = "Text1"
    ADD OBJECT label1 AS label WITH ;
        AutoSize = .T., ;
        Caption = "Order ID", ;
        Height = 17, ;
        Left = 48, ;
        Top = 12, ;
        Width = 48, ;
        Name = "Label1"
    ADD OBJECT text2 AS textbox WITH ;
        ControlSource = "orders.customer_id", ;
        Height = 23, ;
        Left = 156, ;
        Top = 36, ;
        Width = 156, ;
        Name = "Text2"
    ADD OBJECT label2 AS label WITH ;
        Caption = "Customer ID", ;
        Height = 17, ;
        Left = 156, ;
        Top = 12, ;
        Width = 84, ;
        Name = "Label2"
         ADD OBJECT combo1 AS combobox WITH ;
        RowSourceType = 1, ;
        RowSource = "A,B,C,D", ;
        Height = 24, ;
        Left = 36, ;
        Top = 84, ;
        Width = 100, ;
        Name = "Combo1"
    ADD OBJECT label3 AS label WITH ;
        AutoSize = .T., ;
        Caption = "Disctrict", ;
        Height = 17, ;
        Left = 48, ;
        Top = 66, ;
        Width = 46, ;
        Name = "Label3"
    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 132, ;
        Left = 145, ;
        Height = 27, ;
        Width = 84, ;
        Caption = "Fermer", ;
        Name = "Command1"
    PROCEDURE command1.Click
        RELEASE thisform
    ENDPROC
ENDDEFINE



>>>>Si je saisie dans un champs une valeur (dans mon formulaire principal ) exemple:un departement , et que je lance mon formulaire 5 avec do form 5 (dans le code click d'un bouton ,exemple 'Afficher les villes'),comment je garde la valeur saisie dans form1 ?
 
alors que la dans mon groupe de formulaire quand j'active mon form 5 (thisformset.form5.show) et que je suis dans mon form 5 je fais juste par exemple :set filter to monDepartement = thisformset.form1.text3.value (ou j'ai saisie mon numero de département) , et dans une grille du form 5  j'affiche toutes les villes du departement choisi et quand je veut revenir dans mon form 1 je fais dans un bouton Quitter du form 5 : thisform.hide et je reviens tout de suite dans mon formulaire principal. C'est tout,c'est simple et rapide, alors ou est l'avantage de creer des classes formulaire independantes que l'on utilise et detruit au fur et a mesure ?<<<<

L'avantage? Un formset est lourd (en tant que taille de fichier), et comme mentionné, VFP doit générer tous les formulaires du formset. Il est plus difficile à gérer, il trahit les règles de l'encapsulation etc...Honnêtement Microsoft n'aurait du jamais laissé ce truc dans VFP. Ici tu as 5 formes, mais peut-être un jour tu aura 20 formes, et la tu vas voir la différence. Il faut apprendre à programmer en prévoyant le futur. Ton code doit fonctionner sous n'importe quel circonstance. Pour reprendre l'exemple ci-haut, si a la toute première ligne tu ajoute ceci:
USE  HOME(2)+"tastrade\data\orders" SHARED AGAIN IN 0
Et que tu roule le formulaire, on peu voir que les données son montrées dans les deux textboxes.

>>>>
les plus gros fichiers que j'utilise font 20 000 enregis. donc le set filter est rapide .voir plus haut ,si dans j'ai une grille(un grid) dans un formulaire et que j'affiche les villes (et autres caracteristiques)du departement, c'est rapide avec le set filter to .
set filter to monDepartement = thisformset.form1.text3.value
thisform.refresh

Encore là, aujourd'hui 20,000 et demain 200,000. Donc aujourd'hui ton code fonctionne, mais demain il ne fonctionne plus (ou est trop lent). Et attend, demain il y a 200,000 records sur un réseau de 300 utilisateurs. Donc on programme pour demain.

>>
comment afficher les memes données avec un SQL statement (qu'est-ce-c'est ?) ou une vue parametrée (meme chose ?) et ou est vraiment l'avantage ?

Rapidité d'exécution, bon principe de programmation. Pour reprendre la table ci-haut, en faire un SQL (sequencial query language). Encore un fois aujourd'hui tu traite une petite table VFP et demain tu va taiter une table SQL (pas VFP) sur un serveur en réseau. Ton code ne vas plus fonctionner.
USE  HOME(2)+"tastrade\data\orders" SHARED AGAIN IN 0
SELECT * FROM orders WHERE customer_id = 'FOLKO' INTO CURSOR moncurseur
SELECT moncurseur
BROWSE

Ce que je viens de démontér est un SQL dans un curseur (strictement pour voir le résultat de la recherche sans possibilité de modifier la table originale). Un vue par code est similaire (en tant quie code), mais elle te donne la possibilité de modifier les records et ce que affecte la table parent. Difficile à montrer une vue paramètrer ici, mais il y a un designer (wizard) dans VFP que peut t'aider a en crée une.

Et la tu a un curseur avec seulement les records que tu as besoin, qui peuvent etre montrés dans une grille.

>>ce n'est pas evident de s'exprimer par message ,j'espere que je ne suis pas trop confus dans les explications,

Non, je ne crois pas. Mais n'oubli pas, ce qui est facile n'est peut-etre pas la solution idéale. Mais une fois que tu métrise un petit morceau, tu passe à un autre, et tu étudie le code que tu vois (Exemples avec VFP, ici, sur les newsgroups etc) et tu l'applique à ton programme.
Et en passant, moi aussi j'utlisait des formsets et des SET FILTER TO par ce que c'était facile, mais a mesure que je progressais, je pouvais voir que mon code ne ferait plus.


mercredi 6 juillet 2005 à 12:23:24 | Re : a faire et ne pas faire en VFP

MichelAtoutFox

Membre Club

Bonjour,

quelques réponses, quelques pistes de réflexion...

Sur le Formset:

L'intéret du formset, c'est de pouvoir partager un environnement de données privé entre plusieurs formulaires. C'est à dire que les actions apportés sur les alias depuis un formulaire (par exemple un set filter to... sur un alias) sont visibles depuis tous les formulaires du formset.

Je n'ai pas l'impression que tu utilises cette spécificité ; si tu veux "lire" le contenu du textbox text3 du form form1 depuis le form form5 pour actualiser le contenu d'un grid, tu peux parfaitement te passer de formset (au passage, j'en profite pour te conseiller d'utiliser des noms plus parlant que text3, form1, etc...). Tu vas utiliser des forms ordinaires, avec leur environnement de données privé, et tu vas dire :
dans l'init du form5, set filter to form1.text3.value
ou bien, dans le click du bouton du form1 qui lance le form5, un do form5 with thisform.text3.value, et tu met dans l'init du form5 un Lparameters departement, suivi d'un set filter to mondepartement=departement
(en fait, il faut d'abord vérifier que le paramètre existe, et qu'il est du type requis pour le set filter).

L'avantage des form indépendants par rapport au formset? en dehors de ce que Mike indique (et qui est vrai, les temps de chargement peuvent devenir longs), c'est d'abord la maintenance et l'évolution du programme.

Par exemple, ton form de choix de ville par département va être utilisable partout où tu en auras besoin, sans réécriture, alors que dans le formset, il n'existe pas sans le formset. Si tu as une modification à faire sur ce form, tu ne touches à rien d'autre, tu n'as pas d'effets secondaires non désirés.

Sur le Set Filter:

L'intéret des requetes SQL et des vues parametrées, c'est leur rapidité et les possibilités qu'elles apportent, en matière de maintenance et d'évolution là aussi.

Cette rapidité n'est probablement pas perceptible dans ton cas, tu as raison. Et si tu n'es pas à l'aise avec la syntaxe SQL, alors ta maintenance n'en sera pas facilitée, au contraire! De nombreuses applications tournent dans le monde depuis des années, sans contenir une seule vue ou requête SQL, tu peux continuer avec les set filter.
Celà dit, pour la suite, il serait bon de te mettre à SQL...

Est-ce clair ? si besoin est, n'hésite pas à poser toutes les questions qui te semblent nécessaires, mais essaie d'être précis (donne les lignes de code, par exemple).

jeudi 7 juillet 2005 à 14:16:33 | Re : a faire et ne pas faire en VFP

brunaux

Merci Mike et Michel pour vos réponses et vos réflexions.

Pour commencer j'ai essayer de faire marcher ton petit programme mike et erreur pour oform1=NEWOBJECT("form1")
message "erreur d'instanciation de l'objet" ??
c'est vrai que la programmation ou technique que j'emploie ne sont pas tres orthodoxe,mais je n'ai aucune formation informatique,je ne connais aucun autre langage et VFP je l'ai appris tout seul avec un petit livre et l'aide en ligne, alors c'est vrai je vais au plus facile mais on fait avec ce que l'on sait faire et ce que l'on comprend en lisant.
Rien ne remplacera une personne qui vous apprends et qui peut vous montrer de visu  des choses qui nous semblent vraiment abstrait en lisant l'aide en ligne de VFP.je ne fais que des petits programmes et des formulaires de saisie ou de toutes petites applications (ou j'utilise quand meme des fois des 'select xxx fom xxx into curseur xxx order by xxx' etc...pour des listes deroulantes avec des choix) donc pour l'instant ca passe et honnetement je sais que je n'aurais jamais a utiliser des tables de 300 000 enregis. ou faire une application en reseau alors .... mais je comprends que vous puissiez restez parfois interloqués en voyant des programmes venant d'utilisateurs occasionnels autoditacte !!!
merci encore de votre aide et je n'hesiterais pas à demander encore des conseils sur votre site

vendredi 8 juillet 2005 à 19:50:12 | Re : a faire et ne pas faire en VFP

Mike Gagnon

Membre Club
>>>Pour commencer j'ai essayer de faire marcher ton petit programme mike et erreur pour oform1=NEWOBJECT("form1")
message "erreur d'instanciation de l'objet" ??

Versionde VFP? 6 peut-etre, remplace
oform1=NEWOBJECT("form1")

par

oform1=CREATEOBJECT("form1")


Mike Gagnon
lundi 11 juillet 2005 à 14:43:36 | Re : a faire et ne pas faire en VFP

brunaux

Bonjour Mike

Effectivement je suis sous VFP6, mais désolé cela fait toujours le même message
"erreur d'instanciation de l'objet" ??
a moins que je ne fasse une erreur de manipulation, mais bon s j'ai juste mis tes lignes de code dans un programme et voila les resultats ??
lundi 11 juillet 2005 à 15:55:10 | Re : a faire et ne pas faire en VFP

Mike Gagnon

Membre Club
Réponse acceptée !
Peut-etre oublié une ligne au tout début, change le début avec ce qui suit et laisse reste comme il est (Il faut ouvrir la table)

USE HOME(2)+'\tastrade\data\orders' SHARED AGAIN IN 0

PUBLIC oform1

oform1=createobj("form1")

oform1.Show

RETURN



Mike Gagnon


Cette discussion est classée dans : formulaire, parametres, utiliser, groupe, vfp


Répondre à ce message

Sujets en rapport avec ce message

combobox dans un formulaire [ par brunaux ] Bonjour à tous !utilisant VFP 6.0 occasionnellement pour faire des écrans de saisie,je voudrais savoir comment l'on fait dans un combobox(donc avec un re-combobox dans formulaire [ par brunaux ] Bonjour !merci thierry et mike pour votre aide si précieuse,je vais pouvoir me débrouiller maintenant et arriver à faire quelque chose qui marche ! me formulaire ajustable [ par brunaux ] Bonjour !merci thierry pour la reponse pour ajuster automatiquement un formulaire suivant la taille de l'ecran de l'utilisateur !encore merci parution vfp 9.0 [ par brunaux ] bonjour !je vois que visual foxpro 9.0 va sortir ?sera t-elle en vente en france ? et en francais,evidemment ?puisque je crois que les versions 7.0 et VFP vers VB [ par senaco ] Développeur sous Visual Foxpro, je dois développer un exemple d'utilisation de ma DLL sous VB. Or je ne connais pas VB. Existe-t-il une programme de c VFP 6 Beta : Comment générer les disquettes d'installation? [ par petrone ] Salut!Utilisateur de Visual FoxPro 6, je me suis mis depuis quelques mois à VFP 9 bêta que j'ai téléchagée sur le net.Depuis j'ai trouvé que des avan Partage avec DLL [ par delphifox ] Je voudrais structurer mon projet VFP entre un EXE et plusieurs DLL.L'EXE est en VFP et les DLL aussi. La DLL doit afficher un écran de saisieAu nivea "Handwriting Recognition" - Signature manuscrite sur un rapport imprimé vs VFP 6.0 [ par BuckStar ] Appel à tous,J'ai une application en VFP 6.0 en trois modules: 1. Module-Client: Le client passe une commande2. Module-Approbation - La commande est a problème du serveur ole [ par h_adil ] j'ai inseré un objet excel dabs une formulaire mais lorsque je passe du mode création au moode formulaire j'ai un message qui apparait " un problème e Gestion d'objet [ par spoutnic_37 ] Salutation,     Mon probleme est le suivant : comment faire un ensemble de formulaire grace à visual foxpro 6, et gérer les objets? J'ai fait de la p


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,482 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales