2009-04-03 5 views
1

J'ai une application Delphi qui frappe une base de données (généralement MySql) toutes les 60 secondes grâce à un TTimer. L'application est plus ou moins un tableau d'affichage sans surveillance. Si le réseau tombe, l'application doit continuer à fonctionner et se reconnecter à la base de données lorsque la connexion est rétablie. Souvent, il peut être sur le haut débit, donc les chances sont que la connexion n'est pas toujours la meilleure. J'utilise le composant TAdoConnection. Ceci est ouvert au démarrage de l'application et reste ouvert. Chaque fois que j'ai besoin de faire une nouvelle requête, je définis la connexion à la TAdoConnection ouverte. Mais je trouve que ce n'est pas très fiable s'il y a une baisse de réseau.Meilleur moyen de se connecter à la base de données pour cette application

Quelle est la meilleure façon de se connecter à la base de données dans cette instance? J'ai vu comment vous pouvez construire la chaîne de connexion directement dans le TAdoQuery. Serait-ce la bonne façon? Ou est-ce excessivement gourmand en ressources? Parfois, j'ai besoin d'ouvrir 5-10 requêtes pour obtenir toutes les informations.

Ou que diriez-vous faire cela en cas TTimer.OnTimer:

Créer TADOConnection

Do Toutes les requêtes

TADOConnection Gratuit

Merci.

Répondre

5

Vous devez utiliser un seul objet TAdoConnection pour éviter de définir une chaîne de connexion pour chaque composant. Gardez votre objet de connexion fermé et ouvrez-le lorsque vous avez besoin d'accéder aux données. Quelque chose comme ceci:

procedure OnTimer; 
begin 
    MyAdoConnection.Open; 
    try 
    // Data access code here 
    ... 
    finally 
    MyAdoConnection.Close; 
    end; 
end; 

Vous pouvez en outre mettre un autre bloc try/except autour MyAdoConnection.Open pour attraper la situation où le réseau est disponible. A propos de la deuxième partie de votre question, mieux serait de mettre tous vos composants d'accès aux données dans le module de données que vous allez créer lorsque vous devez exécuter des procédures d'accès aux données. Ensuite, vous pouvez mettre tout votre code d'accès aux données dans ce module de données et le séparer du reste du code.

Vous pouvez essayer d'ouvrir une connexion dans l'événement OnCreate du module de données, mais veillez à gérer les éventuelles exceptions lors de l'ouverture de la connexion. Fermer la connexion dans l'événement OnDestroy. Alors vous pouvez utiliser ce datamodule comme ceci:

procedure OnTimer; 
var myDataModule : TMyDataModule; 
begin 
    myDataModule := TMyDataModule.Create; 
    try 
    // Data access code here 
    myDataModule.DoSomeDatabaseWork; 
    finally 
    myDataModule.Free; 
    end; 
end; 
+0

Merci - Je vais essayer. Semble faire très bon sens. –

Questions connexes