summaryrefslogtreecommitdiff
path: root/src/core/xbfields.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/xbfields.cpp')
-rwxr-xr-xsrc/core/xbfields.cpp1130
1 files changed, 0 insertions, 1130 deletions
diff --git a/src/core/xbfields.cpp b/src/core/xbfields.cpp
deleted file mode 100755
index e683d9c..0000000
--- a/src/core/xbfields.cpp
+++ /dev/null
@@ -1,1130 +0,0 @@
-/* xbfields.cpp
-
-XBase64 Software Library
-
-Copyright (c) 1997,2003,2014,2022 Gary A Kunkel
-
-The xb64 software library is covered under the terms of the GPL Version 3, 2007 license.
-
-Email Contact:
-
- XDB-devel@lists.sourceforge.net
- XDB-users@lists.sourceforge.net
-
-*/
-
-#include "xbase.h"
-
-namespace xb{
-
-/************************************************************************/
-//! @brief Get xbDouble field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param dFieldValue Output field value.
- \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::GetDoubleField( const xbString &sFieldName, xbDouble &dFieldValue ) const {
- return GetDoubleField( GetFieldNo( sFieldName ), dFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get xbDouble field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dFieldValue Output field value.
- \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::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue ) const {
- xbInt16 iRc = XB_NO_ERROR;
- char buf[21];
- memset( buf, 0x00, 21 );
- if(( iRc = GetRawField( iFieldNo, buf, 21, 0 )) >= XB_NO_ERROR ){
- dFieldValue = strtod( buf, NULL );
- return XB_NO_ERROR;
- } else
- return iRc;
-}
-/************************************************************************/
-//! @brief Get xbDouble field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dFieldValue Output field value.
- \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::GetDoubleField( xbInt16 iFieldNo, xbDouble &dFieldValue, xbInt16 iRecBufSw ) const {
- xbInt16 iRc = XB_NO_ERROR;
- char buf[21];
- memset( buf, 0x00, 21 );
- if(( iRc = GetRawField( iFieldNo, buf, 21, iRecBufSw )) >= XB_NO_ERROR ){
- dFieldValue = strtod( buf, NULL );
- return XB_NO_ERROR;
- } else
- return iRc;
-}
-
-/************************************************************************/
-//! @brief Get xbDate field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param dtFieldValue Output field value.
- \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::GetDateField( xbInt16 iFieldNo, xbDate &dtFieldValue ) const{
- xbString s;
- xbInt16 iRc;
- if(( iRc = GetField( iFieldNo, s )) != XB_NO_ERROR )
- return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get xbDate field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param dtFieldValue Output field value.
- \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::GetDateField( const xbString &sFieldName, xbDate &dtFieldValue ) const{
- xbString s;
- xbInt16 iRc;
- if(( iRc = GetField( sFieldName, s )) != XB_NO_ERROR )
- return iRc;
- dtFieldValue.Set( s );
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get xbString field for field name.
-/*!
- \param sFieldName Name of field to retrieve
- \param sFieldValue Output field value.
- \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::GetField( const xbString &sFieldName, xbString &sFieldValue ) const{
- return GetField( GetFieldNo( sFieldName ), sFieldValue, 0 );
-}
-/************************************************************************/
-//! @brief Get field data for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \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::GetField( xbInt16 iFieldNo, xbString &sFieldValue ) const{
- return GetField( iFieldNo, sFieldValue, 0 );
-}
-/************************************************************************/
-//! @brief Get field data for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \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::GetField( xbInt16 iFieldNo, xbString &sFieldValue, xbInt16 iRecBufSw) const
-{
- xbUInt32 iLen;
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- sFieldValue = "";
- return XB_INVALID_FIELD_NO;
- }
- iLen = SchemaPtr[iFieldNo].cFieldLen;
- sFieldValue = "";
- if( iRecBufSw )
- sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress2, iLen ); // original record buffer
- else
- sFieldValue.Append( (char *) SchemaPtr[iFieldNo].pAddress, iLen ); // current record buffer
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get decimal for field name.
-/*!
- This routine retreives a field's decimal length.
- \param sFieldName Name of field to retrieve
- \param iFieldDecimal Output field value.
- \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::GetFieldDecimal( const xbString &sFieldName, xbInt16 & iFieldDecimal ) const {
- return GetFieldDecimal( GetFieldNo( sFieldName ), iFieldDecimal );
-}
-
-
-/************************************************************************/
-//! @brief Get decimal for field number.
-/*!
- This routine retreives a field's decimal length.
- \param iFieldNo Number of field to retrieve
- \param iFieldDecimal Output field value.
- \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::GetFieldDecimal( xbInt16 iFieldNo, xbInt16 & iFieldDecimal ) const {
-
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- return XB_INVALID_FIELD_NO;
- }
- iFieldDecimal = SchemaPtr[iFieldNo].cNoOfDecs;
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get field length for field name.
-/*!
-
- This function retrieves a field's length.
-
- \param sFieldName Name of field to retrieve
- \param iFieldLen Output field length value.
- \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::GetFieldLen( const xbString &sFieldName, xbInt16 &iFieldLen ) const {
- return GetFieldLen( GetFieldNo( sFieldName ), iFieldLen );
-}
-
-
-/************************************************************************/
-//! @brief Get field length for field number.
-/*!
- This function retrieves a field's length.
-
- \param iFieldNo Name of field to retrieve
- \param iFieldLen Output field length value.
- \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::GetFieldLen( xbInt16 iFieldNo, xbInt16 &iFieldLen ) const {
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- iFieldLen = SchemaPtr[iFieldNo].cFieldLen;
- return XB_NO_ERROR;
- } else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! @brief Get the field number for name.
-/*! Returns the field number for the named field.
-
- All field get/put methods require either a field number or field name as
- one of the parameters. Using the methods that take the field numbers will
- yield slightly better performance because the methods that take a name, have
- to look up the number.
-
- \param sFieldName Name of field.
- \param iFieldNo Output field number for the given name.
- \returns Number of field named fldName.
-*/
-
-xbInt16 xbDbf::GetFieldNo( const xbString & sFieldName, xbInt16 &iFieldNo ) const
-{
- int i;
-
- if( sFieldName.Len() > 10 )
- return XB_INVALID_FIELD_NAME;
-
- for( i = 0; i < iNoOfFields; i++ ){
- if( sFieldName == SchemaPtr[i].cFieldName ){
- iFieldNo = i;
- return XB_NO_ERROR;
- }
- }
- return XB_INVALID_FIELD_NAME;
-}
-
-/************************************************************************/
-//! Get field ID number for a given field name.
-/*! Returns the field number for the named field.
-
- \param sFieldName Name of field.
- \returns Number of field or XB_INVALID_FIELD_NAME.
-*/
-
-xbInt16 xbDbf::GetFieldNo( const xbString &sFieldName ) const {
- int i;
-
- if( sFieldName.Len() > 10 )
- return XB_INVALID_FIELD_NAME;
-
- for( i = 0; i < iNoOfFields; i++ ){
- if( sFieldName == SchemaPtr[i].cFieldName )
- return i;
- }
- return XB_INVALID_FIELD_NAME;
-}
-
-/************************************************************************/
-//! Get field type for field number.
-/*!
- \param iFieldNo Field number.
- \param cFieldType Output field type.
- \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::GetFieldType( xbInt16 iFieldNo, char & cFieldType ) const{
-
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- cFieldType = SchemaPtr[iFieldNo].cType;
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! Get field type for field name.
-/*!
- \param sFieldName Field name.
- \param cFieldType Output field type.
- \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::GetFieldType( const xbString &sFieldName, char & cFieldType ) const{
- return( GetFieldType( GetFieldNo( sFieldName ), cFieldType));
-}
-
-/************************************************************************/
-//! @brief Returns the name of the specified field.
-/*! Returns a pointer to the name for the field specified by iFieldNo.
-
- \param iFieldNo Number of field.
- \param sFieldName Output variable containing the field name.
- \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::GetFieldName( xbInt16 iFieldNo, xbString &sFieldName ) const{
- if( iFieldNo >= 0 && iFieldNo < iNoOfFields ){
- sFieldName = SchemaPtr[iFieldNo].cFieldName;
- return XB_NO_ERROR;
- }
- else
- return XB_INVALID_FIELD_NO;
-}
-
-/************************************************************************/
-//! @brief Get xbFloat field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param fFieldValue Output field value.
- \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::GetFloatField( xbInt16 iFieldNo, xbFloat & fFieldValue ) const {
-
- char cFieldType;
- xbInt16 rc = GetFieldType( iFieldNo, cFieldType );
- if( rc < 0 )
- return rc;
-
- if( cFieldType != 'N' && cFieldType != 'F' )
- return XB_INVALID_FIELD_TYPE;
-
- xbString sTemp;
- rc = GetField( iFieldNo, sTemp, 0 );
- if( rc < 0 )
- return rc;
-
- fFieldValue = (xbFloat) atof( sTemp.Str());
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Get xbFloat field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param fFieldValue Output field value.
- \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::GetFloatField( const xbString & sFieldName, xbFloat & fFieldValue ) const {
- return GetFloatField( GetFieldNo(sFieldName ), fFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sFieldValue Output field value.
- \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::GetLogicalField( xbInt16 iFieldNo, xbString &sFieldValue ) const {
-
- char cFieldType;
- xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
- if( iRc < 0 )
- return iRc;
- else if( cFieldType != 'L' )
- return XB_INVALID_FIELD_TYPE;
-
- if(( iRc = GetField( iFieldNo, sFieldValue )) < XB_NO_ERROR )
- return iRc;
- else
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get logical field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param sFieldValue Output field value.
- \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::GetLogicalField( const xbString &sFieldName, xbString &sFieldValue ) const {
- return GetLogicalField( GetFieldNo( sFieldName ), sFieldValue );
-}
-
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param bFieldValue Output field value.
- \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::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue ) const {
- return GetLogicalField( iFieldNo, bFieldValue, 0 );
-}
-
-/************************************************************************/
-//! @brief Get logical field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param bFieldValue Output field value.
- \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::GetLogicalField( xbInt16 iFieldNo, xbBool &bFieldValue, xbInt16 iRecBufSw ) const {
-
- char cFieldType;
- xbInt16 iRc = GetFieldType( iFieldNo, cFieldType );
- if((iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR )
- return iRc;
-
- if( cFieldType != 'L' )
- return XB_INVALID_FIELD_TYPE;
-
- xbString sFieldValue;
- if(( iRc = GetField( iFieldNo, sFieldValue, iRecBufSw )) < XB_NO_ERROR )
- return iRc;
-
- if( sFieldValue == 'T' || sFieldValue == 't' || sFieldValue == 'Y' || sFieldValue == 'y' )
- bFieldValue = xbTrue;
- else
- bFieldValue = xbFalse;
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-//! @brief Get logical field for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param bFieldValue Output field value.
- \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::GetLogicalField( const xbString &sFieldName, xbBool &bFieldValue ) const {
- return GetLogicalField( GetFieldNo( sFieldName ), bFieldValue );
-}
-/************************************************************************/
-//! @brief Get long field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param lFieldValue Output field value.
- \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::GetLongField( xbInt16 iFieldNo, xbInt32 & lFieldValue ) const {
-
- xbInt16 iRc = 0;
- xbInt16 iErrorStop = 0;
- char cFieldType;
- xbString sTemp;
-
- try{
-
- if(( iRc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- iErrorStop = 100;
- throw iRc;
- }
-
- if( cFieldType != 'N' && cFieldType != 'F' && cFieldType != 'M' ){
- iErrorStop = 110;
- iRc = XB_INVALID_FIELD_TYPE;
- throw iRc;
- }
-
- if(( iRc = GetField( iFieldNo, sTemp, 0 )) < 0 ){
- iErrorStop = 120;
- throw iRc;
- }
- sTemp.Trim();
-
- if( !sTemp.ValidNumericValue() ){
- iErrorStop = 130;
- iRc = XB_INVALID_DATA;
- throw iRc;
- }
-
- if( sTemp.Pos( '.' ) > 0){
- iErrorStop = 140;
- iRc = XB_INVALID_DATA;
- throw iRc;
- }
-
- lFieldValue = atol( sTemp.Str());
- }
-
- catch (xbInt16 iRc ){
- xbString sMsg;
- sMsg.Sprintf( "xbDbf::GetLongField() Exception Caught. Error Stop = [%d] rc = [%d] [%s]", iErrorStop, iRc, sTemp.Str() );
- xbase->WriteLogMessage( sMsg.Str() );
- xbase->WriteLogMessage( GetErrorMessage( iRc ));
- }
-
- return XB_NO_ERROR;
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Get memo field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param sMemoValue Output field value.
- \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::GetMemoField( xbInt16 iFieldNo, xbString &sMemoValue ){
- return Memo->GetMemoField( iFieldNo, sMemoValue );
-}
-/************************************************************************/
-//! @brief Get memo field for field name.
-/*!
-
- \param sFieldName Name of field to retrieve.
- \param sMemoValue Output field value.
- \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::GetMemoField( const xbString & sFieldName, xbString & sMemoValue ){
- return Memo->GetMemoField( GetFieldNo( sFieldName ), sMemoValue );
-}
-
-/************************************************************************/
-//! @brief Get the memo field count for this table.
-/*!
- \returns Returns the number of memo fields in the table,
-*/
-xbInt16 xbDbf::GetMemoFieldCnt() const {
- return iMemoFieldCnt;
-}
-/************************************************************************/
-//! @brief Get memo field length for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param ulMemoFieldLen Output memo field value length.
- \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::GetMemoFieldLen( xbInt16 iFieldNo, xbUInt32 & ulMemoFieldLen ){
- return Memo->GetMemoFieldLen( iFieldNo, ulMemoFieldLen );
-}
-/************************************************************************/
-//! @brief Get memo field length for field name.
-/*!
- \param sFieldName Name of field to retrieve.
- \param ulMemoFieldLen Output memo field value length.
- \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::GetMemoFieldLen( const xbString &sFieldName, xbUInt32 &ulMemoFieldLen ){
- return Memo->GetMemoFieldLen( GetFieldNo( sFieldName ), ulMemoFieldLen );
-}
-
-#endif // XB_MEMO_SUPPORT
-
-/************************************************************************/
-//! @brief Get unsigned long field for field number.
-/*!
- \param iFieldNo Number of field to retrieve.
- \param ulFieldValue Output field value.
- \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::GetULongField( xbInt16 iFieldNo, xbUInt32 & ulFieldValue ) const {
-
- xbInt16 rc = 0;
- xbInt16 iErrorStop = 0;
- char cFieldType;
-
- try{
-
- if(( rc = GetFieldType( iFieldNo, cFieldType )) != XB_NO_ERROR ){
- 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;
- throw rc;
- }
- sTemp.Trim();
- if( !sTemp.ValidNumericValue() || ((int) sTemp.Pos( '.' ) > 0)){
- iErrorStop = 130;
- rc = XB_INVALID_DATA;
- throw rc;
- }
- 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;
-}
-
-/************************************************************************/
-//! @brief Get long field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param lFieldValue Output field value.
- \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::GetLongField( const xbString &sFieldName, xbInt32 &lFieldValue ) const {
- return GetLongField( GetFieldNo( sFieldName ), lFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get unsigned long field for field name.
-/*!
- \param sFieldName Number of field to retrieve.
- \param ulFieldValue Output field value.
- \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::GetULongField( const xbString &sFieldName, xbUInt32 &ulFieldValue ) const {
- return GetULongField( GetFieldNo( sFieldName ), ulFieldValue );
-}
-
-/************************************************************************/
-//! @brief Get raw field data for field number.
-/*!
-
- This is a protected method, used by other methods. This method would be
- subject to buffer overflows if made public.
-
- \param iFieldNo Number of field to retrieve.
- \param cBuf Pointer to buffer area provided by calling application program.
- \param ulBufSize Size of data to copy
- \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::GetRawField( xbInt16 iFieldNo, char *cBuf, xbUInt32 ulBufSize, xbInt16 iRecBufSw ) const
-{
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields ) {
- return XB_INVALID_FIELD_NO;
- }
-
- size_t stCopySize;
- if( ulBufSize > (size_t) (SchemaPtr[iFieldNo].cFieldLen ))
- stCopySize = (size_t) (SchemaPtr[iFieldNo].cFieldLen );
- else
- stCopySize = ulBufSize - 1;
-
- if( iRecBufSw )
- memcpy( cBuf, SchemaPtr[iFieldNo].pAddress2, stCopySize );
- else
- memcpy( cBuf, SchemaPtr[iFieldNo].pAddress, stCopySize );
-
- cBuf[stCopySize] = 0x00;
- return XB_NO_ERROR;
-}
-
-
-/************************************************************************/
-//! @brief Put double field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param dFieldValue Field value.
- \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::PutDoubleField( const xbString &sFieldName, xbDouble dFieldValue ){
- return PutDoubleField( GetFieldNo( sFieldName ), dFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put double field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param dFieldValue Field value.
- \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::PutDoubleField( xbInt16 iFieldNo, xbDouble dFieldValue ){
-
- xbInt16 rc;
- xbString sDoubleFmt;
- xbString sDoubleFmt2;
- xbString sDoubleVal;
- xbInt16 iFieldLen;
- xbInt16 iNoOfDecs;
-
- if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
- return rc;
-
- if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
- return rc;
-
- sDoubleFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
- sDoubleFmt2 = "%-";
- sDoubleFmt2 += sDoubleFmt;
- sDoubleVal.Sprintf( sDoubleFmt2.Str(), dFieldValue );
- sDoubleVal.Rtrim();
- return PutField( iFieldNo, sDoubleVal );
-}
-
-/************************************************************************/
-//! @brief Put date field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param dtFieldValue Field value.
- \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::PutDateField(const xbString &sFieldName, const xbDate &dtFieldValue ){
- return PutField( GetFieldNo( sFieldName ), dtFieldValue.Str() );
-}
-
-/************************************************************************/
-//! @brief Put date field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param dtFieldValue Field value.
- \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::PutDateField( xbInt16 iFieldNo, const xbDate &dtFieldValue ){
- return PutField( iFieldNo, dtFieldValue.Str() );
-}
-
-/************************************************************************/
-//! @brief Put field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param sFieldValue Field value.
- \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::PutField(const xbString &sFieldName, const xbString &sFieldValue ) {
- return PutField( GetFieldNo( sFieldName ), sFieldValue );
-}
-/************************************************************************/
-//! @brief Put field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param sFieldValue Field value.
- \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::PutField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
- xbInt16 iLen;
- xbInt16 iDecPos; /* Decimal Position */
- char * startpos;
- char * tp; /* Target Pointer */
-
- if( iFieldNo < 0 || iFieldNo >= iNoOfFields )
- return XB_INVALID_FIELD_NO;
-
- if( SchemaPtr[iFieldNo].cType == 'L' && !sFieldValue.ValidLogicalValue())
- return XB_INVALID_DATA;
-
- else if( SchemaPtr[iFieldNo].cType == 'D' ){
- xbDate d;
- if( !d.DateIsValid( sFieldValue ))
- return XB_INVALID_DATA;
- iLen = 8;
- }
- else
- {
- iLen = (xbInt16) sFieldValue.Len();
- if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N' || SchemaPtr[iFieldNo].cType == 'M' ){
- if( !sFieldValue.ValidNumericValue()) {
- return XB_INVALID_DATA;
- }
- else {
- iDecPos = (xbInt16) sFieldValue.Pos( "." ); // 0 is no decimal
- int mlod; // max no of digits left of decimal point digit count
-
-
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 )
- mlod = SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
- else
- mlod = iLen;
-
- if( iDecPos == 0 ){ // no decimal in incoming data
-
- // check digits to the left of the decimal
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 && iLen > mlod ) /* no decimal in incoming data */
- return XB_INVALID_DATA;
-
- else if( SchemaPtr[iFieldNo].cNoOfDecs == 0 && iLen > SchemaPtr[iFieldNo].cFieldLen )
- return XB_INVALID_DATA;
-
- }
- else // decimal in incoming data
- {
- if( (iDecPos-1) > mlod ) // too many digits to the left of dec in incoming data
- return XB_INVALID_DATA;
-
- // check digits to the right of the decimal
- else if((iLen - iDecPos) > SchemaPtr[iFieldNo].cNoOfDecs )
- return XB_INVALID_DATA;
- }
- }
- }
- }
-
- // do all field edits before this point
- if( iDbfStatus != XB_UPDATED ){
- iDbfStatus = XB_UPDATED;
- memcpy( RecBuf2, RecBuf, uiRecordLen ); // save the original record bufer before making updates
- }
-
- memset( SchemaPtr[iFieldNo].pAddress, 0x20, SchemaPtr[iFieldNo].cFieldLen );
-
- if( iLen > SchemaPtr[iFieldNo].cFieldLen )
- iLen = SchemaPtr[iFieldNo].cFieldLen;
-
- if( SchemaPtr[iFieldNo].cType == 'F' || SchemaPtr[iFieldNo].cType == 'N'
- || SchemaPtr[iFieldNo].cType == 'M') {
-
- xbInt16 iDecPos = (xbInt16) sFieldValue.Pos( "." );
- if( iDecPos == 0 ){
- iLen = (xbInt16) sFieldValue.Len();
- iDecPos = 0;
- }
- else{
- iLen = iDecPos - 1;
- }
-
- if( SchemaPtr[iFieldNo].cNoOfDecs > 0 ){
- tp = SchemaPtr[iFieldNo].pAddress;
- tp += SchemaPtr[iFieldNo].cFieldLen - SchemaPtr[iFieldNo].cNoOfDecs - 1;
- *tp++ = '.';
-
- if( iDecPos == 0 ){
- for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++ )
- *tp++ = '0';
- } else {
- xbInt32 j = iDecPos + 1;
- for( xbInt32 i = 0; i < SchemaPtr[iFieldNo].cNoOfDecs; i++, j++ ){
- if( j <= (xbInt32) sFieldValue.Len())
- *tp++ = sFieldValue[j];
- else
- *tp++ = '0';
- }
- }
- startpos= SchemaPtr[iFieldNo].pAddress +
- SchemaPtr[iFieldNo].cFieldLen -
- SchemaPtr[iFieldNo].cNoOfDecs - iLen - 1;
-
- }
- else
- startpos=SchemaPtr[iFieldNo].pAddress+SchemaPtr[iFieldNo].cFieldLen-iLen;
- }
- else
- startpos = SchemaPtr[iFieldNo].pAddress;
-
- memcpy( startpos, sFieldValue.Str(), (size_t) iLen );
- return 0;
-}
-
-/************************************************************************/
-//! @brief Put float field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param fFieldValue Field value.
- \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::PutFloatField( xbInt16 iFieldNo, xbFloat fFieldValue ){
-
- xbInt16 rc;
- xbString sFloatFmt;
- xbString sFloatFmt2;
- xbString sFloatVal;
- xbInt16 iFieldLen;
- xbInt16 iNoOfDecs;
-
- if(( rc = GetFieldDecimal( iFieldNo, iNoOfDecs )) != XB_NO_ERROR )
- return rc;
-
- if(( rc = GetFieldLen( iFieldNo, iFieldLen )) != XB_NO_ERROR )
- return rc;
-
- sFloatFmt.Sprintf( "%d.%df", iFieldLen, iNoOfDecs );
- sFloatFmt2 = "%-";
- sFloatFmt2 += sFloatFmt;
- sFloatVal.Sprintf( sFloatFmt2.Str(), fFieldValue );
- sFloatVal.Rtrim();
- return PutField( iFieldNo, sFloatVal );
-}
-
-/************************************************************************/
-//! @brief Put float field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param fFieldValue Field value.
- \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::PutFloatField( const xbString &sFieldName, xbFloat fFieldValue ){
- return PutFloatField( GetFieldNo( sFieldName ), fFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param sFieldValue Field value.
- \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::PutLogicalField( xbInt16 iFieldNo, const xbString &sFieldValue ) {
- return PutField( iFieldNo, sFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param sFieldValue Field value.
- \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::PutLogicalField( const xbString &sFieldName, const xbString &sFieldValue ) {
- return PutField( GetFieldNo( sFieldName ), sFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param bFieldValue Field value.
- \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::PutLogicalField( xbInt16 iFieldNo, xbBool bFieldValue ) {
-
- if( bFieldValue )
- return PutField( iFieldNo, "T" );
- else
- return PutField( iFieldNo, "F" );
-}
-
-/************************************************************************/
-//! @brief Put logical field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param bFieldValue Field value.
- \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::PutLogicalField( const xbString &sFieldName, xbBool bFieldValue ) {
- return PutLogicalField( GetFieldNo( sFieldName ), bFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put long field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param lFieldValue Field value.
- \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::PutLongField( xbInt16 iFieldNo, xbInt32 lFieldValue ) {
- xbString sLong;
- sLong.Sprintf( "%ld", (xbInt32) lFieldValue );
- return PutField( iFieldNo, sLong.Str() );
-}
-
-/************************************************************************/
-//! @brief Put long field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param lFieldValue Field value.
- \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::PutLongField( const xbString &sFieldName, xbInt32 lFieldValue ) {
- return PutLongField( GetFieldNo( sFieldName ), lFieldValue );
-}
-
-/************************************************************************/
-//! @brief Put unsigned long field for field number.
-/*!
- \param iFieldNo Number of field to update.
- \param ulFieldValue Field value.
- \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::PutULongField( xbInt16 iFieldNo, xbUInt32 ulFieldValue ) {
- xbString sLong;
- sLong.Sprintf( "%lu", (xbInt32) ulFieldValue );
- return PutField( iFieldNo, sLong.Str() );
-}
-
-/************************************************************************/
-//! @brief Put unsigned long field for field name.
-/*!
- \param sFieldName Name of field to update.
- \param ulFieldValue Field value.
- \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::PutULongField( const xbString &sFieldName, xbUInt32 ulFieldValue ) {
- return PutLongField( GetFieldNo( sFieldName ), (xbInt32) ulFieldValue );
-}
-
-/************************************************************************/
-#ifdef XB_MEMO_SUPPORT
-//! @brief Check if memo field exists for field name.
-/*!
- \param sFieldName Name of field to check.
- \returns xbTrue Field exists.<br> xbFale Field does not exist.
-*/
-
-xbBool xbDbf::MemoFieldExists( const xbString &sFieldName ) const{
- return MemoFieldExists( GetFieldNo( sFieldName ));
-}
-
-/************************************************************************/
-//! @brief Check if memo field exists for field number.
-/*!
- \param iFieldNo Number of field to check.
- \returns xbTrue Field exists.<br> xbFale Field does not exist.
-*/
-
-xbBool xbDbf::MemoFieldExists( xbInt16 iFieldNo ) const{
-
- xbInt32 lFld = 0L;
- GetLongField( iFieldNo, lFld );
- if( lFld == 0L )
- return xbFalse;
- else
- return xbTrue;
-}
-
-#endif
-
-} /* namespace */
-