diff options
Diffstat (limited to 'src/core/xbfields.cpp')
-rwxr-xr-x | src/core/xbfields.cpp | 77 |
1 files changed, 68 insertions, 9 deletions
diff --git a/src/core/xbfields.cpp b/src/core/xbfields.cpp index e683d9c..85ac145 100755 --- a/src/core/xbfields.cpp +++ b/src/core/xbfields.cpp @@ -2,7 +2,7 @@ XBase64 Software Library -Copyright (c) 1997,2003,2014,2022 Gary A Kunkel +Copyright (c) 1997,2003,2014,2022,2023 Gary A Kunkel The xb64 software library is covered under the terms of the GPL Version 3, 2007 license. @@ -87,8 +87,8 @@ xbInt16 xbDbf::GetDateField( xbInt16 iFieldNo, xbDate &dtFieldValue ) const{ xbInt16 iRc; if(( iRc = GetField( iFieldNo, s )) != XB_NO_ERROR ) return iRc; - dtFieldValue.Set( s ); - return XB_NO_ERROR; + return dtFieldValue.Set( s ); + // return XB_NO_ERROR; } /************************************************************************/ @@ -106,8 +106,8 @@ xbInt16 xbDbf::GetDateField( const xbString &sFieldName, xbDate &dtFieldValue ) xbInt16 iRc; if(( iRc = GetField( sFieldName, s )) != XB_NO_ERROR ) return iRc; - dtFieldValue.Set( s ); - return XB_NO_ERROR; + return dtFieldValue.Set( s ); + // return XB_NO_ERROR; } /************************************************************************/ @@ -163,6 +163,7 @@ xbInt16 xbDbf::GetField( xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBu return XB_NO_ERROR; } + /************************************************************************/ //! @brief Get decimal for field name. /*! @@ -605,6 +606,68 @@ xbInt16 xbDbf::GetMemoFieldLen( const xbString &sFieldName, xbUInt32 &ulMemoFiel #endif // XB_MEMO_SUPPORT /************************************************************************/ +//! @brief Get field null status +/*! + \param iFieldNo Number of field to retrieve. + \param bIsNull Output field value. If field is all spaces on record buffer, returns true. + \returns The field routines return one of:<br> + XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br> + XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA +*/ +xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull ) const { + return GetNullSts( iFieldNo, bIsNull, 0 ); +} + +/************************************************************************/ +//! @brief Get field null status +/*! + \param iFieldName Field Name of field to retrieve. + \param bIsNull Output field value. If field is all spaces on record buffer, returns true. + \returns The field routines return one of:<br> + XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br> + XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA +*/ + +xbInt16 xbDbf::GetNullSts( const xbString &sFieldName, xbBool &bIsNull ) const { + return GetNullSts( GetFieldNo( sFieldName ), bIsNull, 0 ); +} + +/************************************************************************/ +//! @brief Get field null status +/*! + \param iFieldNo Number of field to retrieve. + \param bIsNull Output field value. If field is all spaces on record buffer, returns true. + \param iRecBufSw 0 - Record buffer with any updates.<br>1 - Record buffer with original data. + \returns The field routines return one of:<br> + XB_NO_ERROR<br>XB_INVALID_DATA<br>XB_INVALID_FIELD_NO<br>XB_INVALID_FIELD_NAME<br> + XB_INVALID_FIELD_TYPE<br>XB_INVALID_DATA +*/ + +xbInt16 xbDbf::GetNullSts( xbInt16 iFieldNo, xbBool &bIsNull, xbInt16 iRecBufSw ) const +{ + if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) { + return XB_INVALID_FIELD_NO; + } + bIsNull = xbTrue; + char *p; + if( iRecBufSw ) + p = (char *) SchemaPtr[iFieldNo].pAddress2; + else + p = (char *) SchemaPtr[iFieldNo].pAddress; + + xbUInt32 ulLen = SchemaPtr[iFieldNo].cFieldLen; + xbUInt32 ul = 0; + + while( ul < ulLen && bIsNull ){ + if( *p++ != ' ' ) + bIsNull = xbFalse; + else + ul++; + } + return XB_NO_ERROR; +} + +/************************************************************************/ //! @brief Get unsigned long field for field number. /*! \param iFieldNo Number of field to retrieve. @@ -625,13 +688,11 @@ xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const iErrorStop = 100; throw rc; } - if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){ iErrorStop = 110; rc = XB_INVALID_FIELD_TYPE; throw rc; } - xbString sTemp; if(( rc = GetField( iFieldNo, sTemp, 0 )) != XB_NO_ERROR ){ iErrorStop = 120; @@ -645,14 +706,12 @@ xbInt16 xbDbf::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const } ulFieldValue = strtoul( sTemp.Str(), NULL, 10 ); } - catch (xbInt16 rc ){ xbString sMsg; sMsg.Sprintf( "xbDbf::GetULongField() Exception Caught. Error Stop = [%d] rc = [%d]", iErrorStop, rc ); xbase->WriteLogMessage( sMsg.Str() ); xbase->WriteLogMessage( GetErrorMessage( rc )); } - return XB_NO_ERROR; } |