Comment faire une application client serveur avec vfp

Résolu
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011 - 12 août 2010 à 12:57
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011 - 9 févr. 2011 à 18:20
bonjour tout le monde,

voila , mon soucis est que je ne sais faire que des applications mono poste avec vfp.

J'ai essayé de faire conseillé par des informaticiens, leurs réponses sont unanimes: abandonnes ton vfp.

Je voudrais savoir s'il ya des gens qui ont réussi dans ce domaine avec vfp ?

Merci

49 réponses

cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
22 août 2010 à 10:51
Bonjour Jean, j'espère que tu va bien.

Voila, tu m'a déconseillé d'utiliser les variables w et je les ai éliminés, je voudrais juste que tu me dises si mon nouveau code est correcte :

insert into famedica (codefam,LIB,valide);
values(thisformset.form1.pageframe1.page1.text2.value, thisformset.form1.pageframe1.page1.text3.value, .t.)


avant c'était :
insert into famedica (codefam,LIB,valide);
values(wcodefam,wlib,.t.)


Merci
0
babazou38 Messages postés 22 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 1 décembre 2010
22 août 2010 à 22:34
Bonjour Hakima,

oui je vais bien mais j'ai un peu beaucoup de travail en ce moment et ce week-end je n'étais pas à la maison !
Avec un pseudo pareil, j'ai cru que tu étais une parisienne mais non !!! Sur Atoutfox, si tu filtre les membres sur "algérie" tu devrais trouver plein de foxeurs près de chez toi ! Et la moitié de ma belle-famille est de là-bas (Alger et Kenchela/Batna).

pour ton exemple et rapidement :
1°) gardes-toi tant que tu vivras d'utiliser les formset ! Utilises les forms tout simplement.
2°) il serait interessant (mais c'est juste une question d'habitude) d'avoir un niveau intermédiaire pour les valeurs et d'utiliser la propriété controlsource des objets de la form. Cela donnerait :

dans le load event :
ThisForm.addproperty("monalias") && syntaxe à vérifier;
* tu peux aussi utiliser le menu 'form' ajouter une propriété
USE matable ALIAS monalias SHARED ORDER TAG toto
SCATTER NAME ThisForm.monalias BLANK
* cela va crée une structure qui sera identique à ton enregistrement

Dans l'init event:
thisform.pageframe1.page1.text2.controlsource = "ThisForm.monalias.codfam"

Ensuite, pendant toute la durée de vie de la form la 'variable' ThisForm.monalias.codfam sera l'image du contenu du champ

Pour enregistrer :
INSERT INTO monalias FROM NAME Thisform.monalias

MAIS VERIFIE QUE CELA EST POSSIBLE EN VFP6 !!

Demain lundi, c'est la rentrée administrative dans les écoles. Mais promis mardi, je t'envoie un exemple de vue qui va arranger ton problème ...

Bonne journée et bon ramadan ?

A+
Jean à Grenoble
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
23 août 2010 à 10:47
Bonjour Jean,

