IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[Win32][D4][SQLServer7]Apparition aléatoire de verrous sur une table


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 7
    Points
    7
    Par défaut [Win32][D4][SQLServer7]Apparition aléatoire de verrous sur une table
    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
    Images attachées Images attachées  

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Avancée du problème
    J'aimerais remercier ceux qui ont lu mon message car je reconnais qu'il est assez long.

    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 que j'utilise pour remplir ma liste de contacts.

    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 7
    Points
    7
    Par défaut Résolu
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    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.

    Peut-être cela aidera-t-il quelqu'un qui a le même problème.

    Bonne journée.
    Seb_3

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] selection aléatoire sur une table d'articles
    Par shakir33 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/10/2009, 11h21
  2. Réponses: 4
    Dernier message: 18/08/2008, 11h40
  3. Réponses: 1
    Dernier message: 15/07/2008, 20h54
  4. [MySQL] Afficher aléatoirement un texte sur une page
    Par baboulinet84 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/02/2008, 12h02
  5. verrous sur les tables
    Par rv66 dans le forum Paradox
    Réponses: 2
    Dernier message: 04/09/2005, 20h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo