Q&A

  • 취소기능.... 흠...
Dbnavigator의 취소 버튼기능을 구현해보려합니다.

문제는 마지막 세번째 procedure의 table1.cancel인데엽.

디비그리드를 이동하려고 눌렀을때 수정모드로 되어있고 저장을 하지 않았다면

메시지와 함께 취소를하며 바로 이전의 레코드로 다시 돌아와야하는데여.

이게 잘 안되는군요....

도움말을 보니깐 못하는 영어 어렵게 해석하다보니, post 되기 전에만 cancel이

먹힌다는것 같은데, 이게 말이되나요?? 포스트한것을 취소는 못하나엽?

DBedit나 Dbimage는 lostfocus될때 바로 post가 되어버리쟈나여~



// 수정모드로 연다.

procedure TForm1.btnedit(Sender: TObject);

begin

dbedit1.Enabled:= true;

dbedit1.SetFocus;

dbedit1.selectall;

end;



// 저장(post)시킨다.

procedure TForm1.btnsave(Sender: TObject);

begin

try

table1.edit;

table1.Fields[1].AsString := dbedit1.Text;

table1.Fields[0].Assign(dbimage1.picture.Bitmap);

table1.Post;

showmessage('saved');

table1.Refresh;

dbedit1.Enabled:=false;

except

on E:Edbengineerror do

showmessage('Cannot Save with multiple data..');

end;

end;



// DBGrid를 이용해서 레코드 이동을 시도하려할때 만약 수정모드로 열려있는데

저장하지 않고 이동하려했다면 메시지를 출력하면서 이동전의 모습으로 돌아감을

구현....

procedure TForm1.DBGrid1CellClick(Column: TColumn);

begin

if dbedit1.Enabled = true then

begin

messagedlg('수정모드로 열려있습니다. 먼저 저장하십시오',mtconfirmation,[mbok],0);



table1.cancel --->>> 바로 이부분을 어케 손대야할쥐... 암담~



end

end;







