[Delphi4][BDE][SQLServer7] Apparition de verrous sur sql server [Résolu]

tyhom 3 Messages postés jeudi 3 juin 2010Date d'inscription 14 juin 2010 Dernière intervention - 3 juin 2010 à 15:16 - Dernière réponse : tyhom 3 Messages postés jeudi 3 juin 2010Date d'inscription 14 juin 2010 Dernière intervention
- 14 juin 2010 à 11:11
Bonjour à tous,

je rencontre actuellement des problèmes d'interblocage entre utilisateurs dans une application Delphi 4 dont la base de données SQL Server 7 se trouve sur un serveur équipé de Windows Server 2000.

Les utilisateurs (5) utilisent l'application depuis près d'un an déjà sans qu'aucun problème ne vienne perturbé l'utilisation simultanée de l'application. Tous les postes sont sous windows XP.

Cependant, depuis environ 2 mois, il apparait plusieurs fois par jour des blocages lorsque les utilisateurs utilisent l'application simultanément.

Ces blocages concernent toujours une insertion/modification dans une table précise (toujours la même).

J'ai pu voir grâce à SQL Server que dans ces moments de blocages, la table en question est verrouillée. De plus, je peux voir qu'un verrou est ajouté dans la liste des "Verrous/Objets" avec le nom de cette table (verrou de type PAG et TAB). Enfin, toujours dans SQL Server, je peux savoir le login de l'utilisateur qui a "créé" le verrou, mais ce login varie selon les blocages.

J'ai noté aussi qu'à chaque fois que ce problème apparait, un certain utilisateur (login 'patrick') vient ou est en train d'utiliser la fonctionnalité qui modifie cette table. Pourtant je ne vois pas en quoi sa présence pourrait modifier quelque chose.


Ce qui me gène le plus pour corriger ce problème c'est qu'il n'intervient pas à chaque fois que des utilisateurs utilisent l'application simultanément.

C'est pourquoi j'aimerais savoir ce qui, selon vous, en Delphi (commande, transaction non terminée...) peut faire apparaître des verrous sur des tables entières.

Je vous remercie énormément pour l'attention que vous prêterez à ce message.

Tyhom
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
tyhom 3 Messages postés jeudi 3 juin 2010Date d'inscription 14 juin 2010 Dernière intervention - 14 juin 2010 à 11:11
3
Merci
Bonjour,

Le problème venait bien de mon programme Delphi, en effet, un verrou était posé sur la table juste après l'appel de Q_Contact.Open et pendant une trentaine de secondes.
J'ai remarqué qu'en faisait simplement après le Open :

Q_Contact.Last;
Q_Contact.First;


le verrou de trente secondes disparaissait.

Par la suite j'ai ajouté un index sur la table concernée pour accélérer le select.


Bonne journée.
Tyhom

Merci tyhom 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de tyhom
tyhom 3 Messages postés jeudi 3 juin 2010Date d'inscription 14 juin 2010 Dernière intervention - 4 juin 2010 à 16:41
0
Merci
Re bonjour

En fait après de nombreux nouveaux essais j'en suis arrivé à la conclusion suivante : le verrou sur ma table est créé par l'appel de la procédure Open de la TQuery (Q_Contact) que j'utilise pour remplir la Grid qui liste le contenu de la table qui pose problème (son nom est T_Contact).

Je ne comprends vraiment pas pourquoi celle-ci crée un verrou car il s'agit seulement d'une requête de type select sur une vue (qui est une jointure de plusieurs tables dont la fameuse table contact) initialisée comme ceci :

Q_Contact.SQL.Clear ;
Q_Contact.SQL.Add('SELECT * ') ;
Q_Contact.SQL.Add('FROM dbo.V_ContactEntreprise ') ;
Q_Contact.SQL.Add('WHERE CodeEntr = :CodeEntreprise ') ;
Q_Contact.Open;



Le verrou sur ma table est libéré seulement après un certain temps qui correspond (je pense) au temps que met la requête à s'exécuter.

Peut-être s'agit-il d'une propriété de la TQuery qui est mal renseignée?


Merci

Tyhom
Commenter la réponse de tyhom

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.