Je te remercie pour tes explications et je suis très contente que tu connaisses mon pays (moi je suis d'Alger).

Il me parait difficile de ne pas travailler avec les formset, mais je vais chercher une solution pour les éliminer.

Je testerais tes suggestions sur vfp6 et je te tiendrais au courant.

Bon ramadan à vous aussi
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
23 août 2010 à 11:06
J'ai mis dans le load event :
ThisForm.addproperty("monalias")

et le message d'erreur s'affiche :
propriété addproperty introuvable

Je crois que ça marche pas avec vfp6, je testerais cela sur une version plus récente.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
23 août 2010 à 11:55
Hakima,

tu dois ABSOLUMENT
éviter ces formset. Peux-tu nous dire pourquoi tu les utilises, comme ça on pourra t'aider à trouver une solution pour les éliminer?
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
23 août 2010 à 12:35
Bonjour Michel et merci pour ta réponse.

Je te donne un exemple d'utilisation des formset :

dans mon formulaire de saisie des consultations, j'ai mis un bouton de commande des symptômes; dès que le médecin clique dessus,
le formulaire des symptômes s'affiche : il contient deux grilles :
-La première est celle des familles de symptômes (cardio, pneumo...).
-La deuxième est celle des symptômes (douleurs thoraciques, fièvres...).

voila comment ça marche :
Le médecin précise d'abord une famille de symptômes (dans la 1ière grille ex:pneumo) et les symptômes de pneumo sont affichés dans la 2ième grille.

Merci
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
23 août 2010 à 14:40
Et je suppose que le formset te permet de partager les sessions de données entre les différents forms?

je te propose de supprimer le formset (attention, il faut veiller à réenregistrer chaque form séparément en tant que form indépendant avant de supprimer le formset).

Puis tu vas utiliser des sessions de données privées (regarde dans les propriétés de tes forms, tu vas trouver la propriété DataSession).
Donc tes tables seront ouvertes dans chaque session de données de façon indépendante, sans lien entre elles: tu pourras fermer une table dans un form, elle restera ouverte dans les autres, tu pourras te déplacer dans une table dans un form, ton pointeur d'enregistrement ne changera pas dans les autres, etc...

Il te faudra alors faire une "passerelle" entre ce qui sera choisi dans le form "symptomes" et le form de saisie des consultations.
Tu as trois possibilités:
[*] soit tu lis les choix depuis le form de saisie (par exemple, symptome_choisi= form_symptome.choix_symptome, en admettant que tu aies créé une propriété sur le form symptome pour y stocker le choix fait dans la grille)
[*] soit tu envoies au form de saisie le choix fait dans la grille (tu aurais alors une propriété sur le form de saisie)
[*] et la dernière possibilité serait de renvoyer au form saisie les infos nécessaires à la fermeture du form symptome, qui serait appelé en modal
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
23 août 2010 à 15:04
- Oui le formset me permettait de partager les sessions de données entre les différents forms.

-OK, j'enregistrerai chaque form indépendamment.

- Du moment qu'avec vfp6, je ne peux pas ajouter de propriété à mes forms, alors j'opte pour la 3ième possibilité. Le problème est que je ne sais pas comment faire pour renvoyer la listes des symptômes choisis , du form symptôme au form consultation.

Merci
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
23 août 2010 à 16:42
Mais si, tu peux ajouter des propriétés à un form en VFP6, bien sur que si!

regarde dans l'aide, dans guide du programmeur, -> Création de l'interface, -> Création de formulaires (environ à la moitié de la rubrique).

Dans le menu Formulaire, tu dois avoir "Nouvelle propriété"
0
babazou38 Messages postés 22 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 1 décembre 2010
24 août 2010 à 09:40
INTRODUCTION AUX VUES !

Bonjour Hakima.
C'est dommage que l'on ne puisse pas envoyer des pièces jointes ici !
Ci-dessous un bout de code à recopier dans un .prg et à executer. J'ai mis des commentaires qui devraient être assez explicite. MAIS :
1) c'est le B A BA c'est vraiment qu'une introduction aux vues pour montrer leur puissance.
2) on peut créer les vues par code comme je l'ai fait mais il y a un assistant qui va pas mal pour les vues pas trop compliquées. Il m'est difficile de t'expliquer par écrit comment marche cet assistant. Essaie par Fichier Nouveau Vue Assistant.
3) les vues que j'ai construites ici ne peuvent pas mettre à jour la table patient. Pour cela il faut faire une vue 'updatable' et donc avoir la structure exacte de la table (là je n'ai fait que des suppositions !!). Ces vues 'updatable' imposent la connaissance de la notion de bufferisation (c'est pas trop compliqué) et des commandes TABLEUPDATE et TABLEREVERT (ca, ça peut l'être) ...
4) les vues que je crée ici sont dites 'paramétrées' car .. elles ont un paramètre ! Elles rendent un résultat à leur ouverture (avec USE) mais on peut ensuite modifier le paramètre et redemander le résultat avec la commande REQUERY()

