Posez votre question Signaler

Code réseau avec Visual Foxpro 6.0

samy_mada 1Messages postés 5 mai 2004Date d'inscription - Dernière réponse le 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.
Lire la suite 

Code réseau avec Visual Foxpro 6.0 »

65 réponses
Réponse
+0
moins plus
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.
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
roi_yassin- 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
michelatoutfox - 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)
Ajouter un commentaire
Réponse
+0
moins plus
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
roi_yassinmichelatoutfox - 6 janv. 2009 à 17:55
salut
j'ai besoin de savoir comment configurer vfp (par quelle commande) pour que mon application utilise la langue arabe de mon clavier.
but : saisir des données et enregistrer sur la table en arabe, comment configurer l'application pour que la langue du clavier utilisé par défaut est la langue arabe
Nordine - 2 nov. 2009 à 13:56
Bonjour !
Pour avoir la langue arabe par defaut, on fais l'appel à une librairie c++.
roi_yassinmichelatoutfox - 31 janv. 2009 à 07:28
salut
pour lançé l'apérçu d'un état et vers l'imprimante on fait comme ça :
Select 1
Go Top
Report Form compt Preview
Report Form compt Noconsol To Print Prompt

*--------------
question
pour lançé l'apérçu d'une étiquette et vers l'imprimante on fait comment???????????
Ajouter un commentaire
Réponse
+0
moins plus
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!
Samy - 27 janv. 2005 à 06:51
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Bien reçu
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « Code réseau avec Visual Foxpro 6.0 » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?