Q&A

  • 루푸를 돌리다가 취소할때..


델가족 여러분 안녕 하세요

While 문으로 루프를 돌리다가 필요실 중단하고 빠져나가는 것을 구현 하고자

Q&A란에서 다음을 카피했는데.... 음 문제는

커서가 모래시계로 바뀌면서 당췌 어떤버튼도 누를 수가 없습니다.



사용디비는 오라클 입니다.

어떻게 해야되는 거죠?



var StopFlag : Boolean;

procedure TForm1.btnStartClick(Sender: TObject);

begin

StopFlag := false;

While ..........do

if StopFlag then

break;

Application.ProcessMessages;

end;

end;







4  COMMENTS
  • Profile
    초보 2001.05.15 02:11
    초보 wrote:



    답변해 주신 님들께 감사드립니다.

    혜룡님의 사용법은 충분히 이해하고 적용 했는데....

    최초 루프를 돌리면 커서가 모래시계로 바뀌며(오라클 SQL모래시계) 당췌

    루프를 종료 하고자 하는 버튼을 Click할 수가 없습니다.

    루프를 시작하면 끝까지 갈 수 밖에 없네요... 쩝...



  • Profile
    최혜룡 2001.05.12 12:57
    아래 코드를 보니깐 제가 이전에 올린것이군요



    취소하고자 할때 사용되는 정지버튼의

    OnClick 이벤트처리부분이 누락되었습니다.

    그리고 DB(오라클)를 사용하신다는데

    아래 Loop에서 DB처리부분에 대한 코딩이

    생략되다보니 답변을 하기가 뭣 하지만



    아래 Loop에서 쿼리(또는 Table)의 Data를 계속적으로 읽어가면서

    그에 따른 처리를 하는걸로 생각됩니다.

    그리고 사용자가 정지버튼을 클릭할 경우 수행작업을 중단한다는

    것으로 보고 예를 드립니다.



    var StopFlag : Boolean;



    //중단버튼의 OnClick이벤트

    procedure TForm1.btnStopClick(Sender: TObject);

    begin

    StopFlag := true;

    end;



    //작업처리버튼의 OnClick이벤트

    procedure TForm1.btnStartClick(Sender: TObject);

    begin

    StopFlag := false;

    Query1.DisableControls;

    Query1.First; //Query1는 Open되어 있어야겠죠

    while (not Query1.Eof) do gegin //쿼리Data의 끝까지 Loop

    if StopFlag then //중단버튼을 Click할 경우 while 밖으로

    break; //빠져 나가거라

    Application.ProcessMessages; //Windows야 이Loop말고 다른일도 해야지?

    //(Help참조하세요 )



    . . . . . . //읽은 자료처리에 대한 코딩



    Query1.Next; <- 다음자료 읽어봐

    end;

    Query1.EnableControls;

    end;



    참고로 말씀드릴다면

    Loop로 처리할 자료 건수가 적다면 상기와 같이 하셔도 상관없겠지만

    그렇지 않다면 처리속도에 무리가 올겁니다

    가능하다면 Loop내에서 처리해야 할 일을

    DB가 처리토록 지시해야 합니다.

    (SQL구사능력과 경험에 따라 코딩량도 상당 부분 감소하죠)

    이런 자료처리방식은

    비싼 DB를 (공짜도 있긴 하지만) 제대로 활용하지 못할뿐만 아니라

    처리속도는 느리고, 개발자는 비슷비슷한 노가다(!!)업무에서 고생만 하는거죠



    자료처리는 가능한 DB에게 시키세요



    횡설수설 이만 줄입니다.

  • Profile
    델동이 2001.05.12 01:19
    StopFlag 가 false로 초기화 된 상태에서

    while문 내에서 true로 바뀌는 시점이 없는것 같은데요

    무한루프입니다.



    var StopFlag : Boolean;

    procedure TForm1.btnStartClick(Sender: TObject);

    begin

    StopFlag := false;

    While ..........do



    if StopCheck then // 이부분 추가

    StopFlag := true;



    if StopFlag then

    break;



    Application.ProcessMessages;

    end;

    end;









    초보 wrote:

    >

    > 델가족 여러분 안녕 하세요

    > While 문으로 루프를 돌리다가 필요실 중단하고 빠져나가는 것을 구현 하고자

    > Q&A란에서 다음을 카피했는데.... 음 문제는

    > 커서가 모래시계로 바뀌면서 당췌 어떤버튼도 누를 수가 없습니다.

    >

    > 사용디비는 오라클 입니다.

    > 어떻게 해야되는 거죠?

    >

    > var StopFlag : Boolean;

    > procedure TForm1.btnStartClick(Sender: TObject);

    > begin

    > StopFlag := false;

    > While ..........do

    > if StopFlag then

    > break;

    > Application.ProcessMessages;

    > end;

    > end;

    >

    >

    >

  • Profile
    이희정 2001.05.12 01:13
    초보 wrote:

    >

    > 델가족 여러분 안녕 하세요

    > While 문으로 루프를 돌리다가 필요실 중단하고 빠져나가는 것을 구현 하고자

    > Q&A란에서 다음을 카피했는데.... 음 문제는

    > 커서가 모래시계로 바뀌면서 당췌 어떤버튼도 누를 수가 없습니다.

    >

    > 사용디비는 오라클 입니다.

    > 어떻게 해야되는 거죠?

    >

    > var StopFlag : Boolean;

    > procedure TForm1.btnStartClick(Sender: TObject);

    > begin

    > StopFlag := false;

    > While ..........do

    > if StopFlag then

    > break;

    > Application.ProcessMessages;

    > end;

    > end;

    >

    >

    >





    Application.ProcessMessages; 밑에 exit;를 넣어주시면 어떠실지..(저도 테스트를 안해봐서 잘 모르겠지만 일케 하면 될 거 같은데여..^^)