summaryrefslogtreecommitdiff
path: root/forms/source/component/Pattern.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'forms/source/component/Pattern.cxx')
-rw-r--r--forms/source/component/Pattern.cxx42
1 files changed, 34 insertions, 8 deletions
diff --git a/forms/source/component/Pattern.cxx b/forms/source/component/Pattern.cxx
index 05276fb54fb5..64f5ea0e5e75 100644
--- a/forms/source/component/Pattern.cxx
+++ b/forms/source/component/Pattern.cxx
@@ -167,13 +167,21 @@ void OPatternModel::describeFixedProperties( Sequence< Property >& _rProps ) con
//------------------------------------------------------------------------------
sal_Bool OPatternModel::commitControlValueToDbColumn( bool /*_bPostReset*/ )
{
- ::rtl::OUString sNewValue;
- m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) >>= sNewValue;
+ Any aNewValue( m_xAggregateFastSet->getFastPropertyValue( getValuePropertyAggHandle() ) );
- if ( sNewValue != m_aSaveValue )
+ if ( aNewValue != m_aLastKnownValue )
{
- if ( !sNewValue.getLength() && !isRequired() && m_bEmptyIsNull )
+ ::rtl::OUString sNewValue;
+ aNewValue >>= sNewValue;
+
+ if ( !aNewValue.hasValue()
+ || ( !sNewValue.getLength() // an empty string
+ && m_bEmptyIsNull // which should be interpreted as NULL
+ )
+ )
+ {
m_xColumnUpdate->updateNull();
+ }
else
{
OSL_ENSURE( m_pFormattedValue.get(), "OPatternModel::commitControlValueToDbColumn: no value helper!" );
@@ -183,8 +191,10 @@ sal_Bool OPatternModel::commitControlValueToDbColumn( bool /*_bPostReset*/ )
if ( !m_pFormattedValue->setFormattedValue( sNewValue ) )
return sal_False;
}
- m_aSaveValue = sNewValue;
+
+ m_aLastKnownValue = aNewValue;
}
+
return sal_True;
}
@@ -212,11 +222,27 @@ void OPatternModel::onDisconnectedDbColumn()
Any OPatternModel::translateDbColumnToControlValue()
{
OSL_PRECOND( m_pFormattedValue.get(), "OPatternModel::translateDbColumnToControlValue: no value helper!" );
+
if ( m_pFormattedValue.get() )
- m_aSaveValue = m_pFormattedValue->getFormattedValue();
+ {
+ ::rtl::OUString sValue( m_pFormattedValue->getFormattedValue() );
+ if ( !sValue.getLength()
+ && m_pFormattedValue->getColumn().is()
+ && m_pFormattedValue->getColumn()->wasNull()
+ )
+ {
+ m_aLastKnownValue.clear();
+ }
+ else
+ {
+ m_aLastKnownValue <<= sValue;
+ }
+ }
else
- m_aSaveValue = ::rtl::OUString();
- return makeAny( m_aSaveValue );
+ m_aLastKnownValue.clear();
+
+ return m_aLastKnownValue.hasValue() ? m_aLastKnownValue : makeAny( ::rtl::OUString() );
+ // (m_aLastKnownValue is alllowed to be VOID, the control value isn't)
}
// XReset