User: hr Date: 2007-09-26 14:28:37+0000 Modified: dba/connectivity/source/drivers/dbase/DTable.cxx
Log: INTEGRATION: CWS dba24a (1.102.24); FILE MERGED 2007/08/30 12:16:08 oj 1.102.24.2: #i47315# check real precision 2007/08/02 07:00:12 oj 1.102.24.1: #i68420# set size to zero File Changes: Directory: /dba/connectivity/source/drivers/dbase/ ================================================== File [changed]: DTable.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/dbase/DTable.cxx?r1=1.102&r2=1.103 Delta lines: +16 -8 -------------------- --- DTable.cxx 2007-06-05 14:21:31+0000 1.102 +++ DTable.cxx 2007-09-26 14:28:34+0000 1.103 @@ -219,7 +219,7 @@ m_aScales.clear(); // Anzahl Felder: - sal_Int32 nFieldCount = (m_aHeader.db_kopf - 1) / 32 - 1; + const sal_Int32 nFieldCount = (m_aHeader.db_kopf - 1) / 32 - 1; OSL_ENSURE(nFieldCount,"No columns in table!"); m_aColumns->reserve(nFieldCount); @@ -230,15 +230,15 @@ String aStrFieldName; aStrFieldName.AssignAscii("Column"); ::rtl::OUString aTypeName; - static const ::rtl::OUString sVARCHAR = ::rtl::OUString::createFromAscii("VARCHAR"); - sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers(); + static const ::rtl::OUString sVARCHAR(RTL_CONSTASCII_USTRINGPARAM("VARCHAR")); + const sal_Bool bCase = getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers(); for (sal_Int32 i = 0; i < nFieldCount; i++) { DBFColumn aDBFColumn; m_pFileStream->Read((char*)&aDBFColumn, sizeof(aDBFColumn)); - String aColumnName((const char *)aDBFColumn.db_fnm,getConnection()->getTextEncoding()); + const String aColumnName((const char *)aDBFColumn.db_fnm,getConnection()->getTextEncoding()); sal_Int32 nPrecision = aDBFColumn.db_flng; sal_Int32 eType; @@ -348,6 +348,7 @@ m_aHeader.db_anz = 0; m_aHeader.db_kopf = 0; m_aHeader.db_slng = 0; + m_aMemoHeader.db_size = 0; String sFileName(getEntry(m_pConnection,m_Name)); @@ -1499,6 +1500,7 @@ } } + const sal_Int32 nRealPrecision = nLen; switch (nType) { case DataType::DATE: nLen = 8; break; @@ -1601,8 +1603,14 @@ // sein koennte und muesste ByteString aDefaultValue = ::rtl::math::doubleToString( n, rtl_math_StringFormat_F, nScale, '.', NULL, 0); + sal_Int32 nRealLen = aDefaultValue.Len() - nScale; + if ( nScale ) // for '.' + --nRealLen; + if ( n < 0.0 ) // for the sign '-' + --nRealLen; + BOOL bValidLength = sal_False; - if (aDefaultValue.Len() <= nLen) + if ( nRealLen <= (nRealPrecision - nScale) ) { strncpy(pData,aDefaultValue.GetBuffer(),nLen); // write the resulting double back @@ -1616,10 +1624,10 @@ xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= aColName; String sError; - sError.AppendAscii("The "); + sError.AppendAscii("The \""); sError += aColName.getStr(); - sError.AppendAscii(" column has been defined as a \"Decimal\" type, the max. length is "); - sError += String::CreateFromInt32(nLen); + sError.AppendAscii("\" column has been defined as a \"Decimal\" type, the max. length is "); + sError += String::CreateFromInt32(nRealPrecision); sError.AppendAscii(" characters (with "); sError += String::CreateFromInt32(nScale); sError.AppendAscii(" decimal places).\n\nThe specified value is longer than the number of digits allowed."); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
