30 Maret 2009

Asynchronous Proses pada Komponen ADO (Bagian 2)

Kita telah tahu bagaimana melakukan koneksi secara asynchronous. Bagaimana jika kita mempunyai data yang besar pada suatu tabel (10.000+ record) dan menampilkan progres berapa persen/record yang telah diproses? Dengan memakai ADO itu hal yang mudah, sama mudahnya seperti melakukan koneksi secara asynchronous seperti yang sudah dijelaskan sebelumnya. Disini yang dipakai sebagai contoh adalah komponen TADODataset. Untuk komponen lainnya, TADOTable, TADOQuery, sama saja. Supaya proses ambil data bisa dilakukan secara asynchronous, pada properti ExecuteOptions set pilihan eoAsyncFetchNonBlocking = True. Kemudian ada 2 event yang penting yaitu OnFetchProgress dan OnFetchComplete. Contoh berikut akan menggambarkan proses ambil data.
var
  RecCount: Integer;

procedure TForm1.OpenData;
begin
  ADODataSet1.CommandText := ‘SELECT COUNT(*) AS RecCount FROM tabelku’;
  ADODataSet1.Open;
  RecCount := ADODataSet1.Fields[0].AsInteger;
  ADODataSet1.Close;
  ADODataSet1.OnFetchProgress := ADODataSet1FetchProgress;
  ADODataSet1.OnFetchComplete := ADODataSet1FetchComplete;
  ADODataSet1.CommandText := ‘SELECT * FROM tabelku’;
  ADODataSet1.Open;
end;

procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet;
  Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
  Label1.Caption := IntToStr(Progress) + ‘ of ‘ + IntToStr(RecCount);
end;

procedure TForm1.ADODataSet1FetchComplete(DataSet: TCustomADODataSet;
  const Error: Error; var EventStatus: TEventStatus);
begin
  ShowMessage(‘Proses selesai.’);
end;

Untuk proses INSERT, UPDATE, DELETE, pada properti ExecuteOptions set pilihan eoAsyncExecute = True dan event TADOConnection.OnExecuteComplete untuk mengetahui jika proses sudah selesai.

Tidak ada komentar:

Posting Komentar