2009-04-03 9 views
1

私はTTimerを通して60秒ごとにデータベース(通常はMySql)にヒットするDelphiアプリケーションを持っています。アプリケーションは、ほぼ無人の掲示板です。ネットワークが切断された場合、アプリケーションは実行を継続し、接続が復帰したときにデータベースに接続する必要があります。多くの場合、ブロードバンドで接続されている可能性があります。接続が常にベストであるとは限りません。このアプリケーションのデータベースに接続する最善の方法

私はTAdoConnectionコンポーネントを使用しています。これはアプリケーションの起動時に開かれ、開いたままです。新しいクエリを作成する必要があるときはいつでも、私はConnectionを開いたTAdoConnectionに設定します。しかし、ネットワークが落ち込んだ場合、これはあまり信頼できません。

このインスタンスでデータベースに接続するには、どのような方法が最適ですか? 私はTAdoQueryに直接接続文字列を構築する方法を見てきました。これは正しい方法でしょうか?または、これは過度にリソースを消費しますか?場合によっては、すべての情報を取得するために5〜10個のクエリを開く必要があります。

TTimer.OnTimerイベントでこれを行うことについて

またはどのように:

TADOConnectionの

を作成し、すべてのクエリ

無料TADOConnectionのに

感謝しています。

答えて

5

接続文字列を各コンポーネントに設定しないようにするには、単一のTAdoConnectionオブジェクトを使用する必要があります。接続オブジェクトを閉じたままにしておき、データにアクセスする必要があるときに開きます。このような何か:

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

あなたはさらに、ネットワークが利用できない状況をキャッチするためにMyAdoConnection.Openの周りに別のtry/exceptのブロックを置くことができます。

質問の2番目の部分については、すべてのデータアクセスコンポーネントを、データアクセス手順を実行する必要があるときに作成するデータモジュールに配置することをお勧めします。次に、すべてのデータアクセスコードをそのデータモジュールに置き、残りのコードと区別することができます。

DataModuleのOnCreateイベントで接続を開こうとすることはできますが、接続を開くときに起こりうる例外を処理するように注意してください。 OnDestroyイベントで接続を閉じます。次に、このようなデータモジュールを使用することができます:

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

ありがとう - 私はこれを試してみましょう。非常に良いと思われる。 –

関連する問題