Bonjour,
je travail avec Delphi 2007 et [MYSQL]. Cela fait un moment que je m'entête a essayer de faire fonctionner les composantes [DBExpress] (inclus avec delphi) convenablement. Je travail avec un SqlConnection et plusieurs (SqlDataset, DatasetProvider, ClientDataset) ou (SimpleClientDataset).
Le problème que je rencontre est que chaque Dataset créer une connexion sur le serveur MySql et après un certain temps le serveur MySql ferme les connexions (60 sec defaut, 24h max). Lorsque le serveur ferme la connexion et que le Dataset fait un post par la suite, j'ai l'erreur "MySql server has gone away". Le problème semble vraiment venir du fait que les objets dbExpress laisse leur connexion ouverte et que le serveur MySql ferme les connexions de sont propre gré...
Les solutions possibles que j'ai trouvé:
-Créer un SqlConnection pour chaque Dataset (- ca fait beaucoup d'objets et de paramètres a gérer)
-Utiliser les SimpleDataset et le InternalConnection (les SimpleDataset sont moin efficace que le trio avec ClientDataset)
-Fermer la connexion manuellement après chaque utilisation des Dataset
J'aimerais savoir qu'elle est la meilleur méthode, ce doit être un problème standard, peut-être que je suis passé a coté d'un détail qui changerait tout. Car dans l'utilisation d'un exemple simple avec seulement un ClientDataset les connexions se ferme automatiquement (ce qui serait la solution idéal), c'est avec plusieurs Dataset que les connexions se gate ...
Je me dis que je ne dois pas être le seul a utilisé (Delphi, MySql, dbExpress) comment font les autres ?
Merci
*************************
Nouveauté 11-nov-2010
*************************
J'ai continué mes recherche et appris un peu plus sur le fonctionnement de [DBExpress] et [MYSQL]
En fait la propriété MaxStmtsPerConn de TSQLConnection qui représente le nombre de maximum de Dataset ouvert permis par le serveur est a 1. Ce qui a pour effet d'utilisé la propriété AutoClone du TSQLConnection et lorsque qu'un 2e ou Xe Dataset est ouvert sur le TSQLConnection la connexion est cloné et ce doit être la le problème. Car avec 1 Dataset la connexion se ferme automatiquement après la requête même si le Dataset reste ouvert et avec plusieurs Datasets toutes les connections restent ouvertes même après la fermeture des Datasets.
La seul solution trouvé est de faire TSQLConnection.Close après chaque DataSet.Open pour être certain que le serveur ne ferme pas par lui même les connexion et créer l'erreur "MySql server has gone away".
Si quelqu'un qui a l'habitude de travailler avec [DBExpress] et [MYSQL] pouvait faire des commentaires ce serait très apprécié. Car je trouve ma solution "faire TSQLConnection.Close après chaque DataSet.Open" un peu lourde a géré et peut-être même problématique dans certain cas.
Merci
Partager