FIX: Dirty Flag Not Cleared During Edit() or Update()Last reviewed: September 19, 1997Article ID: Q159956 |
The information in this article applies to:
SYMPTOMSWhen you use the Microsoft Foundation Classes (MFC) ODBC to update a record that has not been modified since the last call to CRecordset::Update(), the fields within the record show up as dirty.
CAUSENeither the CRecordset::Edit() function nor the CRecordset::Update() function clear the dirty flag.
RESOLUTIONOverride CRecordset::Update() and clear the dirty flags for your recordset after calling the base class CRecordset::Update().
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been fixed in Visual C++ version 5.0.
MORE INFORMATIONThe following sample code displays the problem. The second sample shows how to implement the workaround:
Sample Code 1
// m_pSet is a pointer to a CRecordset derived class, called CMySet,
// that has a text member variable called m_Name.
m_pSet->Edit();
m_pSet->m_Name = "NewName";
m_pSet->Update();
m_pSet->Edit();
if( m_pSet->IsFieldDirty( &(m_pSet->m_Name) ) )
TRACE( "Name is dirty\n" );
// The next call will update the record, even though the data has
// not changed.
m_pSet->Update();
Sample Code 2
// Override CRecordset::Update and clear the dirty flags:
BOOL CMySet::Update()
{
BOOL bReturn = CRecordset::Update();
if (m_bCheckCacheForDirtyFields &&
!(m_dwOptions & optimizeBulkAdd))
{
SetFieldDirty(NULL, FALSE);
}
return bReturn;
}
Keywords : MfcDatabase vcbuglist420 vcfixlist500 kbprg kbbuglist kbfixlist Technology : kbMfc Version : 4.2 4.2b Platform : NT WINDOWS Issue type : kbbug Solution Type : kbfix |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |