docs: public void free()
      {
          this.handleRecordChange(DBConstants.BEFORE_FREE_TYPE);
          
          if (m_depScreens != null)
          {
              while (m_depScreens.size() > 0)
              {
                  ComponentParent screen = m_depScreens.elementAt(0);
                  screen = screen.getRootScreen();
                  screen.free();
              }
              m_depScreens.removeAllElements();
              m_depScreens = null;
          }
  
          m_dbEditMode |= DBConstants.EDIT_CLOSE_IN_FREE;   // This is a cludge... signals tables that this is the last close()!
          this.close();
  
          if (m_recordOwner != null)
              ((RecordOwner)m_recordOwner).removeRecord(this); // Take this query off the document's list
          m_recordOwner = null;
  
          while (m_listener != null)
          {
              this.removeListener(m_listener, true);    // free all the behaviors
          }
          m_dbEditMode &= (~DBConstants.EDIT_CLOSE_IN_FREE);
  
          super.free(); // Free fields, free table.
      }