// macro to control the execution of BDE APIs DBIResult DBIExec ( pCHAR module, UINT16 line, pCHAR function, DBIResult retVal ) { // this structure will be used to contain system information in case of error DBIErrInfo ErrInfo; // struttura do { // no error, immediate return if ( retVal == DBIERR_NONE ) { ErrorFlag = false; break; }; // ask BDE the information about the error that occurred ErrorFlag = true; DbiGetErrorInfo ( TRUE, ErrInfo ); // load szDBIStatus if ( ErrInfo.iError == retVal ) // specific error { strcpy ( szDBIStatus, ErrInfo.szErrCode ); if ( strcmp ( ErrInfo . szContext[0], "" ) ) { strcat ( szDBIStatus, ErrInfo.szContext[0]); } if ( strcmp ( ErrInfo . szContext[1], "" ) ) { strcat ( szDBIStatus, ErrInfo.szContext[1]); } if ( strcmp ( ErrInfo . szContext[2], "" ) ) { strcat ( szDBIStatus, ErrInfo.szContext[2]); } if ( strcmp ( ErrInfo . szContext[3], "" ) ) { strcat ( szDBIStatus, ErrInfo.szContext[3]); } } else // generic error { DbiGetErrorString ( retVal, szDBIStatus ); } // complete error information display // #define ErrCat(rslt) ((UINT16)(rslt) >> 8) // #define ErrCode(rslt) ((UINT16)(rslt) & 0x00FF) sprintf ( szDbiMessage, "Module:\t\t%s\nFunction:\t%s\nLine:\t\t%d\n" "Category:\t%d\nCode:\t\t%d\n\nMessage:\r\n%s", module, function, line, ErrCat ( retVal ), ErrCode ( retVal ), szDBIStatus ); MessageBox ( NULL, szDbiMessage, "Error:", MB_ICONHAND ); break; } while ( TRUE ); // end of function return retVal; }