Détecter si un fichier est déjà ouvert; en mode exclusif
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 2009
-
29 mai 2007 à 12:37
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 2009
-
30 mai 2007 à 09:07
Bonjour
Question probablement déjà posée mille fois toutefois je ne trouve aucune source (ni sur Codyx ni sur Google) : comment puis-je savoir si un fichier est déjà ouvert en mode Exclusif ?
Le code ci-dessous (pas de moi) fonctionne très bien afin de savoir si un fichier est déjà ouvert ou pas. Toutefois, je souhaite aller plus loin : j'ai développé une application VB6 qui utilise un DB de type MS Access. J'ai 400 utilisateurs potentiels et il arrive que j'en ai plus de cinquante concurrents. Pour éviter que ma DB explose, j'en fais cinq copies le matin et l'interface VB interroge, au hasard, une des cinq copies. C'est ma façon à moi de faire du load balancing à moindre frais (ceci parce que je n'ai pas encore eu la possibilité de migrer vers quelque chose de plus stable que MS Access).
Mon problème est le suivant : si une des DB est ouverte en mode exclusif, le programme plante. Que la DB soit ouverte importe peu, un utilisateur en plus n'est pas un problème. Toutefois si la DB est ouverte en mode exclusif, là c'est pas bon.
Auriez-vous une idée ?
Private Declare Function lopen Lib "kernel32" Alias "_lopen" _
(ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
Function IsFileOpened(ByVal sFileName As String) As Boolean
' Initialize file handle and error variable.
lastErr = 0
' Open for for read and exclusive sharing.
hFile = lopen(sFileName, &H10)
' If we couldn't open the file, get the last error.
If hFile = -1 Then
lastErr = Err.LastDllError
Else
' Make sure we close the file on success.
lclose (hFile)
End If
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 30 mai 2007 à 09:07
Merci Renfield toutefois je préférerais un truc plus "propre".
En outre, cela risque de rendre un peu plus long ma procédure. Je m'explique : lors du lancement de mon programme, je scanne le folder où j'ai mes cinq DB; ceci afin de savoir combien il y a de DBs (cinq aujourd'hui mais peut-être plus demain). Pour chaque fichier, j'aimerais détecter très rapidement si il est ouvert en mode exclusif.
Ce que j'ai déjà fait et c'est un peu ce que tu proposes, c'est d'ouvrir chaque base de données avec MS Access. Si cela ne marche pas (on error) alors ce que quelqu'un a ouvert la DB en mode exclusif => je skippe ce fichier.
Toutefois, c'est horriblement lent. C'est pourquoi je tente de trouver un code plus rapide; peut-être basé sur une API et pas sur MSAccess.