[VC++ / BDD] Gérer des accès concurrents à une bdd

Gérer des accès concurrents à une bdd [VC++ / BDD] - C++ - Programmation

Marsh Posté le 08-08-2003 à 11:14:26    

Bonjour!
 
Je suis en train de devenir chèvre, donc je viens demander conseil.
Je développe actuellement sous visual 2 applis différentes accédant toutes les 2 à la même base de données, via une classe dédiée que j'utilise pour les 2.
Dans cette classe, je me connecte à une bdd MS-Access, via ODBC et des objets CDatabase et CRecordset.
Etant donné qu'à l'exécution j'ai clairement des pbs d'accès à ma bdd ("Impossible d'utiliser 'l'; fichier en cours d'utilisation" ), j'aimerais savoir comment vous résolvez ce type de problèmes, et quels moyens mettre en place pour obtenir un fonctionnement correct de mes accès à la bdd.
 
Merci de vos conseils.

Reply

Marsh Posté le 08-08-2003 à 11:14:26   

Reply

Marsh Posté le 08-08-2003 à 11:47:14    

[:vinz416@school]  
et eupp de soutien [:kadreg]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 08-08-2003 à 12:02:17    

Je squatte le topic des mutex...mais mes premiers test (avec une seule appli multithreadée) sont pas concluants... :sweat:

Reply

Marsh Posté le 08-08-2003 à 12:52:03    

ben si multi thread mutex. sinon si multi proc, memoire partagée si ça existe sous windows. sinon, comme apparemment y a pas de verrou possible au sein meme de la base de données, je vois pas comment faire quelque chose de solide en externe. tu peux tenter avec un fichier, mais ça sera trop trop lent et ça peut poser des problèmes. moi ce que je ferais, et encore une fois je sais pas si c'est possible sous windows, c'est un processus arbitre qui reçoit des demandes et autorise par signaux. c'est pas tres tres rapide, mais ça doit bien marcher

Reply

Marsh Posté le 08-08-2003 à 12:58:30    

:sweat:  
Ca devient complexe...
Bon, j'essaie de le faire marcher correctement sur une machine avec des mutex, déjà...

Reply

Marsh Posté le 08-08-2003 à 13:58:20    

Taz a écrit :

ben si multi thread mutex. sinon si multi proc, memoire partagée si ça existe sous windows.


 
La mémoire partagée peut s'émuler via des fichier mappés sous windows.
 

Taz a écrit :

moi ce que je ferais, et encore une fois je sais pas si c'est possible sous windows, c'est un processus arbitre qui reçoit des demandes et autorise par signaux. c'est pas tres tres rapide, mais ça doit bien marcher


 
Ct ma première idée, c un poil technique. Ha mon avis pour ce qu'il veut faire les mutex devraient suffir.

Reply

Marsh Posté le 08-08-2003 à 14:00:51    

Les acces concurents à une base de donnée doivent être gérés par la base de donnée sinon ça s'appelle un fichier et pas une base de donnée.
 
Sinon pour Access, on peut très bien avoir plusieurs connexions simultanées ( le programme sur lequel je travail le fait ), le seul cas que je connaisse où ça pose problème c'est quand la base est ouverte ne mode administrateur.
 
 
 

Reply

Marsh Posté le 08-08-2003 à 14:30:47    

seblamb a écrit :

Les acces concurents à une base de donnée doivent être gérés par la base de donnée sinon ça s'appelle un fichier et pas une base de donnée.
 


 
[:sisicaivrai]
Alors c'est quoi ce message de merde du driver odbc? (cf premier post)
 

Citation :


Sinon pour Access, on peut très bien avoir plusieurs connexions simultanées ( le programme sur lequel je travail le fait ), le seul cas que je connaisse où ça pose problème c'est quand la base est ouverte ne mode administrateur.


 
Ca veut dire que les mutex sont vraiment inutiles?

Reply

Marsh Posté le 08-08-2003 à 14:35:32    

Pendant que j'y pense, pour compacter la base il va quand même falloir que le reste n'accède pas à la bdd... :??:

Reply

Marsh Posté le 08-08-2003 à 15:09:53    

Bon, à-priori ya plus que le compactage de la bdd par un de mes threads qui pose pb...
Le compactage doit se déclencher automatiquement en fonction du rapport (nb de lignes dans la base) / (poids de la base).
Là normalement il faut que je bloque tout accès à la base de données non?
Vous feriez comment?

Reply

Sujets relatifs:

Leave a Replay

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