message: Error: invalid file handle used

message: Error: invalid file handle used - VB/VBA/VBS - Programmation

Marsh Posté le 12-04-2005 à 10:08:36    

Bonjour,
Je vous expose mon problème
J ai 2 jobs qui tourne en même temps et chacun doit écrire dans un fichier log
Dans chaque job, la fonction ecrirefichierlog ouvre le fichier log, ecrit une ligne puis ferme le fichier log mais il y a des pb:
L un des job se plante de temps en temps avec le message:
Error: Invalid file handle used
Comment tester dans le fonction ecrirefichierlog si le fichier log est disponible car je pense que le pb est là?????
Merci de vous pencher sur mon problème

Reply

Marsh Posté le 12-04-2005 à 10:08:36   

Reply

Marsh Posté le 12-04-2005 à 10:23:45    

Petite information supplémentaire
Il arrive que j ai le message: permission refusée!!!
merci

Reply

Marsh Posté le 12-04-2005 à 10:25:38    

Petite précision il m arrive d avoir le message: permission refusée!!!!!

Reply

Marsh Posté le 12-04-2005 à 10:30:49    

Je pense que tes deux jobs écrivent dans le même fichier de log?
 
Le problème vient de là j'imagine. Tu dois ouvrir le fichier en mode exclusif (pour y écrire ça paraît logique) dans un des jobs et au même moment l'autre job essaie de faire la même chose donc forcément ça merde!
 
A mon avis, tu as deux solutions (mais j'ai pas la science infuse et peut-être qu'il y a mieux à faire):
1/ Tu écris dans deux fichiers séparés
2/ Dans l'écriture du fichier log tu fais une gestion d'erreur qui teste que le fichier log n'est pas déjà ouvert et si c'est le cas, tu boucles en attendant qu'il soit disponible
 
Voilà, j'espère que c'est clair et que cela te convient. Si c'est pas le cas, essaie de fournir les bouts de codes qui plantent.

Reply

Marsh Posté le 12-04-2005 à 10:46:25    

Merci mais comment faire la gestion d erreur qui teste que le fichier n est pas deja ouvert et je boucle en attendant
merci

Reply

Marsh Posté le 12-04-2005 à 14:33:28    

Regarde dans l'aide de VB :-)
 
Mais en gros, ça donne ça:
 
Sub EcrireFichierLog
  Dim ...
  On Error Goto Gestion_erreur
  ...
  Exit Sub
Gestion_erreur:
  Select case Err.Number
  Case le_no_erreur_fichier_deja_ouvert
    Boucle
  Case Else
    MsgBox Err.Number & " " & Err.Description
  End Select
 
Voilà... Si jamais les "..." c'est ton code standard. Fais attention à ne pas oublier le "Exit Sub" tout à la fin (avant l'étiquette) sinon ton prog passera toujours par le code de gestion d'erreur et c'est pas le but.
 
Ensuite, concernant la boucle, le plus simple serait de faire un simple "Resume" (c'est à dire qu'il va revenir sur la ligne de code qui a généré l'erreur) mais en faisant ça, tu risque de créer une boucle infinie si le fichier n'est jamais libéré...  
 
Donc tu as intérêt à faire une boucle à la main qui tourne pendant un certain nombre de fois. Pour ça tu peux soit utiliser un timer soit un boucle for...next
 
Mais bon ce qui me paraît étrange c'est que ton programme essaie d'écrire au même moment dans le même fichier... Pourrais-tu fournir le code?
 
A+

Reply

Marsh Posté le 14-04-2005 à 15:45:17    

Je vous remercie
c'est ok

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed