|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Blocage de fichiers HF (Windev8/WinNt 4) |
Débuté par marc.oliva, 30 aoû. 2004 12:26 - 4 réponses |
| |
| | | |
|
| |
Posté le 30 août 2004 - 12:26 |
Bonjour,
Mon application est un application réseau classique, les fichiers de données sont donc sur un répertoire partagé accessible par tout le monde. Elle doit permettre la gestion multi utilisateurs, or c'est sur ce point qu'il y a un problème. A partir du moment où deux clients exécutent le programme, les fichiers de données sont bloqués.
Voici quelques détails sur l'implémentation (seul le code concernant la base de données est montré): --------------------------------------- Code d'initialisation du projet : HMode(hModeMulti) HSurErreur("*", hErrBlocage,"_EchecBloquage" )
Code d'initialisation de la 1ere fenêtre du projet : demarrageApplication()
Procédure démarrageApplication() : cSigma = allouer une BaseDeDonnees(adrFicDonnees)
Constructeur de la classe BaseDeDonnees(sAdresse est une chaine) : HSubstRep(".", adresseDonnees) QUAND EXCEPTION DANS b est un booléen = HOuvre("*") FAIRE :etat = Faux SINON SI PAS b ALORS //si l'ouverture s'est mal passée :etat = Faux SINON //si l'ouverture s'est bien passée :etat = Vrai FIN FIN ---------------------------------------
Une solution ?
Marc Oliva |
| |
| |
| | | |
|
| | |
| |
Posté le 30 août 2004 - 10:56 |
Dans le code d'initialisation il y a effectivement un HMode("*", hmodemulti) qui est bien pris en compte car lorsque je le change en hmodemono il est impossible de lancer l'application dès qu'un premier s'est connecté.
Le programme commence par reconnaitre l'utilisateur grâce à son nom d'utilisateur, s'il n'est pas reconnu il doit s'enregistrer. C'est lors de l'appuie sur le bouton OK de cette fenêtre (et donc du HAjoute) que le moteur HF me signale que le fichier est bloqué par un autre utilisateur qui a lancé l'application.
J'avoue ne pas vraiment comprendre et me demande si ça ne vient pas de l'OS. Pour ça j'ai fait un mini projet mimant les mêmes actions et ça fonctionne normalement, il n'y a pas de blocage lors d'un HAjoute avec plus d'un utilisateur.
Envoyez votre mail sur marc.oliva@snecma.fr et je vous enverrai ce qu'il faut de façon à ce qu'il ne fasse pas + de 2Mo.
Merci, Marc Oliva
=?ISO-8859-1?Q?BOUDOT_Sébastien_-_Blue_River_System?= wrote:
N'ouvrez pas vos fichiers cela ne sert pas a grand chose ( Le moteur HF
se débrouille )
Dans votre code d'initialisation du projet, il est bien spécifié que les
fichiers sont accessibles en multi-utilisateur ?
De plus, les actions de modif ou supression débloquent l'enregistrement.
Si vous pouvez m'envoyer un exemple ( projet zipé de moins de 2mo ) j'aimerais bien voir ca. Je developpe des applications réseau depuis pas
mal de temps et je n'ai jamais eu ce pb. Marc Oliva wrote: Quelle est la question ?
Qd on est dedans, on en oublie le principal... Je fais effectivement des H[De]Bloque ds mon code, de la même manière que
tu le précises mais ils n'interviennent pas dans la séquence d'instructions qui foire.
Après avoir ouvert mes fichiers (avec un HOuvre("*"))situés sur un répertoire distant, au moment de faire des HAjoute tout simple, ça ne fonctionne pas.
Ca ne fonctionne que si l'utilisateur est seul. SI un deuxième se connecte à la base (ie double clique sur le .exe), le fichier est bloqué (msg d'erreur HF après un long timer me disant qu'il est bloqué) et il ne peut dont
pas
écrire dans le fichier. Quand je fais toute cette cuisine en local (C:\monRerpetoire) ça fonctionne sans problème, par contre, dès que c'est une adresse distante (\\laMachine\\cheminDuRépertoirePartagé) ça ne fonctionne plus.
La question est donc de savoir pourquoi ne puis-je plus écrire dans mes fic
|
| |
| |
| | | |
|
| | |
| |
Posté le 30 août 2004 - 16:43 |
Quelle est la question ?
Pour gerer les blocages en général je procede de la facon suivante :
* On ne bloque les enregistrements qu'au moment de faire la mise a jour ( supression et modification ) pour que le temps de blocage réél soit le plus court possible ( quitte à recharger l'engeistrement juste avant de le modifier ou supprimer )
* Si l'enregistrement ne doit pas etre modifié, on réalise une lecture non bloquante.
* On teste systématiquement le blocage.
* Si on travaille sur des enregistrements qui doivent etre mises a jour sur un seul poste à la fois, je préfere passer par un flag de blocage ( ou un fichier lié ) qui me permet de connaitre qui bloque, depuis combien de temps etc. Mais l'enregistrement lui meme n'est pas bloqué au niveau de la base de données.
Marc Oliva wrote:
Bonjour,
Mon application est un application réseau classique, les fichiers de données sont donc sur un répertoire partagé accessible par tout le monde. Elle doit permettre la gestion multi utilisateurs, or c'est sur ce point qu'il y a un problème. A partir du moment où deux clients exécutent le programme, les fichiers de données sont bloqués.
Voici quelques détails sur l'implémentation (seul le code concernant la base de données est montré): --------------------------------------- Code d'initialisation du projet : HMode(hModeMulti) HSurErreur("*", hErrBlocage,"_EchecBloquage" )
Code d'initialisation de la 1ere fenêtre du projet : demarrageApplication()
Procédure démarrageApplication() : cSigma = allouer une BaseDeDonnees(adrFicDonnees)
Constructeur de la classe BaseDeDonnees(sAdresse est une chaine) : HSubstRep(".", adresseDonnees) QUAND EXCEPTION DANS b est un booléen = HOuvre("*") FAIRE :etat = Faux SINON SI PAS b ALORS //si l'ouverture s'est mal passée :etat = Faux SINON //si l'ouverture s'est bien passée :etat = Vrai FIN FIN ---------------------------------------
Une solution ?
Marc Oliva
|
| |
| |
| | | |
|
| | |
| |
Posté le 30 août 2004 - 17:58 |
>Quelle est la question ?
Qd on est dedans, on en oublie le principal... Je fais effectivement des H[De]Bloque ds mon code, de la même manière que tu le précises mais ils n'interviennent pas dans la séquence d'instructions qui foire.
Après avoir ouvert mes fichiers (avec un HOuvre("*"))situés sur un répertoire distant, au moment de faire des HAjoute tout simple, ça ne fonctionne pas.
Ca ne fonctionne que si l'utilisateur est seul. SI un deuxième se connecte à la base (ie double clique sur le .exe), le fichier est bloqué (msg d'erreur HF après un long timer me disant qu'il est bloqué) et il ne peut dont pas écrire dans le fichier. Quand je fais toute cette cuisine en local (C:\monRerpetoire) ça fonctionne sans problème, par contre, dès que c'est une adresse distante (\\laMachine\\cheminDuRépertoirePartagé) ça ne fonctionne plus.
La question est donc de savoir pourquoi ne puis-je plus écrire dans mes .fic ?
Merci.
Marc |
| |
| |
| | | |
|
| | |
| |
Posté le 30 août 2004 - 19:44 |
N'ouvrez pas vos fichiers cela ne sert pas a grand chose ( Le moteur HF se débrouille )
Dans votre code d'initialisation du projet, il est bien spécifié que les fichiers sont accessibles en multi-utilisateur ?
De plus, les actions de modif ou supression débloquent l'enregistrement.
Si vous pouvez m'envoyer un exemple ( projet zipé de moins de 2mo ) j'aimerais bien voir ca. Je developpe des applications réseau depuis pas mal de temps et je n'ai jamais eu ce pb.
Marc Oliva wrote:
Quelle est la question ?
Qd on est dedans, on en oublie le principal... Je fais effectivement des H[De]Bloque ds mon code, de la même manière que tu le précises mais ils n'interviennent pas dans la séquence d'instructions qui foire. Après avoir ouvert mes fichiers (avec un HOuvre("*"))situés sur un répertoire distant, au moment de faire des HAjoute tout simple, ça ne fonctionne pas. Ca ne fonctionne que si l'utilisateur est seul. SI un deuxième se connecte à la base (ie double clique sur le .exe), le fichier est bloqué (msg d'erreur HF après un long timer me disant qu'il est bloqué) et il ne peut dont pas écrire dans le fichier. Quand je fais toute cette cuisine en local (C:\monRerpetoire) ça fonctionne sans problème, par contre, dès que c'est une adresse distante (\\laMachine\\cheminDuRépertoirePartagé) ça ne fonctionne plus. La question est donc de savoir pourquoi ne puis-je plus écrire dans mes .fic ? Merci. Marc |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|