azerty2005
Messages postés4Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention14 janvier 2010
-
14 janv. 2010 à 02:22
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
16 janv. 2010 à 15:10
Bonjour,
Je développe actuellement une application censée récupérer de fichiers xml provenant d'internet des informations. Sachant que j'ai -énormément- (euphémisme) de fichiers à traiter l'application est donc multithreads.
La récupération des fichiers et leur post traitement s'effectue parfaitement avec 1 thread. Avec 2 aussi mais il arrive qu'il y ait des erreurs...au delà j'obtiens toujours des erreurs d'écriture dans mes tables.
En effet il arrive que 2 threads veulent écrire (ou mettre à jour) des informations dans une même table (voire même créer une nouvelle table identique en même temps) au même moment, ce qui provoque sur l'un d'eux une erreur d'écriture vu que:
"Impossible de mettre à jour; actuellement verrouillé(e)".
J'utilise les composants ADO et développe sous Delphi 7.
Pour effectuer mes opérations SQL j'utilise ADOCommand (et pas de RecordSet vu qu'apparemment leur fermeture est impossible sur des UPDATE ou INSERT).
(Quand 10 threads tournent en même temps sur la bdd l'application semble prendre plus de temps que lorsqu'un seul thread tourne...)
Ma question est donc, est il possible de mettre en place une espèce de section critique pour base de donnée ou alors de vérifier le verrouillage d'une base (et mettre en attente des requêtes) ?
Voila voila mon petit soucis,
J'espère que j'ai expliqué clairement et que j'ai donné les bonnes informations pour que vous puissiez me débloquer.
azerty2005
Messages postés4Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention14 janvier 2010 14 janv. 2010 à 03:43
En fait ça a réduit énormément mes erreurs d'écriture...je peux passer à 10 threads et 1000 requêtes et 1 erreur..négligeable mais pas acceptable.
(Lorsque j'essaye de mettre des propriétés telles que Lock retry ou lock delay on me sort que ISAM est introuvable...je pense que la solution est là mais....)
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 16 janv. 2010 à 15:10
Bonjour Azerty2005,
Pourrais-tu indiquer avec quel SGBD tu as rencontré ce problème car la solution proposée (merci à toi) n'est pas forcément applicable à tous les SGBD et ne pourrait être valable que pour un accès aux données avec ADO visiblement.
May Delphi be with you
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.