* on crée les variables qui vont permettre de paramétrer les vues
* (de définir le filtre)
STORE "" TO lcidpatient, lcpatient, lcsecu, lcville
* on ouvre la table. En sécurité, je ne veux pas qu'on puisse la modifier
USE patient ALIAS patient SHARED AGAIN NOUPDATE IN 0
* on crée la base de données. Cette base ne contiendra que les vues (on n'y met pas les tables)
* Ca ne dérange pas du tout VFP qui est très gentil ...
* on peut aussi le faire visuellement.
CREATE DATABASE toubib
* on crée une première vue qui nous donne la ligne de la table patient qui correspond
* à une identité donnée.
CREATE SQL VIEW patient_clef AS ;
SELECT * FROM patient WHERE idpatient = ?lcidpatient
* Cette vue va nous donner la liste des patients dont le nom a une certaine caractéristique :
* lcpatient = "BOUTEFLIKA" : on cherche les patients dont le nom est BOUTEFLIKA
* lcpatient = "BOU%" : on cherche les patients dont le nom commence par "BOU"
* lcpatient = "%BOU%" : on cherche les patients dont le nom contient "BOU"
* lcpatient = "BOU??" : on cherche les patients dont le nom a 5 lettres et commence par BOU
CREATE SQL VIEW patient_liste_alpha AS ;
SELECT idpatient, nom, prenom, datnaiss, sexe ;
FROM patient WHERE nom LIKE ?lcpatient ;
ORDER BY nom, prenom, datnaiss DESCENDING, sexe
* La même chose mais on cherche les patients selon leur numéro de sécurité sociale
CREATE SQL VIEW patient_liste_secu AS ;
SELECT idpatient, secusocial, nom, prenom, datnaiss, sexe ;
FROM patient WHERE secusocial LIKE ?lcsecu ;
ORDER BY nom, prenom, datnaiss DESCENDING, sexe
* on veut tous les patients d'une ville donnée
CREATE SQL VIEW patient_liste_ville AS ;
SELECT ville, idpatient, nom, prenom, datnaiss, sexe ;
FROM patient WHERE ville LIKE ?lcville ;
ORDER BY ville, nom, prenom, datnaiss, sexe
* maintenant que les vues sont créées, on va les utiliser. Elles s'ouvrent comme une table
* (sauf qu'il ne faut pas mettre SHARED)
lcpatient = "M%"
SELECT 0
USE toubib!patient_liste_alpha ALIAS pla
BROWSE NOWAIT
GO TOP
* je récupère une clef d'un patient
lcidpatient = pla.idpatient
* et je veux la ligne qui correspond à ce patient
SELECT 0
USE toubib!patient_clef ALIAS unpatient
BROWSE NOWAIT
* je veux tous les patients dont le nom de la ville contient NO
lcville = "%NO%"
SELECT 0
USE toubib!patient_liste_ville ALIAS patient1ville
BROWSE NOWAIT

*Maintenant je veux les patients dont le nom commence par N
* lcpatient = "N%"
* SELECT pla
* REQUERY()
* BROWSE NOWAIT


Bon courage !
Jean
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
24 août 2010 à 10:00
Je vous remercie Jean, Michel et Mike pour toute l'aide que vous me procurer.

Je suis très consciente des efforts que vous faites pour expliquer tous cela à un novice.

Je vous tiendrais au courant sur l'évolution de mon application.

Merci
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
25 août 2010 à 12:40
Bonjour Jean,

J'ai exécuté ton programme et ça marche à merveille.

Ce que je n'arrive pas à comprendre est :

Si j'ai 10 tables , chaque table contenant en moyenne 10 champs. Est ce que cela veut dire que je dois automatiquement créer 100 vues ?

Merci
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
25 août 2010 à 12:46
Bonjour Michel,

Tu as raison, on peut ajouter une propriété à un formulaire à partir du menu formulaire (VFP6), mais alors pourquoi j'ai eu le message d'erreur
propriété addproperty introuvable lorsque j'ai tapé ThisForm.addproperty("monalias") dans le load event ?

Merci
0
babazou38 Messages postés 22 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 1 décembre 2010
25 août 2010 à 14:57
NON !

Grossièrement, il te faudra une vue 'updatable' pour pouvoir mettre à jour la table. Toutes les autres vues dépendent de tes recherches, de tes besoins, ... Dans mes applications, je dois avoir une moyenne d'une quinzaine de vues par table ... mais je suis un fan des vues !

Tu peux aussi écrire des choses comme :
lcnom = "%HAK%"
SELECT idpatient, nom, prenom, ... ;
FROM patient ;
WHERE nom LIKE ?lcnom OR prenom LIKE ?lcnom OR VILLE LIKE ?lcnom ;
...

Le langage SQL est extrémement puissant en particulier dans VFP (il faudra donc faire un peu attention à respecter la norme si tu veux plus tard mettre tes données sur SQL Server (ou autres ..)).

2 chose à faire maintenant :
- essayer de créer une vue avec l'assistant; tu trouveras une option 'voir la requête' (View SQL code) dont tu pourras copier le contenu dans .prg et l'améliorer.
- Vérifier que chaque ligne de toutes tes tables ait un identifiant unique (ton idpatient doit être unique par exemple pour la table patient). Sur ce point, VFP9 apporte beaucoup (champ integer) pr VFP6.

Bonne journée
Jean
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
25 août 2010 à 17:26
Hakima,

as-tu essayé le AddProperty dans l'init?
0
Mike Gagnon Messages postés 381 Date d'inscription vendredi 15 octobre 2004 Statut Membre Dernière intervention 24 octobre 2013 2
25 août 2010 à 22:03
Hakima,

Si tu essaye d'ajouter une propriété et tu utilise un Formset, la propriété doit etre ajoutée au niveau du formset (une des raison pour ne pas utiliser des formset)
thisformset.addproperty('monalias')


Mike Gagnon
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
26 août 2010 à 11:57
Bonjour messieurs,

addproperty ne marche ni dans la form, ni dans la formset. Je l'ai mis dans le init et dans le load et le même message d'erreur s'affiche:"propriété addproperty introuvable".

je crois que ce n'est pas la version, je vais chercher d'où cela peut venir.

Merci
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
22 nov. 2010 à 10:50
Bonjour messieurs,

J'espère que vous vous portez bien!

Je voudrais savoir s'il existe une version de vfp gratuite, du genre les vesions express téléchargeable sur le net.

Merci
0
babazou38 Messages postés 22 Date d'inscription dimanche 27 janvier 2008 Statut Membre Dernière intervention 1 décembre 2010
22 nov. 2010 à 15:35
Dans l'impossibilité de supprimer mon message qui a provoqué une vive réaction de participants à cette réunion, je veux bien retirer ce que j'ai "dit" ... mais je ne retirerai pas ce que j'ai entendu.

Pour préciser :

"b) les mise a jour VFP en boite sont toujours commercialisées et le produit toujours disponible en abonnement MSDN"

Il reste le problème soulevé : quelqu'un qui veut se mettre à VFP9 ne peux plus le faire facilement. J'ai toujours fait acheter VFP9 à mes clients, cela va devenir compliqué (cher?). Comme va devenir difficile la promotion de mon produit préféré.

Mes excuses aux anglicistes émerites que j'ai choqués.

cordialement,
Jean
0
cs_hakima75 Messages postés 29 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 13 septembre 2011
24 nov. 2010 à 10:01
Bonjour à tous le monde,

Comment pourrais-je faire pour gérer l'activation et la désactivation des zones de textes ?

Je m'explique : j'ai formulaire contenant deux zones de texte "a" et "b", si l'utilisateur ne saisi pas une valeur correcte dans "a" alors il ne dois pas être en mesure de saisir dans "b".

Merci beaucoup.
0
Rejoignez-nous