[Delphi4][BDE][SQLServer7] Apparition de verrous sur sql server

Résolu
tyhom Messages postés 3 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 14 juin 2010 - 3 juin 2010 à 15:16
tyhom Messages postés 3 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 14 juin 2010 - 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

2 réponses

tyhom Messages postés 3 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 14 juin 2010
14 juin 2010 à 11:11
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
3
tyhom Messages postés 3 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 14 juin 2010
4 juin 2010 à 16:41
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
0
Rejoignez-nous