아래것을 실행시키면 시간이 좀 걸리는데,
이시간에 진행상황를 보이려고 하는데 어떻게 해야 하나요?
뭐 progressbar나 gauge를 쓰면 될것같은데 모르겠네요.
혹시 아시는 분 있으시면 답변주시면 좋겠습니다.
procedure TSYSSS201Form.Work_BitClick(Sender: TObject);
begin
with MJM_Query do
begin
Close;
SQL.Clear;
SQL.Add('Delete from stockyear');
SQL.Add('where ymd = :ymd');
Prepare;
ParamByname('ymd').AsString := YEAR_Edit.Text;
ExecSql;
end;
with MJM_Query do
begin
Close;
SQL.Clear;
SQL.Add('insert into stockyear');
SQL.Add('(ymd, stgbn, stcode, stsize, acnt, aunitamt, aamt,');
SQL.Add('bcnt, bunitamt, bamt, abcnt, abunitamt, abamt, jobymd)');
SQL.Add('select ymd, stgbn, stcode, stsize, acnt, aunitamt, aamt,');
SQL.Add('bcnt, bunitamt, bamt, abcnt, trunc(abamt/abcnt) abunitamt, abamt, jobymd');
SQL.Add('from(select ymd, stgbn, stcode, stsize, acnt, trunc(aamt/acnt) aunitamt, aamt,');
SQL.Add('bcnt, trunc(bamt/bcnt) bunitamt, bamt, nvl(acnt,0)-nvl(bcnt,0) abcnt,');
SQL.Add('nvl(aamt,0)-nvl(bamt,0) abamt, jobymd');
SQL.Add('from(select substr(ymd,1,4) ymd, stgbn, stcode, stsize,');
SQL.Add(' sum(decode(iogbn,''i'',cnt)) acnt,');
SQL.Add(' sum(decode(iogbn,''i'',amt)) aamt,');
SQL.Add(' sum(decode(iogbn,''o'',cnt)) bcnt,');
SQL.Add(' sum(decode(iogbn,''o'',amt)) bamt,');
SQL.Add(' substr(to_char(sysdate,''yyyymmdd''),1,8) jobymd');
SQL.Add('from io');
SQL.Add('where');
SQL.Add('substr(ymd,1,4) = :ymd');
SQL.Add('group by substr(ymd,1,4), stgbn, stcode, stsize))');
SQL.Add('where acnt <> 0');
SQL.Add('and bcnt <> 0');
SQL.Add('and abcnt <> 0');
Prepare;
ParamByname('ymd').AsString := YEAR_Edit.Text;
ExecSql;
end;
end;
우선, gauge 이름을 gauProg 이라고 하죠.
1.
쿼리 select 하기 전에 일단 gauge의 maximun 값을 줍니다.
gauProg.MaxValue := iCnt; // iCnt 값은 select한 레코드 카운트 개수.
a := 0;
2. select해온 값을 한 건씩 insert할 때에는 for문이나 while문을 사용할 것입니다.
for문이나 while문 안에 이처럼 적어줍니다.
a := a + 1; // insert하고 있는 건수를 count하는 변수.
gauProg.Progress := a;
Application.ProcessMessages; // gauge 값을 바로 화면에 반영...
쉽죠? ^^
도움말 참조하시면 다 나옵니다.^^