Arsip: Ask: Open Query With Multi Thread

 
user image
more 19 years ago

cyber_hecker

mo nanya neh... :P pertama saya merancang sebuah form, yang terdiri dari 2 grid, yang nantinya tiap-tiap dbGrid menggunakan query yang berbeda. nah.. untuk meload / open satu query, dibutuhkan waktu 5 detik. jadi kalo kita ingin membuka kedua query, dibutuhkan total waktu 10 detik. pertanyaan : bisa gak kita membuka query tersebut dengan menggunakan kayak multi thread, jadi dalam satu waktu kedua-duanya di proses secara bersamaan. kalo bisa, gimana contoh kodingnya ? kalo koding ku yang sekarang sebagai berikut :

  with QMain do
  begin
    SQL.Clear;
    SQL.LoadFromFile(ExtractFilePath(ParamStr(0))+'QUERY\q_kegiatanfarmasi1.sql');
    Parameters[0].Value := maskTglAwal.Text;
    Parameters[1].Value := maskTglAkhir.Text;
    try
      Open;
    except
      on  e: Exception do
         MessageDlg(E.ClassName +#10#13+
         E.Message +#10#13+
         'Gagal Membuka Tabel !!',
         mtError, [mbOK], 0);
    end;
  end;
  with QMain2 do
  begin
    SQL.Clear;
    SQL.LoadFromFile(ExtractFilePath(ParamStr(0))+'QUERY\q_kegiatanfarmasi2.sql');
    Parameters[0].Value := maskTglAwal.Text;
    Parameters[1].Value := maskTglAkhir.Text;
    try
      Open;
    except
      on  e: Exception do
         MessageDlg(E.ClassName +#10#13+
         E.Message +#10#13+
         'Gagal Membuka Tabel !!',
         mtError, [mbOK], 0);
    end;
  end;
user image
more 19 years ago

kaka-delphi

Wah kayaknya seru tuch. Tapi (klo mnurut saya nich) sama aja kayaknya, pas ketika kita buat thread baru buat QMain dan QMain2, dia akan menyelesaikan dulu proses yang pertama dibuat. Misal thread QMain yang pertama dibuat, maka proses tersebut diselesaikan dulu terus menuju ke proses QMain2. Pusing ach..... ilmuku belum nyampe sana. Paling biasa buat thread yang looping berulang aja. Sok atuh para seniornya Unjuk Gigi (Ulil, deLogic, ZeAL, masdi2t, eko_elits, dll) terutama pa deLogic yang suka otak atik Dalem-an-nya Delphi dan ZeAL yang ber-thread dengan game-nya. Wakakakakkakaak...... ;) ;) ;)
user image
more 19 years ago

kaka-delphi

Saya juga jadi tertantang nich ... ce ileh :mrgreen: :mrgreen: Koding dulu ach .... biar ga sepi
user image
more 19 years ago

fafenail

Itu baru bicarakan ma temenku tadi siang, aku juga ada kasus yang sama, di Delphi 7, TAnimate dan Progressbar itidak mau jalan bareng saat load tabel, Tapi di Delphi 6 Ga masalah, Trus klo aplikasi dijalankan di windows 98 ga masalah, di XP Animate ga mau. Mungkin gara2 Manifast. Karena aku pindah ke Delphi 7 juga belum lama baru 1 Bulan ini. Hehehe. Tapi di Delphi 2005 belum diuji coba karena aku ga suka tampilannya yang terlalu penuh pakai monitor 15", Hehehhehe
user image
more 19 years ago

EkoIndri

sebenernya ada teknik simple untuk atasi kayak gitu... kalau kita menggunakan sleep, maka kita akan mengalami kasus seperti CH katakan ini trejadi karena thread masih dikunci coba jika kita gunakan timer... apa yang terjadi ????? kedua query akan dijalankan tidak bersamaan namun bukan berarti menunggu query pertama selesai dulu baru kedua query kedua akan diproses hanya beda waktu milisekon aja.... semoga membantu... memang bener, jika kita bisa bermain dengan thread dengan bener kita bisa membuat proses transaksi ataupun proses yang lain jadi cepat.
user image
more 19 years ago

kaka-delphi

Wah musti coba nich trik nya. Tapi ada sample kodingnya ga mas eko ;) kekekekkekeke............
user image
more 19 years ago

cyber_hecker

wah ternyata gak sesulit yang dibayangkan. rupanya setelah tau, caranya lumayan sederhana neh.. :
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB;
type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    DataSource1: TDataSource;
    DataSource2: TDataSource;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    BitBtn1: TBitBtn;
    Button1: TButton;
    procedure BitBtn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  //Thread class declaration - very simple
  TQThread = class(TThread)
  private
    FQuery: TADOQuery;
  protected
    procedure Execute; override;
  public
    constructor Create(Query: TADOQuery);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
uses DateUtils;
constructor TQThread.Create(Query: TadoQuery);
begin
  inherited Create(True);     //Create thread in a suspendend state so we can prepare vars
  FQuery := Query;            //Set up local query var to be executed.
  FreeOnTerminate := True;    //Free thread when finished executing
  Resume;
end;
procedure TQThread.Execute;
begin
  FQuery.DisableControls;
  FQuery.Open;                    //Perform the query
  FQuery.EnableControls;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  // ujicoba menggunakan query dibuka seperti biasa (sequential)
  ADOQuery1.Open;
  ADOQuery2.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  // ujicoba menggunakan thread
  TQThread.Create(ADOQuery1);
  TQThread.Create(ADOQuery2);
end;
end.
oom google, dan tante http://delphi.about.com/, you are soooo cool... , thanks a lot for little knowledge-nya. wakakakak
user image
more 19 years ago

deLogic

ya udah kalo dah isa... jadi gw gak perlu turun tangan.. karena kayaknya nama gw disebut2 neh... wakakaka.. kabur lagi... :d
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com