FUNC IndexRecNo LPARA ; TableToCheck LOCAL ; IndexExp, ; IndRecCount, ; CurrIndexValue, ; OldRecNo, ; OldDele, ; OldLock, ; OldSele OldSele = SELECT() IF PCount() = 1 SELE (TableToCheck) ENDIF IndRecCount = 1 IndexExp = KEY() IF IsBlank(IndexExp) * *** no index (order) is set IF BETWEEN(RECNO(), 1, RECCOUNT()) .OR. RECNO() < 0 IndRecCount = RECNO() ENDIF ELSE OldRecNo = RECNO() CurrIndexValue = EVAL(KEY()) OldLock = SET("lock") OldDele = SET('dele') SET DELE ON SET LOCK OFF COUNT ; FOR &IndexExp <= CurrIndexValue ; TO IndRecCount SET DELE &OldDele SET LOCK &OldLock IF BETWEEN(OldRecNo, 1, RECCOUNT()) .OR. OldRecNo < 0 GO OldRecNo ELSE GO TOP ENDIF IF TYPE("IndRecCount") <> "N" .OR. IndRecCount = 0 IndRecCount = 1 ENDIF ENDIF SELECT(OldSele) RETURN(IndRecCount) ENDFUNChope this helps you