쿼리문이 실행되는 동안 프로그레스바에 진행율이 올라가게 할려고 합니다.
현재 조회 버튼을 클릭하면 각각의 조회 조건을 쿼리문으로 날립니다.
ProgressBar1.Max := DM.query5.recordcount;
with DM.Query5 do
begin
close;
while DM.query5.Eof do
begin
ParamByName('adt_start_date').Asdatetime:= ldt_start_date;
ParamByName('adt_end_date').Asdatetime:= ldt_end_date;
ParamByName('as_entp_cd').Asstring:=ls_entp_cd;
inc(i);
progressbar1.position := i;
DM.Query5.Next;
end;
PrePare;
open;
end;
이렇게 실행하면 Query5 : cannot perform this operation on a closed dateset
이라는 에러가 발생합니다.
프로그래스바는 실행과 동시에 벌써 파랗게 되어있구요
우찌해야합니까...
답변 부탁드립니다. 그럼 이만.
만약 멋으로 이렇게 하신다면 하지 마시기 바랍니다.
윈도우 코딩에서 가장 시간을 많이 딜레이 시키는 요소가 화면에 뭔가를
그리는 작업 입니다...
그리고 아래 내용은 조회되는 상황을 진행바로 보고 싶으신 모양인데
^^; 결론부터 얘기드리면 안됩니다..아래 내용은 일단 조회버튼이 눌러지면
일단 한참 모래시계후에 쿼리된 자료를 한번 훌터 내리는 것 밖에는 안됩니다.
만약DBGrid에 연결 시키셨다면 이미 조회가 다 된 내용을 한번 쭈~욱 훌터내리면서 진행바를 보인다는 얘기인데 좀 우숩죠.. ^^;
아.. 그전에 아래 쿼리처리방식은 잘못 되었습니다..
어디 한군데가 잘못 된게 아니라 전체가 다 틀렸습니다..
아마 DB관련 코딩이 처음 이신것 같은데 가급적 다른분들의 소스를
참조하신후 코딩을 하시는게 좋을것 같습니다..
그리고 프로그래스바도 마지막에 max값을 처리하는게 아닙니다..
미리 max값을 정해놓고 position을 더해가면서 퍼센트가 표시 되는 거겠죠 ^^
글구 아래와 같이 한다구 해서 화면에 진행바가 표시되는것도 의문입니다..
제생각엔 아마 안될것 같은데요..
refresh를 해줘야 할겁니다..
글구 recordcount는 가급적 사용하지 마십시오..
델파이 DBaware는 버퍼 크기 만큼 가져오기 때문에 recordcount를 위해서는
한번 더 조회작업이 이루어 집니다..당연히 시간이 더 걸리겠죠..
아래와 같이 한번 해보세요..원하시는 효과가 날겁니다..
저두 돌려보지는 않은거라 에러가 있을수도 있지만
보시면 이해가 가실겁니다.. 안되면 메일을 주세요..
procedure TForm1.Button1Click(Sender: TObject);
begin
Animate1.active := True; // <--이건 win32 tab에 있는 콤포넌트입니다.
// Commonavi를 aviCopyFiles로 하시구요..
with DM.Query5 do begin
SQL.clear;
SQL.add('select * from tempTable ');
SQL.add(' where STARTDATE = :p1 ');
SQL.add(' and TPCD = :p2 ');
ParamByName('p1').Asdatetime:= ldt_start_date;
ParamByName('p2').Asstring:=ls_entp_cd;
PrePare;
open;
end; //end of with
Animate1.active := False;
end;