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
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.
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:
- Code réseau avec Visual Foxpro 6.0
- Microsoft visual c++ runtime - Guide
- Visual petanque - Télécharger - Sport
- Visual paradigm - Télécharger - Gestion de données
- Visual basic - Télécharger - Langages
- Visual basic 6.0 download - Télécharger - Divers Utilitaires
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
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.
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.
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
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:
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
ou bien
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
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
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
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
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
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.......
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.......
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
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!
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!
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
23 août 2008 à 22:10
merci je vais éssaié
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
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?????????????????????
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
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!
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!
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
26 janv. 2005 à 08:14
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
2 oct. 2008 à 07:34
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
2 oct. 2008 à 10:21
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