Code réseau avec Visual Foxpro 6.0

Fermé
samy_mada Messages postés 1 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 25 janvier 2005 - 25 janv. 2005 à 12:39
 Nordine - 2 nov. 2009 à 13:56
Bonjour à tous et bonne année !!!
Je programme en Visual Foxpro 6.0 depuis quelques temps et j'ai essayé de faire une application tournant en réseau, MAIS elle montre une certaine lenteur et je souhaites votre aide pour resoudre ce GRAND PROBLEME pour moi.
Si possible, un extrait de code tentant d'ajouter un enregistrement dans une table utilisée par plusieurs postes simultanément.
Merci de votre aide.
A voir également:

6 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 5
25 janv. 2005 à 16:31
Bonjour Samy,

Pour ajouter un enregistrement dans une table utilisée par plusieurs postes de travail, il y a de nombreuses méthodes (comme d'habitude avec VFP).

Je te propose de poster ici le bout de code par lequel tu ajoutes un enregistrement actuellement (en monoposte), et on fera les vérifications dessus, et les modifs pour que ça tourne sans problème en réseau (précise si tous les postes sont en réseau local, ou bien s'il y a des postes distants)

Globalement, il faut bien sur ouvrir les tables en shared, bien choisir son buffermode, la façon dont on va verrouiller les fichiers pour la mise à jour, et bien utiliser le tableupdate.

Dès que tu auras donné plus d'infos sur ton code actuel, on voit tout ça en détail.

Si ton appli devient lente en réseau, vérifie en premier la qualité de ton réseau physique (cartes, switches, etc...) et surtout, surtout, sois certain que ton antivirus ne scanne pas les dossiers où sont tous tes fichiers de données.
0
samy_de_mada
26 janv. 2005 à 08:14
Bonjour Monsieur Michelatoutfox,
Je vous remercie pour la réponse.
Voici ce que je fais en monoposte :
***************************
Exemple, j'ajoute 1 enregistrement à la table REF_PERS
Dans la procédure Load du formulaire, j'indexe la table sur le champ PERS_MATR
Sele REF_PERS
Index on PERS_MATR to REF_PERS1
Dans la procédure Click du bouton Enregistrer, je fais
Sele REF_PERS
Seek w_matr (w_matr étant le variable où j'affecte le matricule et w_noma le variable du nom de la personne)
If .not. found()
Append blank
Repla PERS_MATR with w_matr, PERS_NOMA with w_noma
Else
Repla PERS_NOMA with w_noma
Endif
****************
NB : - Je ne sais pas comment utiliser ces buffermode, tableupdate, .... si vous pouvez m'aider la-dessus !!!
- Tous les postes sont en réseau local
Je réitère ici mes sincères remerciements
Samy
0
roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009 2
2 oct. 2008 à 07:34
c'est moi yassin
j'ai besoin mon ami de ton experience:
j'ai le programme suivant :
select 99
go top
messagebox ("L'exportation du fichier sur le Bureau est Déconseiller",0+64,"Confirmation avant l'exportation")
chemin1=getdir()
set defa to &chemin1
if chemin1<>space(10)
copy to besoin type xl5
endif
set defa to &chemin
problème
j'au une table et je vais la divisé en plusieur pour l'enregistre sur un fichier excel sur plusieur feuillets, le problème c'est comment je spécifier sur cette commande copy to besoin type xl5 la feuille xls
0
michelatoutfox > roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009
2 oct. 2008 à 10:21
Bonjour,

regarde donc sur AtoutFox, il y a une étude complète par Mike Gagnon sur ce sujet (http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000073
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 5
26 janv. 2005 à 10:22
Bonjour Samy,

Si tu le veux bien, on va commencer par le début !

en premier, ta table ref_pers : il ne me semble pas logique de recréer l'index à chaque fois que tu fais un load du formulaire.
il serait préférable de créer un index structurel, qui serait automatiquement ouvert en même temps que ta table, et surtout, mis à jour automatiquement. Parceque là, comme tu le fais, ton index est faux! Et c'est long, une indexation sur un idx en réseau!

en fenêtre de commande:
use ref_pers exclusive in 0
sele ref_pers
modif struct


et tu ajoutes un index sur le champ pers_matr (tu cliques sur la flèche index dans l'onglet champ, puis tu vas dans l'onglet index et tu choisi le type d'index - régulier ou candidat ou primaire)

Du coup, tu n'as plus besoin d'indexer dans ton load (je suppose que ta table est ouverte dans l'environnement de données du formulaire).

Ensuite, dans ton click, au lieu de faire seek w_matr, puis if not found( ), etc... je te propose
if indexseek ;
        (w_matr , .F. , "ref_pers" , "pers_matr")

        update ("ref_pers") ;
             set pers_noma=w_noma ;
             where pers_matr = w_matr

else

        insert into ("ref_pers") ;
            (pers_matr, pers_noma) ;
            values ;
            (w_matr, w_noma) 

endif


ou bien
if indexseek ;
(w_matr , .T. , "ref_pers" , "pers_matr")
replace ;
pers_noma with w_noma
else
insert into ("ref_pers") ;
(pers_matr, pers_noma) ;
values ;
(w_matr, w_noma) 
endif


On peut maintenant s'occuper des buffermode et tableupdate, mais il serait bien que tu lises l'aide en premier.

En mode création du formulaire, sur les propriétés, tu vas sur l'onglet données, et là, tu choisis un buffermode optimiste (tu étudieras la différence entre le pessimiste et l'optimiste).
Quand tu as un buffermode, la table (ou l'enregistrement) est verrouillée par le poste qui demande un insert, un replace, et les modifs ne sont réellement écrites que quand tu fais un tableupdate.

C'est le minimum nécessaire pour travailler en réseau...

je te conseille de fréquenter régulièrement le forum technique en français consacré exclusivement à foxpro : news://news.microsoft.com/microsoft.public.fr.fox (en mode news - outlook express, par exemple)
http://www.microsoft.com/france/vfoxpro/newsgroup/default.asp en mode web

et le site de l'association http://www.atoutfox.org

Michel
0
Bonsoir Michel,
Je vous Re-re-re-re-mercies beaucoup pour ce dépannage.
Je vais m'y atteler et suivre vos conseils.
Le problème pour l'index structurel, c'est que supposons cette table ref_pers, est-il possible de l'indexer sur plusieurs champs?
Exemple, cette table sera utilisée dans divers formulaires dont les index sont différents, dans le formulaire x_001 (ce n'est qu'un exemple) le fichier devrait être indexé sur pers_matr, et sur le formulaire x_002 sur pers_dnai (date de naissance).
La question est la suivante :
La table ref_pers, comment devrait-on l'indexer? et comment choisir ces fichiers index lors de l'ouverture de la table.
Merci d'avance.
Samy
0
roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009 2
23 août 2008 à 16:35
salut
je suis débutant dans la programmation en vfp6.0, j'ai crée pas mal d'applications mais mon probléme c'est comment crée un executable, pour l'instant j'utilise le langage vfp6.0 pour executé mes applications.
stp la façon de faire un fichier executable ugrent.......
0
michelatoutfox > roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009
23 août 2008 à 18:52
Bonjour,

pour créer un exécutable, il faut que tu aies un "projet". Un projet VFP est un ensemble qui référence tous les fichiers qui seront compilés (les forms, classes, reports, codes, etc...).

Si tu as déjà un projet, il te suffit de "Générer" ton exécutable en cliquant sur le bouton Générer du gestionnaire de projet, ou bien en cliquant sur le menu Projet->Générer. Une fenetre te donne alors le choix du type de génération, il suffit de choisir "Exécutable Win32"

Si tu n'as pas encore de projet (tout ton code et tes forms, classes, reports, et autres sont simplement dans des dossiers), il te faut en créer un: tu cliques sur le menu Fichier->Nouveau->Projet, et une fois que tu as créé ce projet vide, tu vas ajouter tous ses composants pour chaque onglet.

Si tu veux retrouver d'autres développeurs VFP francophones, nous avons créé une association http://www.atoutfox.org sur laquelle tu trouveras de nombreux exemples.
Il y a aussi un newsgroup technique (en français) news://news.microsoft.com/microsoft.public.fr.fox que tu peux aussi avoir en mode web sur http://www.microsoft.com/...

A bientot!
0
roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009 2 > michelatoutfox
23 août 2008 à 22:10
merci je vais éssaié
0
roi_yassin Messages postés 49 Date d'inscription dimanche 6 janvier 2008 Statut Membre Dernière intervention 29 mai 2009 2 > michelatoutfox
23 août 2008 à 22:28
j'ai éssaié mais j'ai pas trouvé l'option "Exécutable Win32" sur le menu Projet->Générer, ce que j'ai trouvé c'est: "Généré executable" toujour sans résultat pourquoi à ton avis?????????????????????
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 5
26 janv. 2005 à 15:55
Bonjour Samy,

Le gros avantage d'un index structurel, c'est qu'il contient plusieurs clé d'index (les tag).

Tu les crées soit avec un modif struc (qui ouvre le générateur de table), soit par la commande INDEX ON Expression TAG nom_de_repère

Tu crées les tag qui te sont nécessaires, avec les expression qui te vont bien. Et quand tu en as besoin, SET ORDER TO nom_de_repère, ou set key to... , ou indexseek...

Si tu veux qu'on regarde tes index nécessaires, fais passer la structure de ta table.

Autre chose, pour l'accès en réseau, le plus simple est d'ouvrir les tables dans l'environnement de données des formulaires, et d'utiliser un unvironnement de données privé pour chaque formulaire (propriété DataSession du Formulaire mise à 2).

Michel
PS: bienvenue dans l'assoc!
0
Bonjour Michel,
Toujours un grand merci pour ton aide, je commence à te tutoier ...
Le plus simple, c'est que je te fais une petite application (tables, formulaires, états, menus, programme, procédures) à ma façon et je te le passe pour lundi. Le seul problème pour cela, c'est comment te faire passer l'application?
C'est à partir de là que tu me corriges sur mes faiblesses pour que je puisse me rattraper et me mettre à votre niveau d'il y a des années car je comprends que j'ai du retard (rien qu'en te lisant), un énorme retard.
Merci.
Samy
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 5
27 janv. 2005 à 10:47
Pas de problème, Samy

pour me faire passer ton projet, tu zippes tout, et tu me l'envoies par mail (mon adresse est visible sur le site de l'assoc).

Michel
0

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

Posez votre question
Bien reçu
0
interessevfp Messages postés 3 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 29 octobre 2007
29 oct. 2007 à 19:47
salut monsieur
je v'en prie de m'aider
svp suis debutant en programmation vfp 6
j'ai cree une vue distante vue1 qui accede a la base de donnees qui se trouve dans le serveur, dans le bouton ENREGISTRER du formulaire j'ai ecrie le code suivant:
select 1
use vue1
locate for id_employer= m.id_employer
if .not.found()
insert into vue1 from memvar
else
update vue1 set nom=m.nom, prenom=m.prenom where id_employer=m.id_employer
endif
= tableupdate(.T.)
thisforme.annuler.valid

** commentaire
vue1: est une vue distante (avec une connexion reussie au serveur)qui accede à une table employer qui se trouve dans la base de donnees "gestion" creee dans le serveur
par le gestionnaire de la base de donnees visual fp6
pour les variable à saisir dans le formulaire j'ai gardé les champs de la table et j'ai leur ajeter le prefix m.(exp: le nom du champ est nom et la variable à saisir est m.nom)
LE PROBLEME qui se pose c'est la vue1 est mise à jour mais la table EMPLOYER qui se trouve dans le serveur n'est pas mise a jour
svp si vous pouvez m'aider la desuus et merci infiniment
0

Discussions similaires