FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[2978] Rollback 문이 안먹네요..ㅎㅎ
아폴론 [apollon] 2312 읽음    2008-12-22 14:54
if Datamd.IBTransaction1.inTransaction then Datamd.IBTransaction1.rollback;
    Datamd.IBTransaction1.StartTransaction;
try
    with SQLbal do begin
       first;
       while not eof do begin
          try
             with DataMd.SQLcode do begin
                open;
                while not eof do begin
                   ①<=======================
                   with DataMd.SQLtraffic do begin
                       sql.add('Update Tr110t Set    ');
                       Execsql;
                   end;
                   Next;
                end;
             end;
             if PRT_kubn = 'D' then begin
               Metax4R := TMetax4R.create(self);  //출력 폼
                Metax4R.Taxtab.Open; //임시테이블...
                   with Metax4R.SQLclcd do begin  //계산서 우측 사업자

                   end;
                   with Metax4R.SQLmscd do begin //계산서 좌측 사업자

                   end;
                   //=======테스트용==========2008.12.22
                   ②<=================================
                   with DataMd.SQLtraffic do begin
                        close;
                        sql.clear;
                        sql.add('Selectrrr Tr110t Set  '); //에러 유발..
                        Open;
                   end;
             end;
          except
              ③<=================================
              raise Exception.Create('');
          end;
       Next;
       end;
    end;
    Datamd.IBTransaction1.CommitRetaining();
  Except
     on E:Exception do begin
        ④<===============================
        Datamd.IBTransaction1.rollback;
        showmessage(E.Message ' );
        exit;
     end;
  end;

위의 소스는 간략하게 만들긴 했지만..잘 되는 소스입니다.
질문 들어 갑니다.
① 번에서 데이터를 수정합니다.==> OK
② 번에서 에러를 만듭니다. 출력시 에러가 나든..암튼 에러를 하나 맹급니다.
    그러면  ③번으로 넘어 갑니다.  에러를 받아 다시 ④번으로 넘깁니다.
④번에서  Rollback 문을 탑니다.
    그러니까.. ①번 수정데이터가  롤백 되는거죠...

그런데..아~쒸...
롤백이 안되는겁니다.
① ~ ④ 번까지 다 잘 타는데(디버깅 결과..)  롤백은 안되어 있는겁니다.
참 희한합니다.  물론 저거 땀시 골머리를 앓고 있습니다.

에러가 안나면 문제 없이 잘 되는데..클라이언트의 컴에 출력에러가 생기거나..기타 에러가 있으면
롤백 되어야 하는데...

살펴봐 주시면 감사하겠습니다.

+ -

관련 글 리스트
2978 Rollback 문이 안먹네요..ㅎㅎ 아폴론 2312 2008/12/22
2980     Re:Rollback 문이 안먹네요..ㅎㅎ 아폴론 2281 2008/12/22
2986         Re:Re:Rollback 문이 안먹네요..ㅎㅎ 아폴론 2318 2008/12/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.