Bonjour à tous,
je suis actuellement en stage dans une société dont les applications sont développées avec Delphi 4 et dont la base de données se trouve sur un serveur équipé de windows 2000 server avec MS SQL Server 7.
Les différents employés utilisent la même application Delphi, sur leur postes Windows XP pour réaliser leurs tâches quotidiennes.
Depuis mon arrivée j'ai beaucoup appris au sujet de Delphi et de SQL Server notamment grâce à Developpez.net et je vous en remercie.
Cependant, nous sommes confrontés depuis 2 ou 3 mois à un problème important qui n'apparaissait pas auparavant.
Dans l'application principale, un formulaire permet aux utilisateurs de créer/modifier un "contact" (compte-rendu d'un contact avec une entreprise avec la date, le nom de la personne etc.). Par exemple, un contact téléphonique avec une entreprise.
Cette fonctionnalité est donc utilisée de nombreuses fois par jours par nos employés et ce, même simultanément sans que cela ne pose de problème.
Toutefois, il arrive que, plusieurs fois dans la journée, lorsqu'un utilisateur crée un contact, il reste bloqué après avoir validé sa saisie. Bloqué un long moment, jusqu'à ce que Delphi informe que l'exception suivante a été attrapée : "La table est en lecture seule".
La table en question s'appelle T_Contact et elle appartient à la base dont j'ai grisé le nom sur la capture d'écran.
Après avoir passé de nombreuses heures sur ce problème j'ai constaté les élément suivants:
- la commande Delphi qui a générée l'exception était la suivante : procédure ApplyUpdates de la TQuery utilisée pour les contacts.
- l'erreur venait donc de sql server et non de delphi car en tapant directement une requete Update/Insert dans SQL Server sur la table T_Contact il apparait un message d'erreur signifiant que le délai est dépassé : la table est verrouillée en modification.
- dans les cas de blocages complets (pour tous les utilisateurs), il apparait des Verrous dans SQL Server 7 (cf Image).
- dans tous les cas de blocage : il est apparu qu'un utilisateur (le directeur 'Patrick' qui lui utilise son portable avec WinXP) utilisait le formulaire qui liste ses contacts.
- la plupart du temps sql server affiche que ce verrou est créé par l'utilisateur 'Patrick'.Et il faut attendre qu'il ferme totalement l'application pour que les autres utilisateurs puissent créer des contacts à nouveau.
J'en viens donc à me demander ce qui peut provoquer, depuis delphi, l'apparition de verrous dans SQL Server car le fait que ces derniers n'apparaissent pas à chaque fois qu'un utilisateur crée un contact me déstabilise grandement.
Si vous avez des suggestions ou informations sur ce qui crée des verrous dans sql server depuis une application Delphi, je vous serai sincèrement reconnaissant de me les faire partager.
Bien cordialement,
seb_3
Partager