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

C++빌더 Q&A
C++Builder Programming Q&A
[47881] [만해] EDataBaseError에서 ErrorCode 뽑아 내는법?
강재호.만해 [greenuri] 1373 읽음    2007-01-25 09:54
쿼리를 전담에서 수행하는 함수가 있습니다.

이 함수에서 쿼리를 수행하고, 만약 예외가 발생하면 그 에러 코드를 결과값으로

정상 수행이면 1을, 넘기는 함수가 있는데요

try
{
쿼리 수행 구문,
}
catch ( EDatabaseError )
{
예외 처리 구문
}
catch ( EDBEngine )
{
예외 처리 구문
}
이런 스탈로 만든 함수인데요

에러가 EDatabaseError이 나오고요,

EDatabaseError에서 에러 코드를 받아 내는 방법을 찾고 있습니다.

구글에서 뒤져 보니깐

EDatabaseError을 EDBEngineError로 바꿔서 Error[idx]->ErrorCode를 가져 오는 방법이 있길래

시도를 해봤는데요

dynamic_cast가 안 먹히네요

그것외에 다른 방법이 없나 뒤져 보고 있는 중입니다.

혹시나 해서 EDatabaseError에서 GetLastError도 받아 봤는데요 아닌것 같네요

EDatabaseError에서 ErrorCode를 어떻게 받아 내야 하는지 아시는분 좀 갈켜주세요~ ^^

ps. 데이타베이스는 Firebird 2.0 12748 이고 Embedded로 사용하고 있습니다.

int __fastcall TDM_GDB::DataQueryExecute(const TStringList* &sls_Query, const AnsiString &strCaller)
{
    bool i_Return = 1;

    TDateTime d_CheckTime = Now();
    while (i_GTID1 != 0 && SecondsBetween(d_CheckTime, Now()) < 3)
    Application->ProcessMessages();

    i_GTID1++;

    TTransactionDesc TD;
    TD.TransactionID = i_GTID1;
    TD.IsolationLevel = Dbxpress::xilREADCOMMITTED;
    dbx_MainCon->StartTransaction(TD);
    int k=0;
    __try
    {
        for ( k = 0; k < sls_Query->Count; k++)
        {
            //LOGOUT("%s", sls_Query->Strings[k]);
            if(strCaller == "CalculateUser")
            {
                //LOGOUT("%s", sls_Query->Strings[k]);
            }

            dbx_MainCon->ExecuteDirect(Trim(sls_Query->Strings[k].Trim()));
        }

        dbx_MainCon->Commit(TD); // on success, commit the changes;
        i_Return = 1;

    }
    catch (const EDBEngineError &E)
        {
        ShowMessage(E.Message);
        dbx_MainCon->Rollback(TD);
        i_Return = E.Errors[E.ErrorCount]->ErrorCode;
        }
    catch (EDatabaseError& E)
        {
        EDBEngineError* Error;
        Error = dynamic_cast<EDBEngineError*>(&E);
        if ( Error != NULL )
            {
            ShowMessage(Error->Errors[Error->ErrorCount]->Message);
            }
        ShowMessage(E.Message);
        dbx_MainCon->Rollback(TD); // on failure, undo the changes
        ErrorLogs("TDM_GDB::DataQueryExecute - 2 : ", sls_Query->Strings[k] + "\n\n");
        i_Return = GetLastError();
        }
    catch (...)
        {
        dbx_MainCon->Rollback(TD); // on failure, undo the changes
        ErrorLogs("TDM_GDB::DataQueryExecute - 2 : ", sls_Query->Strings[k] + "\n\n");
        throw("Error Happen : " + sls_Query->Strings[k] );
        }

    i_GTID1 = 0;
    return i_Return;
}

+ -

관련 글 리스트
47881 [만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 1373 2007/01/25
47882     Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 정재만 1113 2007/01/25
47884         Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 979 2007/01/25
47885             Re:Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 정재만 912 2007/01/25
47886                 Re:Re:Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 정재만 909 2007/01/25
47889                     Re:Re:Re:Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 1079 2007/01/25
47907                         Re:Re:Re:Re:Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 1252 2007/01/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.