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

Lazarus Pascal Discussion :

Déconnexion intempestive de MySQL


Sujet :

Lazarus Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 26
    Points
    26
    Par défaut Déconnexion intempestive de MySQL
    Bonjour,

    Le titre de ce fil n'est sans doute pas très explicite, mais je n'ai pas trouvé mieux... Voilà la situation. J'ai développé une petite application pour gérer des tests QCM.
    Les postes sont en réseau et la base de données MySQL est installée sur un PC Windows XP avec EasyPhp. J'ai appliqué les modifications au registre de Windows pour contourner la limitation du nombre d'ordinateurs connectés.
    Côté Lazarus, j'ai utilisé les composants Zeos (TZconnection et TZquery). Le truc marche bien, même avec une vingtaine de postes clients, et puis d'un seul coup, j'ai des messages d'erreur (Connexion impossible avec la base MySql)
    Comme je suis novice sur ce type de base de données et ces composants, je pense que je n'ai peut-être pas utilisé la bonne voie.
    Sur chaque machine cliente, l'application se connecte dès son lancement avec la base (ip du serveur, nom de la base, nom d'utilisateur et code d'accès) Ensuite, l'appli fait des requêtes via les TZqueries de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    myquery:=form2.TZquery1
    myquery.close; // par sécurité
    myquery.sql.clear; // toujours par sécurité
    myquery.sql.add('SELECT * FROM une_table')
    myquery.open;
    // <traitement des données>
    myquery.close
    Peut-être qu'il faudrait fermer aussi la connexion vers la base et la rouvrir à chaque fois ?
    Si quelqu'un a une idée, merci de me la faire connaître.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il est probable que le connexion mySQL ne soit pas paramétrée comme persistante dans les paramétrages de votre serveur : au bout d'un certain temps d'inactivité, le serveur "coupe" la connexion. Je ne connais pas les paramétrages par défaut de mySQL dans EsayPHP.

    Si tel est le cas, vous avez 3 solutions
    • Modifier le réglage du serveur pour que la liaison demeure persistante
    • Tester la connexion avant chaque requête
    • Utiliser la méthode Ping du Zconnect dans un timer (avec un délai inférieur au TimeOut de mySQL). Ainsi la connexion sera maintenue.


    Cordialement. Gilles
    Dernière modification par Invité ; 27/01/2013 à 15h58.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par bubu42 Voir le message
    Bonjour,

    Le titre de ce fil n'est sans doute pas très explicite, mais je n'ai pas trouvé mieux... Voilà la situation. J'ai développé une petite application pour gérer des tests QCM.
    Les postes sont en réseau et la base de données MySQL est installée sur un PC Windows XP avec EasyPhp. J'ai appliqué les modifications au registre de Windows pour contourner la limitation du nombre d'ordinateurs connectés.
    Côté Lazarus, j'ai utilisé les composants Zeos (TZconnection et TZquery). Le truc marche bien, même avec une vingtaine de postes clients, et puis d'un seul coup, j'ai des messages d'erreur (Connexion impossible avec la base MySql)
    Comme je suis novice sur ce type de base de données et ces composants, je pense que je n'ai peut-être pas utilisé la bonne voie.
    Sur chaque machine cliente, l'application se connecte dès son lancement avec la base (ip du serveur, nom de la base, nom d'utilisateur et code d'accès) Ensuite, l'appli fait des requêtes via les TZqueries de la manière suivante :
    myquery:=form2.TZquery1
    myquery.close; // par sécurité
    myquery.sql.clear; // toujours par sécurité
    myquery.sql.add('SELECT * FROM une_table')
    myquery.open;
    <traitement des données>
    myquery.close
    Peut-être qu'il faudrait fermer aussi la connexion vers la base et la rouvrir à chaque fois ?
    Si quelqu'un a une idée, merci de me la faire connaître.
    Salut

    tu perd la connexion sur tous les postes client ou seulement ou seulement quelques postes ?

    Je ne savais pas que l'on pouvait enlever la limite de connexion sur xp.

    as tu fait le test avec un O/S comme 2003 ?

    Jazz77

  4. #4
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par selzig Voir le message
    Bonjour,

    Il est probable que le connexion mySQL ne soit pas paramétrée comme persistante dans les paramétrages de votre serveur : au bout d'un certain temps d'inactivité, le serveur "coupe" la connexion. Je ne connais pas les paramétrages par défaut de mySQL dans EsayPHP.

    Si tel est le cas, vous avez 3 solutions
    • Modifier le réglage du serveur pour que la liaison demeure persistante
    • Tester la connexion avant chaque requête
    • Utiliser la méthode Ping du Zconnect dans un timer (avec un délai inférieur au TimeOut de mySQL). Ainsi la connexion sera maintenue.


    Cordialement. Gilles
    D'abord, merci pour la réponse. Effectivement, il est possible que le serveur coupe la connexion (pendant l'utilisation de l'application, il peut s'écouler une vingtaine de minutes entre la connexion/1° query et le query suivant.
    Je ne connais pas grand chose de MySQL, mais je vais me plonger dans la doc et cette histoire de TimeOut ou de liaison persistante.
    Au fait, est-ce qu'il vaut mieux fermer la connexion après le 1° query et la rouvrir ensuite quand on en a besoin ou la laisser ouverte ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jazz77 Voir le message
    Salut

    tu perd la connexion sur tous les postes client ou seulement ou seulement quelques postes ?
    Si ma mémoire est bonne, ça se produit sur plusieurs postes, mais sans doute pas tous (certains ont terminé l'application sans encombres).
    Je ne savais pas que l'on pouvait enlever la limite de connexion sur xp.
    D'après les différents forums, à partir de la SP1 ou 2, Microsoft a introduit une limitation du nombre de postes pouvant se connecter sur une machine, paraît-il pour des raisons de sécurité (en invitant toutefois les utilisateurs à se tourner vers une version Windows Server + clients, le tout étant facturé à un prix ...différent).
    Il existe donc des patches qui permettent de changer le registre et augmenter ce nombre. Seul problème : certains anti-virus considèrent celà comme un virus et on a de faux positifs.
    as tu fait le test avec un O/S comme 2003 ?
    Non, je n'ai pas cet OS. A part XP, le seul OS disponible est Windows 7. Vu les modifications de sécurités qui semblent y avoir été faites, je n'ai même pas songé à tenter un expérience là-dessus.
    Je crois qu'à terme je vais implémenter une solution sous Linux (Ubuntu, par exemple) mais il faut d'abord que je connaisse un peu mieux cet OS.
    Merci pour la réponse rapide.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En première analyse, si cela fonctionne au départ, puis sans toucher à la station se bloque après un temps d'inactivité (de la connexion), je persiste à penser qu'il s'agit d'un problème de TimeOut :
    http://www.lazarus.freepascal.org/in...?topic=13344.0

    Mais ré-ouvrir la connexion (donc sans en empêcher la perte) peut ne pas être acceptable : La perte de connexion n'est pas envisageable si
    • vous utilisez des dbGrids
    • vous voulez maintenir un blocage en innoDB par exemple

    Vous affichez votre dbGrid dans une TForm, allez prendre un café pendant 5 minutes, revenez face à votre écran et voulez utilisez le scrollBar de la dbGrid. Si la connexion a été (automatiquement) interrompue par le serveur, le plantage est probable.

    Dans ces cas là, vous devez maintenir la persistance. A l'époque je n'avais pas accès au serveur mySQL que j'utilisais et qui était hébergé et mutualisé. Donc la solution est à implanter dans votre code : le Timer avec ZConnect1.Ping(xxx.xxx.xxx.xxx) fonctionne très bien. Enfin, je suppose que cette méthode existe toujours. Je l'utilisais en version 6. Depuis j'utilise les connecteurs natifs... (qui ne disposent pas de Ping).

    Cordialement. Gilles

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 68
    Points : 69
    Points
    69
    Par défaut
    Citation Envoyé par bubu42 Voir le message
    Si ma mémoire est bonne, ça se produit sur plusieurs postes, mais sans doute pas tous (certains ont terminé l'application sans encombres).
    D'après les différents forums, à partir de la SP1 ou 2, Microsoft a introduit une limitation du nombre de postes pouvant se connecter sur une machine, paraît-il pour des raisons de sécurité (en invitant toutefois les utilisateurs à se tourner vers une version Windows Server + clients, le tout étant facturé à un prix ...différent).
    Il existe donc des patches qui permettent de changer le registre et augmenter ce nombre. Seul problème : certains anti-virus considèrent celà comme un virus et on a de faux positifs.
    Non, je n'ai pas cet OS. A part XP, le seul OS disponible est Windows 7. Vu les modifications de sécurités qui semblent y avoir été faites, je n'ai même pas songé à tenter un expérience là-dessus.
    Je crois qu'à terme je vais implémenter une solution sous Linux (Ubuntu, par exemple) mais il faut d'abord que je connaisse un peu mieux cet OS.
    Merci pour la réponse rapide.

    Bonsoir Bubu42

    Si tu veux tester plus facilement tes applis sur différent O/S type Windows 2003, 2008, Linux utilise les machines virtuelles.
    Je te conseille d'utiliser Oracle VM Virtualbox, qui est gratuit.
    tu trouveras des facilement des tutos sur Oracle VM Virtualbox même peut être sur youtube.

    cordialement

    Jazz

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Jazz77 Voir le message
    Bonsoir Bubu42

    Si tu veux tester plus facilement tes applis sur différent O/S type Windows 2003, 2008, Linux utilise les machines virtuelles.
    Je te conseille d'utiliser Oracle VM Virtualbox, qui est gratuit.
    tu trouveras des facilement des tutos sur Oracle VM Virtualbox même peut être sur youtube.
    Merci pour le conseil, très bonne idée. Je vais voir ce que ça donne.

Discussions similaires

  1. Déconnexions intempestives messenger
    Par frank26 dans le forum Messagerie instantanée
    Réponses: 1
    Dernier message: 13/10/2007, 12h54
  2. Déconnexions intempestives VPN
    Par licorne dans le forum Hardware
    Réponses: 1
    Dernier message: 21/09/2007, 11h29
  3. déconnexions intempestives d'une BDD
    Par JujuM dans le forum SQL
    Réponses: 34
    Dernier message: 10/08/2007, 14h08

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