CLEAR SET TALK OFF SET SAFETY OFF CREATE TABLE mytable (nvalue n(5,0), cvalue c(10)) SELE mytable FOR i = 1 TO 50000 APPEND BLANK REPLACE mytable.nvalue WITH i ENDFOR SELE mytable GO TOP mval = 0 ? "FOR ENDFOR" time1 = SECONDS() FOR i = 1 TO RECCOUNT() * WAIT WINDOW "Processing "+ALLTRIM(STR(mval))+" of 50,000" NOWAIT DO countit WITH mval REPLACE mytable.nvalue WITH nvalue + 1 IF EMPTY(mytable.cvalue) REPLACE mytable.cvalue WITH "TEST1" ELSE REPLACE mytable.cvalue WITH "TEST2" ENDIF IF !CHECKIT(RECNO()) EXIT ENDIF IF mval > 999998 EXIT ENDIF SKIP ENDFOR ? SECONDS() - time1 SELE mytable GO TOP mval = 0 ? "DO WHILE LOOP" time1 = SECONDS() lContinue = .T. DO WHILE lContinue * WAIT WINDOW "Processing "+ALLTRIM(STR(mval))+" of 50,000" NOWAIT DO countit WITH mval REPLACE mytable.nvalue WITH nvalue+1 IF EMPTY(mytable.cvalue) REPLACE mytable.cvalue WITH "TEST1" ELSE REPLACE mytable.cvalue WITH "TEST2" ENDIF lContinue = CHECKIT(RECNO()) AND mval =< 999998 AND RECNO() < RECCOUNT() SKIP ENDDO ? SECONDS() - time1 FUNCTION checkit LPARAMETERS recordno IF RECNO() <> recordno GOTO recordno ENDIF IF EMPTY(mytable.nvalue) ? RECNO() ENDIF RETURN .T. PROCEDURE countit LPARAMETERS newval newval = newval + 1 RETURN newval>Changed it slightly and still the results are not drastically different in VFP8:
>CLEAR >SET TALK OFF >SET SAFETY OFF > > >CREATE TABLE mytable (nvalue n(5,0), cvalue c(10)) >SELE mytable >FOR i = 1 TO 50000 > APPEND BLANK > REPLACE mytable.nvalue WITH i >ENDFOR > >SELE mytable >GO TOP >mval = 0 >? "DO WHILE LOOP" >? "START1:" >time1 = DATETIME() >?? time1 >DO WHILE !EOF() > WAIT WINDOW "Processing "+ALLTRIM(STR(mval))+" of 50,000" NOWAIT > DO countit WITH mval > REPLACE mytable.nvalue WITH nvalue+1 > IF EMPTY(mytable.cvalue) > REPLACE mytable.cvalue WITH "TEST1" > ELSE > REPLACE mytable.cvalue WITH "TEST2" > ENDIF > IF !CHECKIT(RECNO()) > EXIT > ENDIF > IF mval > 999998 > EXIT > ENDIF > SKIP >ENDDO >time2 = DATETIME() >timegone = timepassed(time1,time2) >? "FINISH:" >?? time2 >? "TIME ELAPSED: " >?? timegone > >? >? >? > >SELE mytable >GO TOP >mval = 0 >? "FOR ENDFOR" >? "START2:" >time1 = DATETIME() >?? time1 >FOR i = 1 TO RECCOUNT() > WAIT WINDOW "Processing "+ALLTRIM(STR(mval))+" of 50,000" NOWAIT > DO countit WITH mval > REPLACE mytable.nvalue WITH nvalue + 1 > IF EMPTY(mytable.cvalue) > REPLACE mytable.cvalue WITH "TEST1" > ELSE > REPLACE mytable.cvalue WITH "TEST2" > ENDIF > IF !CHECKIT(RECNO()) > EXIT > ENDIF > IF mval > 999998 > EXIT > ENDIF > SKIP >ENDFOR >time2 = DATETIME() >timegone = timepassed(time1,time2) >? "FINISH:" >?? time2 >? "TIME ELAPSED: " >?? timegone > > >FUNCTION checkit >LPARAMETERS recordno >IF RECNO() <> recordno > GOTO recordno >ENDIF >IF EMPTY(mytable.nvalue) > ? RECNO() >ENDIF >RETURN .T. > >PROCEDURE countit >LPARAMETERS newval >newval = newval + 1 >RETURN newval > >PROCEDURE timepassed >LPARAMETERS starttime, endtime >timetaken = endtime - starttime >x = ttoc( { 00:00 } + timetaken, 1) >x = substr(x,9,2) + ':' + substr(x,11,2) + ':' + right(x,2) >RETURN x >