FIX: Dirty Flag Not Cleared During Edit() or Update() (159956)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++, 32-bit Enterprise Edition 4.2
    • Microsoft Visual C++, 32-bit Professional Edition 4.2
    • Microsoft Visual C++, 32-bit Enterprise Edition 4.2b
    • Microsoft Visual C++, 32-bit Professional Edition 4.2b

This article was previously published under Q159956

SYMPTOMS

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

CAUSE

Neither the CRecordset::Edit() function nor the CRecordset::Update() function clear the dirty flag.

RESOLUTION

Override CRecordset::Update() and clear the dirty flags for your recordset after calling the base class CRecordset::Update().

STATUS

Microsoft 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 INFORMATION

The 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;
   }
				

Modification Type:MajorLast Reviewed:12/1/2003
Keywords:kbbug kbDatabase kbfix kbVC500fix KB159956