LPARAMETERS l_cDataDir LOCAL ARRAY latables[1] LOCAL ARRAY latags[1] LOCAL l_cCurrDir, ntables, l_nStartSeconds, nstart, ntag, lok, nreccount LOCAL nrecs, coldindexexp, nend, tot, l_nEndSeconds, ii, xx ON ERROR errproc() *SET STEP ON #DEFINE CR CHR(13)+CHR(10) lcLF = ALLTRIM(PROPER(ADDBS(SYS(5) + SYS(2003))+"tablelog.txt")) lnLFH=FOPEN(lcLF,0) IF lnLFH > 0 llSuccess = FCLOSE(lnLFH) ERASE (lcLF) ENDIF STRTOFILE(CR+CR+TRANSFORM(DATETIME())+CR+CR,lcLF,1) CLOSE DATABASES all CLEAR SET EXCLUSIVE OFF SET DELETED OFF l_cCurrDir = SYS(5) + SYS(2003) IF !EMPTY(l_cDataDir) CD (l_cDataDir) ELSE CD ? ENDIF ntables=ADIR(latables,'*.DBF') l_nStartSeconds = SECONDS() STRTOFILE("Data folder scanned - " + SYS(5) + SYS(2003) + CR + CR,lcLF,1) FOR ii=1 TO ntables nstart=SECONDS() USE latables[ii,1] SHARED IN 1 STRTOFILE(latables[ii,1]+": ",lcLF,1) ntag=ATAGINFO(latags) FOR xx=1 TO ntag lok=.T. SET ORDER TO (latags[xx,1]) ASCENDING WAIT WINDOW "Scanning tag - " + ; latags[xx,1] + ; " in " + ; latables[ii,1] NOWAIT NOCLEAR nreccount=RECCOUNT() nrecs=0 SCAN && do the fastest check first nrecs=nrecs+1 ENDSCAN IF nrecs#nreccount AND EMPTY(latags[xx,4]) STRTOFILE("Record count failed for tag "+ latags[xx,1]+ ; " in table "+latables[ii,1]+CR,lcLF,1) lok=.F. EXIT ENDIF ENDFOR IF lok FOR xx=1 TO ntag lok=.T. SET ORDER TO (latags[xx,1]) ASCENDING coldindexexp=NULL SCAN IF EVALUATE(latags[xx,3]) < coldindexexp STRTOFILE("ascending failed for tag "+ latags[xx,1]+; " in table "+latables[ii,1]+CR,lcLF,1) lok=.F. EXIT ENDIF coldindexexp=EVALUATE(latags[xx,3]) ENDSCAN IF lok=.f. EXIT ENDIF ENDFOR ENDIF nend=SECONDS() tot=nend-nstart STRTOFILE([Total time for this table: ]+TRANSFORM(tot)+CR,lcLF,1) ENDFOR l_nEndSeconds = SECONDS() =STRTOFILE(CR + CR + "Total Scan time - " + ; TRANSFORM(l_nEndSeconds - l_nStartSeconds) +; " seconds" + CR,lcLF,1) CLOSE DATABASES all WAIT CLEAR CD (l_cCurrDir) MODIFY FILE (lcLF) FUNCTION errproc #DEFINE CR CHR(13)+CHR(10) =STRTOFILE(CR + "ERROR: "+MESSAGE() + CR,lcLF,1)>Hi,