Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
927 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA: Problème Lecture/Ecriture en simultané sur Access

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA: Problème Lecture/Ecriture en simultané sur Access

n°2177013
hush hush
je savais que ça te plairait
Posté le 22-02-2013 à 10:16:44  profilanswer
 

:hello:  
Encore un petit truc chiant à résoudre :o
 
J'ai une base de donnée que je met à jour depuis un l'ordinateur 1.
La bdd se trouve sur le server
Les MàJ de la bdd se font à intervalles réguliers de temps
La MàJ est commandée depuis Excel et se fait en VBA
 
J'ai N<5 autres ordinateurs connectés au Server et qui ont besoin, de temps en temps, d'extraire des données de cette base de données.
Le code d'extraction à été fait en c#, compilé en librairie intégrée à Excel (cette partie à été faite par un développeur)
 
J'ai codé le code pour les update, ça marche plutôt bien, durée de l'update: 1 seconde max (je log le début et la fin de la procédure, environs 3k lignes updatées
 
Problème: si un des N ordinateurs interroge la bdd au moment où ordinateur 1 update la bdd, l'extraction est très lente, et l'update, qui d'habitude prends 1 seconde freez et met entre 14 et 32 secondes (durée observées :o)
 
Au début, ma macro d'update vidait la bdd puis la remplissait. Je me suis dit que ça venait peut être de là, du coup, je l'ai changée et au lieu de vider/écrire, je passe par une requête Update
Même combat.
 
Est ce que quelqu'un aurait une idée?
La seule que je voit pour le moment, et que je vais tester est d'avoir 2 bdds... bdd1 est updatée, bdd2 est lue, à la fin de chaque update, ma macro sauve bdd1 en bdd2
 
Je me dis qu'en cas de conflit (lecture de bdd2 au moment de la sauvegarde de bdd1 en bdd2), je ferais ignorer l'erreur (vba ne pourra pas sauver sous bdd2 vu que bdd2 est utilisé ailleurs), l'update ne se fait donc pas et on attendra le prochain, ceci n'est pas génant en soit vu que les updates sont assez réguliers.
Si vous avez d'autres idées, je suis preneur
Merci

mood
Publicité
Posté le 22-02-2013 à 10:16:44  profilanswer
 

n°2177019
Marc L
Posté le 22-02-2013 à 10:44:42  profilanswer
 

 
           Salut !   Y a moyen de verrouiller l'accès de la bdd pendant sa màj  ?
 
           Comme pour l'instruction Open avec l'option Lock …

n°2177023
hush hush
je savais que ça te plairait
Posté le 22-02-2013 à 11:01:00  profilanswer
 

Je n'avais pas considéré cet aspect (que je ne connaissais pas d'ailleurs :o)
J'ai regardé dans l'aide et j'ai trouvé ça:
http://msdn.microsoft.com/en-us/li [...] 12%29.aspx
C'est la méthode que j'utilise pour ouvrir la bdd avant l'update,
J'ai ajouté l'option true (false par défaut) qui fait que l'ouverture se fait en mode, du coup, le vba d'upsate ouvre la bdd en:

Citation :

Opens the database in exclusive mode.


C'est de ça qu'il s'agit?
J'ai essayé, aucun changement :/
ça ralenti considérablement si je lis en même temps qu'il y update.
 
DU coup, j'ai regardé aussi du coté du code C++ (ce n'est pas du C# en fait), mais je n'y pige rien, je ne sais pas s'il y a l'équivalent en option d'ouverture pour la lecture...
 
Résultat: statut quo :o
Merci pour ta réponse en tout cas :)

n°2177027
hush hush
je savais que ça te plairait
Posté le 22-02-2013 à 11:31:28  profilanswer
 

Je viens de tester la methode à 2 bdd, ça marche plutôt bien
J'ai mis un on error resume next au moment de la sauvegarde, ce qui me permet de zapper la sauvegarde en cas de lecture de la bdd au moment de la sauvegarde.
Je trouve que ce n'est pas optimum, même si les bdd ont une taille figée et modérée, ça reste 2 fichiers, je ne trouve pas ça super propre, mais faute de mieux...

n°2177056
Marc L
Posté le 22-02-2013 à 13:03:36  profilanswer
 

 
           Autre solution : un fichier " drapeau " :  dans le répertoire de la bdd, s'il y a par un exemple un fichier maj.dat ,
                                                                     pas d'accès pour l'utilisateur lambda + message " MàJ en cours " …
                                                                     Une fois la mise à jour accomplie, le fichier est renommé par exemple en maj.da$
 
           C'est du bricolo mais simple à mettre en oeuvre …
 

n°2177059
Marc L
Posté le 22-02-2013 à 13:12:26  profilanswer
 

 
           Jettes un œil sur http://connectionstrings.com/access, on ne sait jamais …
 

n°2177060
hush hush
je savais que ça te plairait
Posté le 22-02-2013 à 13:32:30  profilanswer
 

Marc L a écrit :

 
           Autre solution : un fichier " drapeau " :  dans le répertoire de la bdd, s'il y a par un exemple un fichier maj.dat ,
                                                                     pas d'accès pour l'utilisateur lambda + message " MàJ en cours " …
                                                                     Une fois la mise à jour accomplie, le fichier est renommé par exemple en maj.da$
 
           C'est du bricolo mais simple à mettre en oeuvre …
 


Bonne idée :)
J'essairai à l'occasion, là, je n'ai pas trop la main sur la macro d'execution de l'update,
Et surtout, mes premiers tests en méthode 2 bases semble fonctionner, mais je te l'accorde, flagger l'update évite de manipuler des fichiers à 5mo (taille de ma bdd)  et même si c'est du bricolage, ça me semble un peu mieux que gérer 2 fichiers.

Marc L a écrit :

 
           Jettes un œil sur http://connectionstrings.com/access, on ne sait jamais …
 


J'ai regardé en diagonale, rien de nouveau sous le soleil, surtout que je n'utilise pas les mêmes librairies...
Merci pour le lien, je le garde sous le coude!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA: Problème Lecture/Ecriture en simultané sur Access

 

Sujets relatifs
[VBA] fonction paramétré renvoyant le résultat d'une requête ACCESSproblème retour à la ligne
problème avec la console et la commande "php"Problème programme C
Problème connexion DBF[Access] Problème formulaire requête
Fancybox > problème flèche[VBA] Pied de page en lien avec une cellule [Résolu]
Plus de sujets relatifs à : VBA: Problème Lecture/Ecriture en simultané sur Access


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR