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)"