Q&A

  • ProgressBar에 관한...

쿼리문이 실행되는 동안 프로그레스바에 진행율이 올라가게 할려고 합니다.

현재 조회 버튼을 클릭하면 각각의 조회 조건을 쿼리문으로 날립니다.  

  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

이라는 에러가 발생합니다.

프로그래스바는 실행과 동시에 벌써 파랗게 되어있구요

우찌해야합니까...

답변 부탁드립니다. 그럼 이만.
5  COMMENTS
  • Profile
    박장용 2002.10.18 20:19
    일단 쿼리도중 progressbar를 사용하신다는건 그곳 네트웍이 무지 느리거나 한거번에 조회하는 자료 량이 많거나 이시겠져 ^^;

    만약 멋으로 이렇게 하신다면 하지 마시기 바랍니다.
    윈도우 코딩에서 가장 시간을 많이 딜레이 시키는 요소가 화면에 뭔가를
    그리는 작업 입니다...

    그리고 아래 내용은 조회되는 상황을 진행바로 보고 싶으신 모양인데
    ^^; 결론부터 얘기드리면 안됩니다..아래 내용은 일단 조회버튼이 눌러지면
    일단 한참 모래시계후에 쿼리된 자료를 한번 훌터 내리는 것 밖에는 안됩니다.
    만약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;
  • Profile
    홍성락 2002.10.18 06:01
    아래 소스에서요
    1. ProgressBar1.Max := DM.query5.recordcount; 이전에 쿼리사 실행(open)된거겠죠?
    2. 4번째줄 close;의 의미는?
    3. while  DM.query5.Eof do이전에 First; 가 와야 될거 같구요
        while은 not가 빠진거 같구요 while Not Eof do begin
    4. 뒤에 PrePare;  open; 는 왜 뒤로 간건지요?
    hsr//////////////////////////////////////////
  • Profile
    김상수 2002.10.18 18:32

    답변 감사드립니다...

    쿼리문이 실행되는 시간이 길어서 이런거 만들어 볼라고

    게시판 뒤져서 대충 이렇게 해봤는데...

    저에 무지함이 다 드러나는군요...ㅡㅡ;;

    with DM.Query5 do begin
         First;
         while not 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;
          PrePare;
          open;
          inc(i);
          progressbar1.position := i;
          statusbar1.Panels[1].Text := '조회중입니다....';
          DM.Query5.Next;
         end;
    end;
    ProgressBar1.Max := DM.Query5.RecordCount;



    1. ProgressBar1.Max := DM.query5.recordcount; 이전에 쿼리사 실행(open)된거겠죠?
    ====>    open 된 이후로 옮겼습니다.

    2. 4번째줄 close;의 의미는?
    ====>  query를 닫는 메소드라서....

    3. while  DM.query5.Eof do이전에 First; 가 와야 될거 같구요
        while은 not가 빠진거 같구요 while Not Eof do begin
    ====> 잘못 봤군요..ㅡㅡ;
             first; 의 의미는???

    4. 뒤에 PrePare;  open; 는 왜 뒤로 간건지요?
    ====>  ㅡㅡ;

    이렇게 했는데 에러가 나는군요

    저에 무지함을 용서하시고 다시한번 봐주시면...^^:;;

    염치없게 설명도 좀 부탁드립니다...

    그럼 이만..
  • Profile
    바다를향해 2002.10.18 23:47
    쿼리 할때 오래걸리는 무료함을 달래기 위해...
    프로그래스바를 생각 하셨는데...
    기본적으로 DB에 쿼리를 하는데 걸리는 시간을 프로그래스바로
    표현한다는것은 무리가 있습니다.
    궂이 방법론을 얘기 하자면....
    아주 이쁜(?) 에니메이션을 준비 합니다.
    예를 들어 파일카피 할때 나오는..또는 V3에서 바이러스검사할때
    나오는 예쁜(?)에니메이션을 준비 해서...
    프로그래스바 대신 이 에니메이션을 돌리는 것이죠..^^;;
    무료함을 달래기 위한것이라면 이것이 더 깔끔, 참신 하지 않을까여..^^;;

  • Profile
    홍성락 2002.10.18 19:25
    아래 하신건 논리상 안 맞습니다.
    이 방법으론 쿼리하는 동안에 체크하지 못합니다.
    이런 방식은 쿼리후 뿌려주거나 자료조작시 하는 방법이교 또한 문법순이 맞지 않네요.
    일반 자주 사용하는 오라클에서도 쿼리 컴포넌트에서도 진행 시간은 잡아내기 힘들겁니다.
    비슷한 편법으로 타이머가 쿼리 오픈시 같이 돌면서 1초마다 쿼리가 계속 오픈중인 닫았는지만 체크하거나, 대출 개발자가 좀 길다고 생각하는 작업을 중심으로 max값를 잡아 돌려보는거....

    아래방법 말고 다른 것을 찾아 보세요.....
    hsr///////////////////////////////////////////////
    • 김민규
    • 2002.10.18 18:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김해우
      2002.10.18 19:36
      그냥 가기가 무해서.. DLL로 짠 프로그램 소스를 올려 주시면 답변이 가능한데요.. 지금 상황으로 보...
    • alex
    • 2002.10.18 16:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.19 00:31
      ODBC를 최신버젼으로 설치하신후 해보시면 어떨까요? 저두 전에 그런적이 있어서..
    • 유성욱
    • 2002.10.18 12:52
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.10.21 19:00
      안녕하세여.. 타락임다.. 흠. 전 TNMDayTime 은 써본적이 없습니다만 TTimer 를 추천합니다. 글구, ...
    • 유성욱
      2002.10.26 10:28
      --
    • 나윤호
    • 2002.10.18 07:46
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김상수
    • 2002.10.18 05:34
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 박장용
      2002.10.18 20:19
      일단 쿼리도중 progressbar를 사용하신다는건 그곳 네트웍이 무지 느리거나 한거번에 조회하는 자료 량이 ...
    • 홍성락
      2002.10.18 06:01
      아래 소스에서요 1. ProgressBar1.Max := DM.query5.recordcount; 이전에 쿼리사 실행(open)된거겠죠? 2....
    • 김상수
      2002.10.18 18:32
      답변 감사드립니다... 쿼리문이 실행되는 시간이 길어서 이런거 만들어 볼라고 게시판 뒤져서 ...
    • 바다를향해
      2002.10.18 23:47
      쿼리 할때 오래걸리는 무료함을 달래기 위해... 프로그래스바를 생각 하셨는데... 기본적으로 DB에 쿼리...
    • 홍성락
      2002.10.18 19:25
      아래 하신건 논리상 안 맞습니다. 이 방법으론 쿼리하는 동안에 체크하지 못합니다. 이런 방식은 쿼리후...
    • 이학진
    • 2002.10.18 05:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김종화
      2002.10.18 18:39
      Delphi6DemosAdo 폴더에 ADO 예제가 있네요... 이거 말구두 다른 DB 예제가 있으니깐. 함 봐보세요.... ...
    • 이추형
      2002.10.19 00:38
      BDE를 사용하신다면 OPEN하여 확인을 한번 해주시고요 혹 프로그램내에서 DB ALIAS를 설정하여 establish ...
    • 김영남
      2002.10.18 07:16
      DECODE 함수를 사용하는 것은 오라클에서 사용 하면 좋을 꺼 같구요... 아래처럼 DrawDataCell 이벤트에...
    • 김종균
      2002.10.18 09:45
    • 홍성락
      2002.10.18 03:50
      보이고 편집하려면, 디비 그리드에서 임시로 보여주는걸로하면 될겁니다. 편집시는 1,0숫자로 나옵니다 ...
    • 이추형
      2002.10.18 03:41
      혹, 1이라는 숫자가 나오는 컬럼이 c.고객구분 이라면 adoquery1.sql.add(' select c.고객일련번호, &...
    • 이추형
      2002.10.18 03:43
      자료실의 달력컴포넌트를 이용해 보심이 어떨지요.. 소스도 포함되어 있는것 같던데... 참고로 고영...
    • KDDG_DarkAngel
      2002.10.18 04:31
    • 김철권
      2002.10.18 07:07
      1. 고객이름으로 query문이 올바른가 체크 2. 고객이름은 문자일테니 이쪽을 보시길.
    • 이광수
      2002.10.18 21:06
      http://suppul.x-y.net/bbs/board.php3?table=oracle&query=view&l=3&p=1&go=0
    • 이추형
      2002.10.18 03:32
      인스톨 쉴드에서 설정하시면 어떨까요? odbc를 지원하며, 파일첨부로 인해 access같은경우 최종 dll 까지...
    • 박정찬
    • 2002.10.18 02:32
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 바다를향해
      2002.10.18 02:48
      그러시다면 config 파일을 하나 만드시죠... 폼사이즈, 이미지사이즈, 이미지위치, 폰트체, 폰트사이즈 등...
    • 신강섭
      2002.10.18 03:14
      저도 그런경우가 있었거든요 프로그램을 만들어서 사내에서는 잘썼습니다. 저희 회사는 윈2000이거든여 ...
    • 박정찬
      2002.10.18 08:55
      감사합니다. 폰트문제더군요. xp에서는 디폴트가 ansi...이고 이걸 한글로다 설정해 버리니 운영체제에 상...
    • 홍성락
      2002.10.18 03:16
      좀...그냥 돌렸습니다. 단 마지막 Panel은 길이가 마지막 전체 길이가 아니므로 설정을 잘해주어야 됩니다...
    • 바다를향해
      2002.10.18 03:04
      하나의 상태바에서 서로다른 힌트를 동시에 보여 주나여??? 말이 좀 안되는거 같은데....그렇다면 마우스...
    • 최은석
      2002.10.18 03:03
      상태바를 여러개의 판넬로 나누시고 상태바의 MouseMove 이벤트에서 처리해주면 되겠네요 다음은 상태...
    • 김동완
    • 2002.10.18 02:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 바다를향해
      2002.10.18 03:01
      음..방법이 있긴한데...기억이 잘 안나네여... 암튼 좀더 확실한 방법을 알려 드리죠... 메세지박스를 직...
    • 김동완
      2002.10.18 03:37
    • 박상순
    • 2002.10.18 02:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상순
      2002.10.19 01:21
      혹시 다른 분께서도 이런 문제가 발생할 경우 참고하시라구.. 글 남깁니다^.^ delphi의 문제가 아니라, ...
    • 이추형
      2002.10.18 03:45
      프로그램 IQM.EXE 을 activex로 작성하셔서 돌리시면 어떨까요 WinExec(pchar(zExePath + 'EVAConferenc...
    • 김상수
    • 2002.10.18 01:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최은석
      2002.10.18 01:48
      ###0.0#%
    • 김상수
      2002.10.18 02:03
      답변은 간결해서 좋은데요..^^;;; 안되네여 어떻게 나오나면요 그냥 소숫점 2자리까지 나오...
    • 이지인
    • 2002.10.18 01:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바다를향해
      2002.10.18 01:33
      데이터 압축에 관한 질문으로 생각이 드네여.. 우선 압축라이브러리가 있으시다면 그걸 이용 해서 압축 복...
    • 김의태
    • 2002.10.18 00:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 바다를향해
      2002.10.18 01:39
      SpeedButton.Glyph := nil; SpeedButton.Glyph.FreeImage; 이렇게 하면 불러왔던 이미지를 없애버립니다....
    • 김의태
      2002.10.18 02:33
      정말감사합니다...제가 좀 허접한 초보라서요..ㅋㅋ 어쨌든 nil값으로 해결이 되네요... 근데 FreeIm...