データベースからデータをフェッチする必要があるたびに呼び出すことができるクエリコードがあり、スレッド化する必要があります。私はこのコードを再利用できるように、スレッド内でこれを実装する方法は不明ですが、基本的には、このコードをスレッド内に配置します。スレッド内で単純なデータベースクエリを作成する方法を知っていますが、再利用できるものが必要です。誰かが私にこれについての例を見つけることができる場所に私を指摘することができますか、または例を提供するのに十分親切ですか?スレッド型Delphi ADOクエリ
は、ここに私のサンプルデータベースのクエリです:
function TDBConnection.SQLOpen(const SQLStr: String): TDataSet;
var
i: Integer
begin
try
Result := TADOQuery.Create(DBConnect.FDatabaseConection);
TADOQuery(Result).Connection:=DBConnect.FDatabaseConnection;
TADOQuery(Result).CommandTimeOut:=30;
TADOQuery(Result).SQL.Text := SQLStr;
TADOQuery(Result).Open;
except
end;
end;
そして、これは私が上記の関数を呼んでいるかのサンプルです:再利用のために
function TDBConnection.GetUserInfo: Boolean;
var
sqlStr: String;
Database: TDataset;
begin
sqlStr:= 'SELECT FIELD1, FIELD2, FIELD3 FROM TABLE1';
try
Dataset := SQLOpen(sqlStr);
if not Dataset.IsEmpty then
begin
//pass result to StringGrid
end;
finally
FreeAndNil(SQLParams);
FreeAndNil(Dataset);
end;
end;
なぜあなたはスレッドにしたいですか?クエリが実行されている間に他の処理を実行したい場合は、非同期クエリ(別のスレッドでクエリを実行する)を使用できます。 – Rob
こんにちは、ロブ、提案のおかげで。しかし、私は、非同期クエリを使用すると、多くのユーザーがハンドルやメモリーリークに問題があると読んだことがあります。 –
私はそれを見たことがありません。私は非同期ADOクエリを常に実行している一週間に数週間実行する自律型(Delphi)ソフトウェアを持っています。私は実行時に100000000の非同期クエリを定期的に実行する他のC++コードをいくつか持っています。 – Rob