|
꽁수 한가지 가르쳐 드리겠읍니다(권장안함)
메세지로 출력되는 에러코드를 추출하는것도 한가지 방법이긴 합니다..
정재만 님이 쓰신 글 :
: 형 변환이 안되고 있다는 말씀이 컴파일 에러가 난다는 말인가요?
:
: 아니면 형변환후 기본값이 제대로 출력이 안된다는 말씀인지?
:
:
: 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);
: : : }
: : : }
|