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

FireBird Q&A
[863] duplcate transaction id 에러가 나요... 도와주세요...
감자탕 [windsock2000] 1687 읽음    2004-01-19 15:17
안녕하세요...
데이터베이스는 firebird 1.5 이구요... 컨넥션은 dbexpress 를 쓰구요...
프로그램에서 아래와 같은 함수를 만들어서 데이터베이스에 데이터를 저장/수정/삭제 등을 하고 있습니다.

저 함수를 호출하여 쿼리를 날리는건 다중으로 들어올수 있습니다. 소켓, UI 이벤트, 타이머 등등에서 자주 호출을 하지요.

그런데 간혹 duplcate transaction id 에러 메세지가 뜨면서 에러가 납니다. 그래서 해결하기 위해 intransaction 속성도 체크해보기도 하구 하는데 이 넘이 어떤 특정한 경우에 무조건 true 만 리턴해서 무한루프로 대기를 하더라구요... 그래서 아래와 같이 임의의 전역변수로 대체를 했습니다... 좀 무식하지만.. ㅋㅋ

의심이 나는 부분은 소켓쪽에서 쓰레드를 사용하는데... 소켓에서 호출을 하는 경우에 특히 트랜잭션 듀플 아이디 에러가 자주 나옵니다...
쓰레드 사용으로 인해 발생할수 있는 문제가 있는지요?...
그리구 함 듀플 에러가 뜬 후에 롤백이 작동이 안되네요... 파이어버드의 롤백이 이상 없는지.... 에러 났을때 롤백을 제대로 할라면 어떻게 해야 하는지요?...
아래와 같은 함수를 만들어서 쓰시는 분들중에 더 좋은 방법은 없는지요?...
등등의 질문에... 많은 분들의 도움 부탁드립니다. 꾸벅 ('') (..)

//함수 설명 : sls_Query => 쿼리가 트랜잭션으로 한덩어리로 묶이기에 스트링 처리를 안하구 스트링 리스트로 묶었습니다. (여러개 쿼리를 한 트랜잭션으로 묶는다는 의미)
bool __fastcall Tfrm_Main::DataQueryExecute(TStringList *sls_Query)
{
    bool b_Return = false;
   
    //이 아래의 루프는 intransation 속성을 체크할때 이게 제대로 동작을 안하더라구요. 그래서 임시로 아래와 같이 만들었습니다. 어쩔수 없는 경우에는... 3초 이상이 되면 일단 함 트랜잭션을 날리는 거구요...
    TDateTime d_CheckTime = Now();
    while (i_GTID2 != 0 && SecondsBetween(d_CheckTime, Now()) < 3)
        Application->ProcessMessages();


    i_GTID1++;

    TTransactionDesc TD;
    TD.TransactionID = i_GTID1;
    TD.IsolationLevel = xilREADCOMMITTED;
    dbx_MainCon->StartTransaction(TD);

    try
    {
        for (int k = 0; k < sls_Query->Count; k++)
            dbx_MainCon->ExecuteDirect(sls_Query->Strings[k]);
       
        dbx_MainCon->Commit(TD); // on success, commit the changes;
        dbx_MainCon->
        b_Return = true;
    }
    catch (...)
    {
      dbx_MainCon->Rollback(TD); // on failure, undo the changes
    }

    i_GTID1 = 0;
    return b_Return;
}

+ -

관련 글 리스트
863 duplcate transaction id 에러가 나요... 도와주세요... 감자탕 1687 2004/01/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.