cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 septembre 2011
-
12 août 2010 à 12:57
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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 ?
babazou38
Messages postés22Date d'inscriptiondimanche 27 janvier 2008StatutMembreDerniè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 ...
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 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?
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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.
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 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
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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.
babazou38
Messages postés22Date d'inscriptiondimanche 27 janvier 2008StatutMembreDerniè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
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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 ?
babazou38
Messages postés22Date d'inscriptiondimanche 27 janvier 2008StatutMembreDerniè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.
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 20132 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')
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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.
babazou38
Messages postés22Date d'inscriptiondimanche 27 janvier 2008StatutMembreDerniè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.
cs_hakima75
Messages postés29Date d'inscriptionmardi 4 août 2009StatutMembreDernière intervention13 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".