У меня есть код запроса, который я могу вызывать каждый раз, когда мне нужно извлекать данные из базы данных, и я хочу, чтобы он был потоковым. Не знаете, как реализовать это в потоке, чтобы я мог повторно использовать этот код, в основном, я хочу этот код внутри потока. Я знаю, как создать простой запрос к базе данных внутри потока, но хочу что-то, что я могу повторно использовать. Может ли кто-нибудь указать мне, где я могу найти примеры для этого или быть достаточно любезным, чтобы привести пример?Threaded Delphi ADO Query
Вот мой пример запроса к базе данных:
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
привет Роб, спасибо за предложение. но я где-то читал, что у многих пользователей возникают проблемы с утечкой дескриптора и памяти при использовании асинхронного запроса. –
Я этого не видел. У меня есть автономное (Delphi) программное обеспечение, которое работает в течение нескольких недель, постоянно делая асинхронные запросы ADO. У меня есть еще один код на C++, который регулярно запускает 100 00000 асинхронных запросов при запуске. – Rob