PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Blocage de fichiers HF (Windev8/WinNt 4)
Blocage de fichiers HF (Windev8/WinNt 4)
Started by marc.oliva, Aug., 30 2004 12:26 PM - 4 replies
Posted on August, 30 2004 - 12:26 PM
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
Posted on August, 30 2004 - 10:56 AM
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
?

Merci.

Marc

Posted on August, 30 2004 - 4:43 PM
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
Posted on August, 30 2004 - 5:58 PM
>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
Posted on August, 30 2004 - 7:44 PM
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