Bonjour à tous !
J'ai créé une application en deux parties : Une partie client et une partie serveur.
La partie client écrit des messages dans une table <Impression> d'une base HFSQL et la partie serveur boucle pour vérifier si des messages on été écrits dans la table puis les traite le cas échéant.
L'application fonctionnait très bien jusqu'à ce que je décide de faire de la partie client un composant interne.
Ce composant interne partage l'analyse de l'application qui le reçoit, et ne connait donc plus le fichier <IMPRESSION> que je déclare de la manière suivante :
PROCEDURE PRIVÉE PR_DeclareExterne()
sUneListe est une chaîne
sFichier est une chaîne
sUnAlias est une chaîne
nIndice est un entier=1
// Recherche de toutes les tables sur la connexion gcnxConnexionBD
sUneListe=HListeFichier(gcnxConnexionBD, hLstTout)
// Extraction de la première table
sFichier=ExtraitChaîne(sUneListe,nIndice, RC)
// Parcours des tables une à une jusqu'à la dernière
TANTQUE sFichier<>EOT
// sUnAlias contient le nom logique de la table
sUnAlias=ExtraitChaîne(sFichier,1, ".FIC")
// Déclaration externe de la table en cours
HDéclareExterne("C:\Program Files\PC SOFT\Serveur HF\BDD\Impression\" +sFichier, "DISTANT_"+sUnAlias)
// Passage à la table suivante
nIndice++
sFichier=ExtraitChaîne(sUneListe,nIndice, RC)
FIN
La déclaration se déroule correctement et je retrouve mes fichiers en les listant comme suit :
Puis écrit dans cette table de la manière suivante :
EXTERNE Distant_Impression
Distant_Impression.appelant=NetAdresseIP()
Distant_Impression.Date=DateSys()
Distant_Impression.Heure=HeureSys()
Distant_Impression.Fichier=SAI_Message_a_envoyer
Distant_Impression.Traite=Faux
HAjoute(Distant_Impression)
Je lance la partie serveur de l'application puis le client en mode test et obtiens à ce moment là l'erreur suivante :
Citation :
Le fichier <DISTANT_Impression> n'a pas été ouvert avec des droits en écriture. Impossible d'effectuer l'opération.
J'ajoute donc poliment ceci avant d'effectuer l'ajout dans la table :
HOuvre(Distant_Impression, hOLectureEcriture)
Et j'obtiens l'erreur système suivante :
Citation :
Impossible d'ouvrir le fichier <C:\Program Files\PC SOFT\Serveur HF\BDD\Impression\Impression.FIC>. Détail de l'erreur système : Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus. (32)
Très bien. Je décide quand même de tester le client en fermant toutes les applications qui pourraient utiliser cette table, il fonctionne en lecture et écriture. Il ne fonctionne en écriture que s'il est le seul à utiliser cette table. Avoir le centre de contrôle HFSQL lancé pendant l'exécution en bloque l'accès en écriture à partir du composant interne client.
J'ai tous les droits sur cette base et cette table.
En quoi le fait d'accéder à une table déclarée externe est-il différent de l'accès à une table contenue dans l'analyse en cours ?
Est-ce que quelqu'un a une idée pour résoudre ce problème ?
Merci d'avance