docs: public void set(Rec fieldList) throws DBException
      {
          Record record = (Record)fieldList;
          int iErrorCode = DBConstants.NORMAL_RETURN;
          if ((record.getOpenMode() & DBConstants.OPEN_READ_ONLY) != 0)
              throw new DatabaseException(DBConstants.ERROR_READ_ONLY);
          if ((record.getOpenMode() & DBConstants.OPEN_APPEND_ONLY) != 0)
              throw new DatabaseException(DBConstants.ERROR_APPEND_ONLY);
          try   {
              if (record.getEditMode() != Constants.EDIT_IN_PROGRESS)
                  throw new DatabaseException(DBConstants.RECORD_NOT_LOCKED);
              iErrorCode = record.handleRecordChange(DBConstants.UPDATE_TYPE);
              if (iErrorCode != DBConstants.NORMAL_RETURN)
                  throw new DatabaseException(iErrorCode);
              this.fieldsToData(record);
              this.doSet(record);
              m_iRecordStatus |= DBConstants.RECORD_INVALID;
          } catch (DBException ex)    {
              iErrorCode = this.getRecord().handleErrorReturn(DBConstants.AFTER_UPDATE_TYPE, ex.getErrorCode()); // Give the listeners a chance to fix the error.
              // Note: I DO NOT do: record.setEditMode(Constants.EDIT_NONE);  to give the client a chance to recover and rewrite this record.
              if ((iErrorCode != DBConstants.NORMAL_RETURN) && (iErrorCode != DBConstants.RECORD_CHANGED))
                  throw ex;
              // If the error was fixed, continue
          }
          record.setEditMode(Constants.EDIT_NONE);    // Unknown status after an update
          iErrorCode = record.handleRecordChange(DBConstants.AFTER_UPDATE_TYPE);  // Remember, these listeners may refresh the record
          if (iErrorCode != DBConstants.NORMAL_RETURN)
              throw new DatabaseException(iErrorCode);
          m_objectID = null;
          m_dataSource = null;
      }