Skip to content Skip to sidebar Skip to footer

Execute Query dengan Thread (Thread query)

Kadang, karena suatu hal kita ingin memakai/ membuat procedure yang mampu melakukan eksekusi query dengan menggunakan thread agar prosesnya terpisah dari main thread (thread aplikasi) untuk alasan kecepatan eksekusi. Ini dapat terjadi bila anda loading data yang lumayan besar dan menampilkannya dalam grid. Berikut ini adalah contoh thread untuk mengeksekusi query (general query executor) yang bersifat dinamis.


unit Test;
unit Test;
interface
uses
  Windows, IBQuery, …, … ;   
  //Tambahkan Disini No : 1
Type
  TQryRefreshThread = class(TThread)
  . . .
  End;
  . . .
Type
  TtestForm : Class(TForm)
  . . .
  End;
  //Tambahkan Disini No : 2  

  Var
  . . .
Implementation
{$R *.dfm}
  //Tambahkan Disini No : 3

Tambahkan kode dibawah pada deklarasi tipe
Pada bagian


Code No.1 :

{mmmmm   THREAD QUERY   mmmmm}
type
 TQryRefreshThread = class(TThread)
 private
   AIBQuery : TIBQuery; // Ganti TIBquery sesuai dengan SQL Component yang anda gunakan

   ACommand : String;
   procedure RefreshData;
 protected
   procedure Create(const FIBQuery : TIBQuery;const FCommand: string);
   procedure Execute;override;
 public
 end;



Tambahkan deklarasi procedure dibawah setelah deklarasi tipe (diatas deklarasi var /variable global) pada unit anda.

Code No. 2:
procedure ExecThreadSql(AIBQuery: TIBQuery; ACommand: String);


Tambahkan kode dibawah setelah bagian Implementation

Code No. 3 :

{ TRefreshQryThread }
procedure TQryRefreshThread.Create(const FIBQuery: TIBQuery;
 const FCommand: string);
begin
 inherited Create(true);
 AIBQuery := FIBQuery;
 ACommand := FCommand;
 Resume;
end;

procedure TQryRefreshThread.Execute;
begin
 //inherited;
 FreeOnTerminate := true;
 Synchronize(RefreshData);
end;

procedure TQryRefreshThread.RefreshData;
begin
 with AIBQuery do begin
   Close;
   SQL.Clear;
   SQL.Add(ACommand);
   Prepare;
   Open;
 end;
end;


{mmmmm   Procedure Untuk menyederhanakan pemanggilan ThreadQuery   mmmmm}
procedure ExecThreadSql(AIBQuery: TIBQuery; ACommand: String);
var
 MyThread : TQryRefreshThread;
begin
 try
   MyThread := TQryRefreshThread.Create(AIBQuery, ACommand);
   with MyThread do begin
     FSqlCommand := ACommand;
     FIBQry := AIBQuery;
     if MyThread.Suspended then
       MyThread.Resume;
   end;
 except On E:Exception do
   raise Exception.Create(e.Message);
 end;
end;



Cara penggunaanya :

ExecThreadSql(BarangQry, 'SELECT Kode,Nama,Stok,Harga FROM TabelBarang ORDER BY Nama');

Post a Comment for "Execute Query dengan Thread (Thread query)"