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
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
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
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)