docs: public int edit() throws DBException
      {
      	int iErrorCode = DBConstants.NORMAL_RETURN;
          if ((this.getRecord().getOpenMode() & DBConstants.OPEN_READ_ONLY) != 0)
              return DBConstants.NORMAL_RETURN;        // I Don't throw any exception unless they try to Update!
          try   {
              if (this.getRecord().getEditMode() == Constants.EDIT_IN_PROGRESS)
                  return DBConstants.NORMAL_RETURN;        // Okay, Already locked
              if (this.getRecord().getEditMode() != Constants.EDIT_CURRENT)
                  throw new DatabaseException(DBConstants.INVALID_RECORD);
              iErrorCode = this.getRecord().handleRecordChange(DBConstants.LOCK_TYPE);
              if (iErrorCode != DBConstants.NORMAL_RETURN)
                  throw new DatabaseException(iErrorCode);
              iErrorCode = this.doEdit();
              if ((iErrorCode == DBConstants.RECORD_CHANGED) || ((this.getRecord().getOpenMode() & DBConstants.OPEN_WAIT_FOR_LOCK_STRATEGY) == DBConstants.OPEN_WAIT_FOR_LOCK_STRATEGY))
              {   // If record has changed, or I using the wait strategy (which means I don't know if the record was updated between read and edit)
              	if ((this.getRecord().getOpenMode() & DBConstants.OPEN_ERROR_ON_DIRTY_LOCK_TYPE) == 0)
              	{	// Typically you don't want to return an error, you want to refresh the data (unless this is slave code)
              		iErrorCode = this.getRecord().refreshToCurrent(DBConstants.AFTER_UPDATE_TYPE, false);
              	}
              }
              if (iErrorCode == DBConstants.NORMAL_RETURN)
                  this.getRecord().setEditMode(Constants.EDIT_IN_PROGRESS);
          } catch (DBException ex)    {
              throw ex;
          }
          return iErrorCode;
      }