1  COMMENTS
  • Profile
    Mr.Q 2000.07.24 02:31
    최준연 wrote:

    > Dbnavigator의 취소 버튼기능을 구현해보려합니다.

    > 문제는 마지막 세번째 procedure의 table1.cancel인데엽.

    > 디비그리드를 이동하려고 눌렀을때 수정모드로 되어있고 저장을 하지 않았다면

    > 메시지와 함께 취소를하며 바로 이전의 레코드로 다시 돌아와야하는데여.

    > 이게 잘 안되는군요....

    > 도움말을 보니깐 못하는 영어 어렵게 해석하다보니, post 되기 전에만 cancel이

    > 먹힌다는것 같은데, 이게 말이되나요?? 포스트한것을 취소는 못하나엽?

    > DBedit나 Dbimage는 lostfocus될때 바로 post가 되어버리쟈나여~

    >

    > // 수정모드로 연다.

    > procedure TForm1.btnedit(Sender: TObject);

    > begin

    > dbedit1.Enabled:= true;

    > dbedit1.SetFocus;

    > dbedit1.selectall;

    > end;

    >

    > // 저장(post)시킨다.

    > procedure TForm1.btnsave(Sender: TObject);

    > begin

    > try

    > table1.edit;

    > table1.Fields[1].AsString := dbedit1.Text;

    > table1.Fields[0].Assign(dbimage1.picture.Bitmap);

    > table1.Post;

    > showmessage('saved');

    > table1.Refresh;

    > dbedit1.Enabled:=false;

    > except

    > on E:Edbengineerror do

    > showmessage('Cannot Save with multiple data..');

    > end;

    > end;

    >

    > // DBGrid를 이용해서 레코드 이동을 시도하려할때 만약 수정모드로 열려있는데

    > 저장하지 않고 이동하려했다면 메시지를 출력하면서 이동전의 모습으로 돌아감을

    > 구현....

    > procedure TForm1.DBGrid1CellClick(Column: TColumn);

    > begin

    > if dbedit1.Enabled = true then

    > begin

    > messagedlg('수정모드로 열려있습니다. 먼저 저장하십시오',mtconfirmation,[mbok],0);

    >

    > table1.cancel --->>> 바로 이부분을 어케 손대야할쥐... 암담~

    >

    > end

    > end;

    >

    >

    >





    전체 흐름은 이해가 안되서, 단편적인 답변을 해보겠습니다.

    if table1.State in [dsInssert, dsEdit] then table1.post

    else table1.cancel; //데이터셋이 열려있으면 저장하고, 그렇지 않으면 취소.



    그리고, 한번 저장되면 되돌려 놓을수 없는걸로 알고있습니다.

    되돌리는 기능을 구현하려면 커밋, 롤백을 해야하는데요..

    이것을 위해서는 Database콤포를 이용해야 합니다. 이 콤포에 테이블을 지정해놓고,

    Database컴포넌트의 메서드를 이용하게 됩니다.

    StartTransaction과 commit, rollback메서드. 트랜잭션을 이용하면

    임시버퍼에 저장해놓았다가 커밋시에는 버퍼의 내용을 데이터셋에

    완전히 집어넣어버리고, 롤백메서드 사용시에 버퍼를 비우고 저장을 취소합니다.

    이걸 다 하려면, 전체적으로 데이터셋 연결을 다 바꿔줘야 할것같습니다.



    부족한부분은 지나가시는 고수분께서 보충설명부탁합니다.

    • 사람
    • 2000.07.24 06:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • kanis
    • 2000.07.24 06:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.07.24 20:03
      kanis wrote: > ADO를 사용해서 프로그램을 만들구, 또 설치프로그램도 만들었습니다. > 그런데.... mdac...
    • 나현희
      2000.07.25 02:22
      에구 에구... 담번에 알아 보시네. 그럴줄 알았다면 그냥 바로 물어볼걸... launch application dialog ...
    • 황현
    • 2000.07.24 06:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오광배
      2000.07.29 02:39
      박종삼 wrote: > 서버소켓에 특정 IP 번호를 대입시킬 방법은 없나요.. > > ServerSocket1.Socket.Conn...
    • Mr.Q
      2000.07.24 05:38
      김미좌 wrote: > 알려주시면 감사하겠습니다. 우선 호출하는 폼의 KeyPreview속성을 true로 놓고 KeyDo...
    • 김미좌
      2000.07.24 06:01
      답변감사합니다. 그런데 님의 말씀대로 했는데.... 실행이 되지않습니다 왜그럴까요 호출하는폼은 mdim...
    • Mr.Q
      2000.07.24 07:19
      김미좌 wrote: > 답변감사합니다. > 그런데 님의 말씀대로 했는데.... > 실행이 되지않습니다 > 왜그럴...
    • 김미좌
      2000.07.24 16:30
      답변감사합니다
    • 박상문
    • 2000.07.24 02:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.07.24 09:29
      박상문 wrote: > > 안녕하세요 > 현재 excel 로 작성된 data를 델파이 에서 끌어 올려고 합니다 > ...
    • 델초보
    • 2000.07.24 02:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정지호
      2000.07.24 19:03
      델초보 wrote: > 최준연님 답변에 감사드립니다. > 그런데 ShellExecute함수 사용하는 방법을 좀더 구체...
    • 최준연
    • 2000.07.24 00:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.24 02:31
      최준연 wrote: > Dbnavigator의 취소 버튼기능을 구현해보려합니다. > 문제는 마지막 세번째 procedure의...
    • 델초보
    • 2000.07.23 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최준연
      2000.07.24 00:20
      델초보 wrote: > 제가 넘 초보질문을 하나요? T.T > 폼에서 버튼이나 글씨를 클릭하면 익스플로러로 HTML...
    • 최준연
      2000.07.24 00:04
      사발우성 wrote: > 안뇽 하십니꺼 사발임당..^^ > > 올만에 질문임당...한2주.....^^ > > 지가엽.. ...
    • 사발우성
      2000.07.24 00:25
      헐 내용 없다니깐.....--+
    • 샘나라
      2000.07.27 11:50
      정말 감사합니다. (^^)(__) 꾸벅~~ 님들 덕에 연결하는데 성공했네요. 에거~~ 이렇게 간단한걸...
    • ADO광신자-왕자^^;
      2000.07.24 20:30
      안녕하세요..영원한 델초보 어린왕자입니다요.. 델5.0이니깐 ADO컴포넌트 쓰심이 어떠실런지.. TADOTable...
    • 최준연
      2000.07.24 00:00
      샘나라 wrote: > 델파이로 MS-Access DB를 연결해서 DB Grid에 나타내려고 합니다. > Table 컴포넌트와 D...
    • 최준연
      2000.07.23 23:42
      델초보 wrote: > SP -> SPSearch 를 작성하고 결과를 변수에 넣으려 하는데 에러가 나서 질문을 > 올립...
    • 최준연
    • 2000.07.23 23:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오광배
      2000.07.29 03:32
      최준연 wrote: > 정말 기본적인 문제인것 같은데 잘 안되는걸요... > > 버튼 클릭했을때에 데이타가 이...
    • 최준연
    • 2000.07.23 21:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 23:43
      최준연 wrote: > SetFocus를 단지 커서하나만 두는것이 아니라 텍스트 전체를 블록지정한 형태로 구현 > ...
    • 최준연
      2000.07.24 00:26
      Mr.Q wrote: > 최준연 wrote: > > SetFocus를 단지 커서하나만 두는것이 아니라 텍스트 전체를 블록지정...
    • 최준연
    • 2000.07.23 09:02
    • 3 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 09:29
      최준연 wrote: > 예를들어서, 테이블에 다음과같은 두개의 필드가 있습니다. > > 이름 -- char(20) > ...
    • 최준연
      2000.07.23 09:35
      Mr.Q wrote: > > DBImage컴포를 쓰세요. datasource를 지정하고, > datafield에 이미지가 저장되있는 b...
    • Mr.Q
      2000.07.23 09:49
      최준연 wrote: > Mr.Q wrote: > > > > DBImage컴포를 쓰세요. datasource를 지정하고, > > datafield...
    • 최준연
    • 2000.07.23 09:03
    • 4 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 09:18
      on EInvalidGraphic do 하시면됩니다. 디자인타임시, 예외오류메세지창이 뜰때, 읽어보면 예외명이 나옵...
    • 최준연
      2000.07.23 09:25
      Mr.Q wrote: > on EInvalidGraphic do 하시면됩니다. > 디자인타임시, 예외오류메세지창이 뜰때, 읽어보...
    • Mr.Q
      2000.07.23 09:39
      최준연 wrote: > Mr.Q wrote: > > on EInvalidGraphic do 하시면됩니다. > > 디자인타임시, 예외오류메...
    • 최준연
      2000.07.23 23:26
      비베에서는 예외처리를 하면 Run 시킬때도 그게 적용이 되어서 에러를 제어할수 있는데 델파이에서는 ex...
    • 왕초보
    • 2000.07.23 07:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Mr.Q
      2000.07.23 08:26
      -.-; 거의 모든 에러가, 스트링변수를 숫자형변수로 변환해주지 않아서 생긴것이고 나머지는 오타입니다...