docs: public FieldList moveThruMultipleTables(int iRelPosition) throws DBException
      { // ****ONLY TESTED FOR iRelPosition = +1****
          boolean bIsOpen = m_bIsOpen;
          if (!m_bIsOpen)
              this.open();
          BaseTable table = null;
          BaseTable tableNext = null;
          if (((m_iRecordStatus & DBConstants.RECORD_NEXT_PENDING) == DBConstants.RECORD_NEXT_PENDING)
              && (iRelPosition == DBConstants.NEXT_RECORD))
          {
              m_iRecordStatus = DBConstants.RECORD_NORMAL;
              tableNext = this.getCurrentTable();   // Special case - last call was hasNext()
          }
          else if (((m_iRecordStatus & DBConstants.RECORD_PREVIOUS_PENDING) == DBConstants.RECORD_PREVIOUS_PENDING)
              && (iRelPosition == DBConstants.PREVIOUS_RECORD))
          {
              m_iRecordStatus = DBConstants.RECORD_NORMAL;
              tableNext = this.getCurrentTable();   // Special case - last call was hasNext()
          }
          else
          { // First, make sure all the tables are opened and positioned on valid records.
              if ((!bIsOpen) || (iRelPosition == DBConstants.FIRST_RECORD))   // Need to use a different variable
              {   // If this is the first time thru, open and move to the first record
                  Iterator<BaseTable> iterator = this.getTables();
                  while (iterator.hasNext())
                  {
                      table = iterator.next();
                      table.close();
                      table.getRecord().setKeyArea(this.getRecord().getDefaultOrder());
                      if (table.hasNext())
                      {
                          if (table != this.getCurrentTable())
                              table.move(+1);   // Move to first record
                          else
                              iRelPosition = +1;
                      }
                  }
                  m_bIsOpen = true; // Yes this file is now open.
              }
              if (!this.getCurrentTable().isEOF())
                  this.getCurrentTable().move(iRelPosition);  // First, move the current table in the correct direction.
          // Now, compare the records to find the lowest key
              Iterator<BaseTable> iterator = this.getTables();
              while (iterator.hasNext())
              {
                  table = iterator.next();
                  if (!table.isEOF())
                  {
                      if (tableNext == null)
                          tableNext = table;      // None here yet, this is the lowest
                      else
                      { // Now compare and get the lowest
                          int iCompareValue = 0;
                          int iKeyFields = table.getRecord().getKeyArea().getKeyFields() + DBConstants.MAIN_KEY_FIELD;
                          for (int iKeyFieldSeq = DBConstants.MAIN_KEY_FIELD; iKeyFieldSeq < iKeyFields; iKeyFieldSeq++)
                          {
                              BaseField fldCompare = table.getRecord().getKeyArea().getKeyField(iKeyFieldSeq).getField(DBConstants.FILE_KEY_AREA);
                              BaseField fldNext = tableNext.getRecord().getKeyArea().getKeyField(iKeyFieldSeq).getField(DBConstants.FILE_KEY_AREA);
                              iCompareValue = fldCompare.compareTo(fldNext);
                              if (this.getRecord().getKeyArea() != null)
                                  if (this.getRecord().getKeyArea().getKeyField(iKeyFieldSeq) != null)
                                      if (this.getRecord().getKeyArea().getKeyOrder(iKeyFieldSeq) == DBConstants.DESCENDING)
                                  iCompareValue = -iCompareValue;
                              if (iCompareValue != 0)
                                  break;
                          }
                          if (iCompareValue < 0)
                              tableNext = table;      // This is the lowest so far.
                      }
                  }
              }
          }
          if (tableNext == null)
          {
              Iterator<BaseTable> iterator = this.getTables();
              while (iterator.hasNext())
              {   // If this table is suppose to be PAST EOF, make sure all the records are too.
                  table = iterator.next();
                  if (iRelPosition == DBConstants.NEXT_RECORD)
                      if (table.isEOF())
                          table.move(+1);
              }
              return null;
          }
          this.setCurrentTable(tableNext);    // Never allow currentTable to be null.
          Record record = tableNext.getRecord();
          for (int iFieldSeq = DBConstants.MAIN_FIELD; iFieldSeq < record.getFieldCount(); ++iFieldSeq)
          {
  //?         if (bDisplayOption)
              record.getField(iFieldSeq).displayField();      // Display this field
          }
          return record;
      }