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 :

Rupture de la connexion d'un ADODataset


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut Rupture de la connexion d'un ADODataset
    Bonjour,

    J'ai une application connectée à une base de données SQL serveur grace à une ADOConnection.

    Je remplis mon ADOdataset avec des données de ma base et si je debranche mon cable reseau et que je le rebranche mon application s'est totalement deconnectée de la base c'est à dire que des que je veux refaire une requete sur la base depuis mon application celle ci plante et me dit "erreur générale du réseau".

    Il y a t il un moyen de contourner ce problème?


    Merci

  2. #2
    Membre du Club
    Inscrit en
    Août 2002
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 65
    Points : 64
    Points
    64
    Par défaut
    Non. Le client communique avec la base de données via des processus. En debranchant le cable il y a forcement des ports de communications qui ont été fermés.
    Les vrais informaticiens n'ont pas d'attaché-case ; leur tête suffit à transporter leurs connaissances.

  3. #3
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    En fait, le problème peut être pire que ça. Imagine que tu te connectes à un serveur local, mais sur un PC qui possède une connexion Wifi de mauvaise qualité. De temps en temps, le wifi est indisponible et la connexion réseau tombe. Lorsque ça se produit, c'est toute la pile IP de la machine qui tombe et si tu étais connecté via TCP/IP, ça coupe même ta connexion au serveur local !
    J'ai déjà rencontré le cas de figure chez un client avec une appli monoposte... c'est difficile de lui faire comprendre qu'il s'est fait jeté à cause d'un défaut sur son réseau qu'il n'utilise pas...

    Citation Envoyé par Abac_Angelique Voir le message
    Il y a t il un moyen de contourner ce problème?
    Oui, lorsque tu exécutes la requête tu captures l'exception et lorsque tu détecte la coupure réseau, tu traites l'exception en te reconnectant et en refaisant la requête.
    Mais attention, si tu étais au milieu d'une transaction c'est toute la transaction qu'il faut rejouer car la fermeture de la connexion précédente a provoqué un rollback de la transaction en cours.
    Selon la façon dont ton appli est écrite, ce n'est pas nécessairement très facile à faire.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 141
    Points : 40
    Points
    40
    Par défaut
    merci pour vos réponses.

    aurais tu un exemple a me donner pour capter l'exception de déconnection au réseau.

    merci

  5. #5
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Voici un exemple qui illustre le principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
      try
        ADODataSet1.Open;
      except
        on e:EOleException do
        begin
          if e.Message = 'Fournisseur TCP : Une connexion existante a dû être fermée par l''hôte distant'
          then begin
            ADOConnection1.Close;
            ADOConnection1.Open;
            ADODataSet1.Open;
          end
          else raise;
        end;
      end;
    La difficulté, c'est de ne capturer que l'erreur de la déconnexion. Ici je teste le message d'erreur. Ce n'est pas une très bonne solution car le message dépend du provider OLEDB (ici c'est SQL Native Client) et du code langue.

    Lorsque je le fais en situation réelle, je travaille directement avec OLEDB, j'ai la main sur les codes d'erreur exact retourné par le provider ce qui permet d'identifier précisément la déconnexion. Malheureusement ADO ne remonte pas toujours toutes les informations nécessaires lorsqu'il y a une erreur.

Discussions similaires

  1. Rupture d'une connexion Socket
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 22/02/2015, 19h11
  2. Rupture répétée de connexion DB
    Par mara1 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 05/06/2012, 17h19
  3. rupture de connexion en java
    Par mmorad dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/03/2007, 15h18
  4. Rupture de connexion
    Par secteur_52 dans le forum Réseau
    Réponses: 3
    Dernier message: 26/10/2005, 12h16
  5. [java.net][TCP] Rupture de connexion ? Détection ?
    Par sephile dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/01/2005, 17h44

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