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 :

DBX perte de connexion avec SQL Server


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut DBX perte de connexion avec SQL Server
    Bonjour,

    J'utilise une TSQLconnection pour accéder à une base de données SQL Server 2008 à partir d'une application FMX (RAD STUDIO XE3)
    J'ouvre la connexion au lancement de l'application et je la garde ouverte jusqu'à la fermeture.
    En mode "Client lourd", tout va bien. En revanche, en environnement distribué (type citrix), il semble y avoir des ruptures de connexion. L'état de la connexion est toujours Open mais elle n'est plus reliée au serveur SQL(sans que ce soit intercepté par onDisconnect). Du coup, lorsque j'essaie d'exécuter une procédure stockée: Violation d'accès.
    J'ai temporairement résolu le pb en fermant/réouvrant la connexion à la demande, mais les performances en souffrent (tps d'attente à chaque reconnexion au serveur).
    Avez-vous au choix:
    - un moyen de détecter la perte de connexion?
    - des "best practices" pour gérer les connexions dans ce contexte et en général?
    - d'autres idées?
    Merci d'avance
    7 fois à terre, 8 fois debout

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    En DBX, C++Builder 2007 et Sybase Anywhere 10, il semble que mon ancien collègue avait un problème similaire

    Toujours connecté sur TSQLConnection mais pas vraiment car micro-coupure réseau ou que sais-je !

    La solution, était d'encaspuler tous les appels au Query dans une série de fonction
    Si la fonction échoue, selon le code d'erreur en retour, cela laissait l'erreur remonté si c'était "une erreur gérée" ou alors se tentait d'abord une reconnexion, relançait le SQL, et si l'erreur persistait, cela la laissait remonter

    Ainsi la reconnexion ne se produit que si il y a une erreur, en temps normal, on a rarement des erreurs avec ses SQL
    en tout cas, moi j'en ai peu en prod à cause du code toujours à cause du contexte,
    comme une violation de clé (fait parti des code d'erreur gérée)
    comme une perte de connexion (ne fait pas parti des erreurs gérées)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    La solution, était d'encaspuler tous les appels au Query dans une série de fonction
    Si la fonction échoue, selon le code d'erreur en retour, cela laissait l'erreur remonté si c'était "une erreur gérée" ou alors se tentait d'abord une reconnexion, relançait le SQL, et si l'erreur persistait, cela la laissait remonter
    C'est effectivement ce sur quoi je suis en train de travailler.
    Accessoirement, j'ai une autre erreur bizarre: à l'exécution d'une procédure stockée, j'obtiens
    La connexion est occupée avec les résultats d'une autre commande
    alors que SQLConnection.datasetcount=0 juste avant l'appel
    7 fois à terre, 8 fois debout

  4. #4
    Membre confirmé
    Avatar de Higgins
    Inscrit en
    Juillet 2002
    Messages
    520
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 520
    Points : 543
    Points
    543
    Par défaut
    Faute de solution plus "propre", j'ai appliqué la méthode de ShaiLeTroll.
    Pour ceux que ça intéresse, en ce qui concerne l'erreur
    La connexion est occupée avec les résultats d'une autre commande
    J'ai réussi à activé MARS (Multiple Active Result Set) sur SQL server, il suffit d'ajouter
    Mars_Connection=True
    dans la section Params du TSQLConnection
    7 fois à terre, 8 fois debout

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

Discussions similaires

  1. connexion avec sql server 2005 impossible
    Par samir_64 dans le forum Administration
    Réponses: 1
    Dernier message: 09/06/2008, 22h04
  2. connexion avec sql server
    Par abdallah2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/01/2008, 10h08
  3. [Delphi7] Connexion avec SQL Server 2005
    Par ghiles82 dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/11/2007, 16h19
  4. remplire un crystal report sans connexion avec sql server
    Par charaf dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/03/2007, 13h17
  5. [JDBC]connexion avec sql server
    Par ridondo dans le forum JDBC
    Réponses: 1
    Dernier message: 26/09/2005, 22h37

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