2009-04-03 5 views
1

Ich habe eine Delphi-Anwendung, die eine Datenbank (in der Regel MySql) alle 60 Sekunden durch einen TTimer trifft. Die Anwendung ist mehr oder weniger ein unbeaufsichtigtes Schwarzes Brett. Wenn das Netzwerk nicht mehr funktioniert, muss die Anwendung weiterhin ausgeführt werden und eine Verbindung zur Datenbank herstellen, wenn die Verbindung wieder hergestellt wird. Oft ist es möglicherweise über Breitband, so dass die Verbindung wahrscheinlich nicht immer die beste ist.Der beste Weg zur Verbindung mit der Datenbank für diese Anwendung

Ich verwende die TAdoConnection-Komponente. Dies wird beim Start der Anwendung geöffnet und bleibt geöffnet. Wann immer ich eine neue Abfrage erstellen muss, stelle ich die Verbindung zu der offenen TAdoConnection. Aber ich finde das ist nicht sehr zuverlässig, wenn es einen Netzwerkausfall gibt.

Was ist der beste Weg, um in diesem Fall eine Verbindung zur Datenbank herzustellen? Ich habe Wege gesehen, wie Sie die Verbindungszeichenfolge direkt in TAdoQuery erstellen können. Wäre das der richtige Weg? Oder ist das zu ressourcenintensiv? Manchmal muss ich 5-10 Abfragen öffnen, um alle Informationen zu erhalten.

Oder wie wäre dies im Falle TTimer.OnTimer tun:

TADOConnection erstellen

All

Freie TADOConnection

Dank Abfragen durchführen.

Antwort

5

Sie sollten ein einzelnes TAdoConnection-Objekt verwenden, um zu vermeiden, Verbindungszeichenfolgen für jede Komponente festzulegen. Halten Sie Ihr Verbindungsobjekt geschlossen und öffnen Sie es, wenn Sie auf Daten zugreifen müssen. Etwas wie folgt aus:

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

Sie können zusätzlich ein weiteres try/except Block um MyAdoConnection.Open setzen Situation zu fangen, wo Netzwerk nicht verfügbar ist.

Über den zweiten Teil Ihrer Frage, wäre am besten, alle Ihre Datenzugriffskomponenten in Datenmodul zu setzen, die Sie erstellen, wenn Sie Datenzugriffsverfahren ausführen müssen. Dann können Sie Ihren gesamten Datenzugriffscode in dieses Datenmodul einfügen und vom restlichen Code trennen.

Sie könnten versuchen, die Verbindung im OnCreate-Ereignis des Datamoduls zu öffnen, aber gehen Sie beim Öffnen der Verbindung vorsichtig mit möglichen Ausnahmen um. Verbindung im OnDestroy-Ereignis schließen Dann können Sie dieses Datenmodul wie folgt verwenden:

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

Danke - ich werde dies versuchen. Scheint sehr sinnvoll zu sein. –

Verwandte Themen