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

FireBird Q&A
[469] [질문] interbase에서 commit 한 결과가 다른 query component에서 인식이 안됩니다.- 도와 주세요.. 흑
박한수 [hansya] 2165 읽음    2002-10-15 11:33
안녕하십니까..
interbase에서 아래와 같이 작업을 하였는데
commit 한 것이 인식이 안되네요..
우째 이런일이..
commit 하였는데도 말이지요..

고수님들 꼭 도와 주십시요..

박한수 올림


Data Module : DM    (default transactio 속성 없음)
Tranaction : TrCntr
Query for Select : QrCntrO (transaction 속성 TrCntr)
Query for Execute : QrCntr E (transaction 속성 없음)

문제의 logic
1.dm.QrCntr0를 이용하여 해당되는 data를 가져옴.
2. data를 가져와서 string에 저장하고 socket에 packet으로 실어 보내고
    QrcntrE를 이용하여  send_date와 seq_no 를 update 시킴
3. ack message가 정확한 값이면          
    QrcntrE를 commit 함
    정확한 값이 아나면 rollback 함.
4. 다시 함수를 호출하여, 1번의 select 문을 실행하면,
   위의 3번에서 commit한 data가 반영이 안되었는지, send_date null 이 아닌 문장이 또 retrive 됨
5. ibsql로 4번의 문장을 실행시키면, 3번에서 rollback 된 문이 반영되어 있음..

즉, QrCntrE를 이용하여  commit를 하였는데도
     QrCntrO에서 확인해 보면 commit 가 된 문장이 반영되어 있지 않습니다...

우째 이런 일이..
흑흑흑..

박한수 올림



procedure TBusMainForm.SendSaleData();
var
  sSql : String;
  iRecCnt : Integer;
  sSnd  : String;
  sRcv : String ;
begin
  sSql := '';
  sSnd := '';
  iRecCnt := 0;

  if Dm.TrCntr.InTransaction = False then Dm.TrCntr.StartTransaction;
  with Dm.QrCntrO do
  begin
    Try
      Close;
      Sql.Clear;
      sSql :=  'select TAG_DATE,CARD_NO,MACH_NO,TRADE_NO,FEE,';
      sSql := sSql + 'CARD_FLAG,TRA_FLAG,RATE_DISC,RECV_DATE,GUGAN_CD from rawdata ';
      sSql := sSql + 'where send_date is null ';
      Sql.Text := sSql;
      if Prepared = False then Prepare;
      open;
    Except
      exit;
    end;

    FetchAll;
    if (isEmpty) then
    begin
      SendEvtData();
      Exit;
    end;
    sSnd := FormatFloat('0000000',g_iCntrSaleDataSeqNo); // First Sequence
    First;
    while not(EOF) do
    begin
      If(iRecCnt > 18) then Break;         // 19분을 가져와서 소켓으로 실어 보냄
      sSnd := sSnd + FormatDateTime('yymmddhhmmss',Fields[0].AsDateTime) +  //tagdate(12)
            CompCardNo(Fields[1].AsString,1) +     // Card No(5)
            FormatFloat('0000',Fields[2].AsInteger) + //mach_no(4)
            FormatFloat('00000',Fields[3].AsInteger) + //TRADE_NO(5)
            FormatFloat('00000',Fields[4].AsInteger) +  // FEE(5)
            Fields[5].AsString +  // Card Flag(1)
            Fields[6].AsString +  // TRAG_FLAG(1)
            Fields[7].AsString +  // RATE_DISC (2)
            FormatDateTime('yymmddhhmmss',Fields[8].AsDateTime)+ //recv_date(12)
            Fields[9].AsString;  // GUGAN_CD (2)
      with Dm.QrCntrE do
      begin
         close;
         sql.clear;
         sSql := 'update RAWDATA Set Send_Date=:Send_Date,SEQ_NO=:SEQ_NO ' ;
         sSql := sSql +  'where TAG_DATE=:TAG_DATE and CARD_NO=:CARDNO and MACH_NO=:MACH_NO';
         sql.text := sSql;
         if Prepared = False then Prepare;
         Params[0].AsDateTime := Now;
         Params[1].AsInteger  := g_iCntrSaleDataSeqNo + iRecCnt;
         Params[2].AsDateTime := Dm.QrCntrO.Fields[0].AsDatetime;
         Params[3].AsString   := Dm.QrCntrO.Fields[1].AsString;
         Params[4].AsInteger  := Dm.QrCntrO.Fields[2].AsInteger;
         Dm.QrCntrE.ExecSql;// 1건식 가져 온 것에 대하여 send_date, seq_no update 반영
      end;
      next;
      inc(iRecCnt);
    end;
    g_sCntrSendCmd  := CMDSTR_SaleData;

    sRcv := CntrSRData(sSnd);  // 소켓으로 문장을 날니는 함수
    try
      if sRcv <> '' then
        if (StrToInt(Copy(sRcv,3,7)) = g_iCntrSaleDataSeqNo+iRecCnt) then
        begin
          Dm.TrCntr.Commit;  //소켓의 ack message가 정확한 값이면 commit를 때림
          g_iCntrSaleDataSeqNo := g_iCntrSaleDataSeqNo + iRecCnt;
        end
        else   Dm.TrCntr.Rollback
      else Dm.TrCntr.Rollback;
    except
      Dm.TrCntr.Rollback;
    end;
  end;
end;


+ -

관련 글 리스트
469 [질문] interbase에서 commit 한 결과가 다른 query component에서 인식이 안됩니다.- 도와 주세요.. 흑 박한수 2165 2002/10/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.