Acces simultanné à une base des donnée [Résolu]

notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 21 août 2009 à 23:46 - Dernière réponse : cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention
- 17 sept. 2009 à 20:37
Salut
J'utilise SQL Server 2005, un programme est exécuter par deux utilisateurs, lorsque le 1er utilisateur sauve un enregistrement dans la base des données, le 2ème ne saura plus poster l'enregistrement dans la base des données. Un message du genre "La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut être changé depuis leur dernière lecture". Que faire pour que les 2 utilisateurs travaillent sans se message d'erreur.
a+
Notrica
Afficher la suite 

Votre réponse

39 réponses

Meilleure réponse
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 8 sept. 2009 à 13:24
3
Merci
houlàlà..

DMPlanet1.AdoIbPlanet.BeginTrans; // Début de la transaction 
try 
DMPlanet1.AdoIbPlanet.CommitTrans; // Début de la transaction 


ça marche pas car tu n'as plus de transaction active !

d'où le message...

Ton commitTrans doit intervenir en fin de parcours ! :

try
beginTrans; {début de transaction}

edit;       {édition}
----
----
post;       {écriture dans le tampon de la table}

commitTrans; {écriture dans la table}

except
{quelque soit l'erreur déclenchée, on retire toutes les écritures et on revient au début}

RollbackTrans;
end;


cantador

Merci cs_cantador 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de cs_cantador
Meilleure réponse
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 8 sept. 2009 à 13:35
3
Merci
pour bien faire, il faudrait même tester si la transaction est active car si ça plante au début (ce qui est rare..)alors le rollbacktrans plantera..

----
----
except
{quelque soit l'erreur déclenchée, on retire toutes les écritures et on revient au début}
if DMPlanet1.AdoIbPlanet.InTransaction then 
RollbackTrans;



cantador

Merci cs_cantador 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de cs_cantador
Meilleure réponse
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 17 sept. 2009 à 17:43
3
Merci
Merci Cantador, j'ai résolu le problème par le moyen des requette.
Encore merci pour m'avoir guider dans la reflexion.
A+
Notrica

Merci notrica 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de notrica
Meilleure réponse
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 17 sept. 2009 à 20:37
3
Merci
Ah ?
eh bien bravo !


cantador

Merci cs_cantador 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de cs_cantador
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 22 août 2009 à 15:06
0
Merci
Ca s'appelle un conflit d'accès. Deux utilisateurs accèdent au même moment à la base de données, ce qui crée des incohérences au niveau du contenu de la BDD. Essayez un sémaphore (qui permet de faire passer les utilisateurs chacun leur tour), ou un mutex (plus simple qu'un sémaphore, ne permet qu'un accès à la fois). Par exemple, le mutex autorise un seul accès (donc chacun leur tour), mais le sémaphore peut permettre 1 accès en lecture et 1 accès en écriture, par exemple ...

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Caribensila 2679 Messages postés jeudi 15 janvier 2004Date d'inscription 19 juillet 2018 Dernière intervention - 22 août 2009 à 17:42
0
Merci
Salut,

Il me semble que l'utilisation d'un sémaphore est plus indiquée dans ce cas.
En effet, avec un mutex seule la tâche qui a alloué l'objet peut le libérer, ce qui risque de bloquer l'accès à la BDD de façon gênante.
Commenter la réponse de Caribensila
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 22 août 2009 à 22:55
0
Merci
bonsoir,

sémaphore, mutex ?

tout est prévu dans une base de données..
il suffit de fixer les paramètres de conflit de partage qu'on retrouve sous la propriété isolation des composants Data-Aware.

en gros 3 situations sont déjà programmées :
- on autorise tous les accès à tout moment
(c'est le dernier passé qui donne la dernière version la plus simple..)

- on verrouille la transaction (un seul utilisateur sur un enregistrement)

- on autorise le partage avec messages d'avertissement (on attend que l'autre a terminé ou on prend la main)


cantador
Commenter la réponse de cs_cantador
Caribensila 2679 Messages postés jeudi 15 janvier 2004Date d'inscription 19 juillet 2018 Dernière intervention - 23 août 2009 à 00:05
0
Merci
J'me disais aussi...
Si c'était pas prévu, les BDD auraient été vraiment nulles !

C'est là qu'on voit que j'y connais rien en BDD. Mais mon observation sur la différence mutex/sémaphore reste valable... pour d'autres cas, bien sûr (ainsi que celle de Bacterius).
Commenter la réponse de Caribensila
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 23 août 2009 à 00:18
0
Merci
En fait j'ai l'impression d'avoir dit que de la dans ma dernière phrase (concernant la gestion des accès par le sémaphore).

Cordialement, Bacterius !
Commenter la réponse de Bacterius
Caribensila 2679 Messages postés jeudi 15 janvier 2004Date d'inscription 19 juillet 2018 Dernière intervention - 23 août 2009 à 00:32
0
Merci
Tu parles de "1 accès en lecture et 1 accès en écriture", Bacterius?

Je pense bien que c'est possible, mais j'ai pas vérifié.

D'ailleurs, je pense que les BDD utilise le sémaphore en interne. Je ne vois pas beaucoup d'autres solutions...
Commenter la réponse de Caribensila
Bacterius 3869 Messages postés samedi 22 décembre 2007Date d'inscription 3 juin 2016 Dernière intervention - 23 août 2009 à 00:47
0
Merci
J'ai mis ça un peu par défaut, il fallait que je phrase le concept que le sémaphore pouvait gérer plusieurs accès simultanés alors que le mutex ne peut en gérer qu'un seul ...

Cordialement, Bacterius !
Commenter la réponse de Bacterius
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 23 août 2009 à 11:42
0
Merci
et j'ajoute qu'on est ici
dans le cadre d'une application en réseau, en mode partagé multi-utilisateurs...


cantador
Commenter la réponse de cs_cantador
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 23 août 2009 à 22:30
0
Merci
Salut
J'ai utilisé le sémaphore dans le programme principal qui lance l'application. En faut-il aussi le mettre dans le 'DATA MODULE' ?
a+
Notrica
Commenter la réponse de notrica
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 23 août 2009 à 22:45
0
Merci
Salut
Merci Cantador pour "il suffit de fixer les paramètres de conflit de partage qu'on retrouve sous la propriété isolation des composants Data-Aware". Comment je peux avoir ces composants ? Ses trouvent-ils dans delphi ou sql-serveur?
J'utilise delphi 7 et SQL serveur 2005.
a+
Notrica
Commenter la réponse de notrica
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 23 août 2009 à 23:17
0
Merci
Ses trouvent-ils dans delphi ou sql-serveur?

ni l'un ni l'autre..
il faut les chercher sur internet.
certains sont free, d'autres pas..

cantador
Commenter la réponse de cs_cantador
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 24 août 2009 à 15:43
0
Merci
Salut,
j'ai cherché sur internet mais malheureusement tout est payant. Y-a-t'il moyen de me brancher sur un lien où je peux trouver du free. Où à defaut pouvez-vs me dire où je peux appliquer le Sémaphore sur le Data Module qui contient toutes les Tables ou le programme appelant le Data Module pour la mise à jour de la base des données ?
Merci d'avance.
a+
notrica
Commenter la réponse de notrica
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 24 août 2009 à 16:43
0
Merci
tu as déjà un composant natif :

le TDatabase qui comporte la propriété :
TansIsolation

cantador
Commenter la réponse de cs_cantador
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 25 août 2009 à 02:30
0
Merci
Je me connecte à la base des données avec ADOConnect. Dans ses propriétés il y a 'Isolation Level'. Si ce bien celà, quelle option puis-je selectionner ?
Merci d'avance.
a+
Notrica
Commenter la réponse de notrica
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 25 août 2009 à 09:08
0
Merci
ilReadCommitted

la plus facile à gérer..

cantador
Commenter la réponse de cs_cantador
notrica 89 Messages postés lundi 12 décembre 2005Date d'inscription 19 octobre 2013 Dernière intervention - 26 août 2009 à 19:05
0
Merci
Salut Cantador
Merci, J'ai bien sélectionne l'option 'ilReadCommitted'. Mais le problème persiste. Le problème se pose en écriture sur la base des données, lorsque un utilisateur enregistre une information dans la base des données, le deuxième utilisateur ne saura plus, un message "La ligne n'a pas été trouvé pour la mise à jour. Certaines valeurs ont peut-être changées depuis leur première lecture" s'affiche. Y-a-t'il moyen de remédier à cela ?
a+
Notrica
Commenter la réponse de notrica

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Acces simultanné à une base des donnée - page 2