6

処理時間に関して制限されているDELPHI、dbgo DBコンポーネント、およびSQL Serverデータベースサーバーを使用してSQLクエリを記述できますか?

好き

select * from table where ......  

process_time_limit = 5 sec

完全なクエリデータセットを何時間も待つのではなく、制限時間内に行の10%を指定することをお勧めします

4

1 に答える 1

3

ADO コンポーネント:

非同期データフェッチを試してみます。クエリを実行すると、いつ開始したかを思い出し、OnFetchProgressイベントが発生するたびに、EventStatusがまだesOK状態にあるかどうかを確認し、クエリの実行からの経過時間を確認します。経過した場合は、データセットでCancelメソッドを使用してデータ フェッチをキャンセルできます。

次の(テストされていない)擬似コードのようなものを使用するつもりでした:

var
  FQueryStart: DWORD;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // configure the asynchronous data fetch for dataset
  ADOQuery1.ExecuteOptions := [eoAsyncExecute, eoAsyncFetchNonBlocking];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // store the query execution starting time and execute a query
  FQueryStart := GetTickCount;
  ADOQuery1.SQL.Text := 'SELECT * FROM Table';
  ADOQuery1.Open;
end;

procedure TForm1.ADOQuery1FetchProgress(DataSet: TCustomADODataSet; Progress,
  MaxProgress: Integer; var EventStatus: TEventStatus);
begin
  // if the fetch progress is in esOK (adStatusOK) status and the time since
  // the query has been executed (5000 ms) elapsed, cancel the query
  if (EventStatus = esOK) and (GetTickCount - FQueryStart >= 5000) then
    DataSet.Cancel;
end;
于 2013-02-03T16:32:29.377 に答える