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. |