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
[47907] Re:Re:Re:Re:Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법?
강재호.만해 [greenuri] 1251 읽음    2007-01-26 14:49
대충 결론을 냈습니다.

EDBEngineError 객체는 BDE에서 생성해서 넘긴다고 되어 있네요

그런데 TSQLQuery는 BDE를 통하지 않고 DB에 접근 하기 때문에

EDBEngineError 예외 객체를 만들지 않고 EDatabaseError 객체로 넘겨 주는것 같습니다.

TIBQuery 객체를 이용해서 다시 한번 해볼려고 합니다.

EException
EDatabaseException
EDBEngineError

계층도가 저렇게 되어 있어서

강제로 EDatabaseException에서 EDBEngine객체를 생성도 시켜 봤는데요 에러 나네요 쩝~

강재호.만해 님이 쓰신 글 :
: 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();
:         }
:
: 저 위에 코드를 보시면 아시겠지만
:
: EDatabaseError &E; 변수를 가져와서
:
: EDBengine* Error;
: Error = dynamic_cast<EDbEngineError*>(&E); <-  여기서 형변환을 시킵니다.
:
: if (Error != NULL )  <- 여기서 Error 이 NULL이라서 여기 밑의 ShowMessage를 실행 시키지 않고 있네요
:   {
:   ShowMessage(Error->Errors[Error->ErrorCount]->Message);
:   }
:
: 혹시나 제가 뭘 잘못 할고 있는건 아닌가 싶어서
:
: Ctrl+F7 키를 눌러서 해봤느데 같은 내용이 나오네요 어떻게 해야 할런지 쩝~ ^^
:
:
: 정재만 님이 쓰신 글 :
: : 꽁수 한가지 가르쳐 드리겠읍니다(권장안함)
: :
: : 메세지로 출력되는 에러코드를 추출하는것도 한가지 방법이긴 합니다..
: :
: :
: : 정재만 님이 쓰신 글 :
: : : 형 변환이 안되고 있다는 말씀이 컴파일 에러가 난다는 말인가요?
: : :
: : : 아니면 형변환후 기본값이 제대로 출력이 안된다는 말씀인지?
: : :
: : :
: : : dynamic_cast이후 TDBError *E = Err->Errors[i];로 함번 해보셨는지?
: : :
: : :
: : : 강재호.만해 님이 쓰신 글 :
: : : : 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();
: : : :         }
: : : : 제 코드에도 저 부분이 있긴 한데요
: : : :
: : : : 제가 타입 캐스팅을 잘못한건지 EDatabaseError* 에서 EDBEngineError*로 형 변환이 안되고 있네요
: : : :
: : : : 정재만 님이 쓰신 글 :
: : : : : 도움이 될련지
: : : : :
: : : : : 샘플코드을 참조하세요....
: : : : :
: : : : : void __fastcall TMainForm::ErrorCheck (TDataSet *TDataSet, EDatabaseError *E, TDataAction &Action)
: : : : : {
: : : : :   AnsiString S;
: : : : :   EDBEngineError *Err = dynamic_cast<EDBEngineError*>(E);
: : : : :
: : : : :   if (Err) {
: : : : :      for (int i = 0; i < Err->ErrorCount; i++) {
: : : : :          if (i > 0) AppendStr(S, '\n');
: : : : :          TDBError *E = Err->Errors[i];
: : : : :          AppendStr(S, Format( "%.4x (%d): %s",
: : : : :                               ARRAYOFCONST((E->ErrorCode, E->NativeError,E->Message))));
: : : : :      }
: : : : :      DatabaseError(S, 0);
: : : : :   }
: : : : : }

+ -

관련 글 리스트
47881 [만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 1373 2007/01/25
47882     Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 정재만 1113 2007/01/25
47884         Re:Re:[만해] EDataBaseError에서 ErrorCode 뽑아 내는법? 강재호.만해 978 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 뽑아 내는법? 강재호.만해 1251 2007/01/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.