>>* Assume your cursor with random values has an alias RandomVals >>LOCAL ; >> lnMinVal ; >> , lnMaxVal ; >> , lnIx >> >>* Get lowest and highest values: >>* Option 1: index RandomVals: >>SELECT RandomVals >>INDEX ON fObjectNo TAG fObjectNo >> >>GO TOP >>m.lnMinVal = RandomVals.fObjectNo > > >>GO BOTTOM >>m.lnMaxVal = RandomVals.fObjectNo >> >>* Option 2: don't want to index RandomVals: >>*!* CALCULATE ; >>*!* MIN( fObjectNo ) ; >>*!* , MAX( fObjectNo ) ; >>*!* TO ; >>*!* m.lnMinVal ; >>*!* , m.lnMaxVal ; >>*!* IN RandomVals >> >>* Create another cursor with all possible values, both present and missing: >>CREATE CURSOR AllVals ( iVal I ) >> >>* Populate the cursor with all possible values between m.lnMinVal and m.lnMaxVal >>FOR m.lnIx = m.lnMinVal TO m.lnMaxVal STEP 1 >> INSERT INTO AllVals ( iVal ) VALUES ( m.lnIx ) >> >>ENDFOR >> >>* Optional - index AllVals to help speed up the final SELECT - SQL: >>SELECT AllVals >>INDEX ON iVal TAG iVal >> >>* Get missing values: >>SELECT ; >> iVal ; >> FROM AllVals ; >> WHERE iVal NOT IN ; >> ( SELECT fObjectNo FROM RandomVals ) ; >> INTO CURSOR MissingVals ; >> ORDER BY iVal >> >>* Cleanup: >>USE IN SELECT( "AllVals" ) >>