docs: public int doRecordChange(FieldInfo field, int iChangeType, boolean bDisplayOption)
      { // Read a valid record
          double dMainValue, dCurrentValue;
          int iErrorCode = super.doRecordChange(field, iChangeType, bDisplayOption);   // Initialize the record
          if (iErrorCode != DBConstants.NORMAL_RETURN)
              return iErrorCode;
          switch (iChangeType)
          {
              case DBConstants.CONTROL_BREAK_TYPE:
                  if (!m_bResetOnBreak)
                      break;
                  if (m_fldBreak != null)
                  {
                      if (m_objLastBreakValue != FIRST_TIME)
                          if ((m_fldBreak.getData() == m_objLastBreakValue)
                              || ((m_fldBreak.getData() != null) && (m_fldBreak.getData().equals(m_objLastBreakValue))))
                                  break;  // Break value is the same, don't break.
                      m_objLastBreakValue = m_fldBreak.getData();
                  }
                  iErrorCode = this.resetCount(); // Set in main file's field
                  break;
              case DBConstants.AFTER_REQUERY_TYPE:
                  m_bEOFHit = false;
                  m_dTotalToVerify = 0;
                  if ((m_bRecountOnSelect) || (m_bResetOnBreak))
                  {
                      boolean bResetCount = true;
                      if (m_bVerifyOnEOF)    // Only have to reset field on requery if I don't verify on eof
                          if (m_fldMain != null)
                              if (m_fldMain.getRecord() != null) 
                                  if ((m_fldMain.getRecord().getEditMode() == DBConstants.EDIT_CURRENT) || (m_fldMain.getRecord().getEditMode() == DBConstants.EDIT_IN_PROGRESS))
                                  bResetCount = false;    // Don't reset a field on a current record (since that would cause the record to be re-written for no reason AND may trigger unnecessary changes)
                      if (bResetCount)
                          iErrorCode = this.resetCount(); // Set in main file's field
                      if (m_fldBreak != null)
                          m_objLastBreakValue = FIRST_TIME;   // Reset to first time
                  }
                  break;
              case DBConstants.SELECT_EOF_TYPE:
                  m_bEOFHit = true;
                  if (m_bVerifyOnEOF)
                      iErrorCode = this.setCount(m_dTotalToVerify, false, DBConstants.INIT_MOVE);   // Set in main file's field
                  break;
              case DBConstants.MOVE_NEXT_TYPE:
                  dMainValue = this.getCount();    // Set in main file's field
                  dCurrentValue = this.getFieldValue();            // New(current) value
                  dMainValue += dCurrentValue;
                  m_dTotalToVerify += dCurrentValue;
                  if (m_fldBreak != null)
                      if (m_objLastBreakValue == FIRST_TIME)
                          m_objLastBreakValue = m_fldBreak.getData(); // First value = first value to compare
                  if ((m_bVerifyOnEOF) && (!m_bResetOnBreak))   // Don't total until the end unless this is a break counter
                      break;  // Don't update the total until I hit EOF
                  iErrorCode = this.setCount(dMainValue, true, DBConstants.INIT_MOVE); // Set in main file's field
                  break;
              case DBConstants.AFTER_REFRESH_TYPE:    // New blank record created
                  m_dOldValue = this.getFieldValue();      // Old value (in case of change)
                  break;
              case DBConstants.AFTER_ADD_TYPE:
                  dMainValue = this.getCount();       // Set in main file's field
                  dCurrentValue = this.getFieldValue(); // New(current) value
                  m_dOldValue = dCurrentValue;        // In case record is set to refresh on write (so an update is coming)
                  dMainValue += dCurrentValue;
                  m_dTotalToVerify += dCurrentValue;
                  if ((m_bVerifyOnEOF == false) || (m_bEOFHit))
                      iErrorCode = this.setCount(dMainValue, false, DBConstants.SCREEN_MOVE); // Set in main file's field
                  break;
              case DBConstants.AFTER_UPDATE_TYPE:
                  dMainValue = this.getCount();    // Set in main file's field
                  dCurrentValue = this.getFieldValue();            // New(current) value
                  dMainValue += dCurrentValue - m_dOldValue;         // New(current) value
                  m_dTotalToVerify += dCurrentValue - m_dOldValue;       // New(current) value
                  if ((m_bVerifyOnEOF == false) || (m_bEOFHit))
                      iErrorCode = this.setCount(dMainValue, false, DBConstants.SCREEN_MOVE); // Set in main file's field
                  break;
              case DBConstants.AFTER_DELETE_TYPE:
                  dMainValue = this.getCount();    // Set in main file's field
                  dMainValue -= m_dOldValue;            // New(current) value
                  m_dTotalToVerify -= m_dOldValue;
                  if ((m_bVerifyOnEOF == false) || (m_bEOFHit))
                      iErrorCode = this.setCount(dMainValue, false, DBConstants.SCREEN_MOVE); // Set in main file's field
                  break;
          }
          return iErrorCode;
      }