local lnSize, loTerm, lcTempFile, lcLongStr, lcStr, lnSizeRead lnSize=fsize(lcTextFile) && or use adir loTerm=newobject('thermometer', 'wg.vcx','','Appending',lnSize) lcTempFile=gcTempPath+sys(15) && ? sys(2001) fh=fopen(lcTextFile) lnSizeRead=0 select WorkTable && Table in which we want append do while !feof(fh) lcLongStr='' for i=1 to 500 && Quite low number, so Append should be almost instantanious if feof(fh) exit endif lcStr=fgets(fh,2000) lnSizeRead=lnSizeRead+len(lcStr) loTerm.update(lnSizeRead) lcLongStr=lcStr+chr(10)+chr(13) next =strtofile(rtrim(lcLongStr),lcTempFile) append from (lcTempFile) && should be quick enddo release loTermThis is the idea. The similar idea could be used for append from table. Divide number of records, say, by 1000 and do append for betwen(recno(),lnStart, lnFinsish) in a loop (You got the idea).