MyCopy(AliasHere,"c:\test\FooWithoutMemo" ,0) MyCopy(AliasHere,"c:\test\FooWithConvertedMemo",1) *** This is only EXAMPLE, you should add error handling here FUNCTION MyCopy(lcAlais, lcTargetFile, lnTypeOfMemo) LOCAL lcCurrentAlias, laFields[1], lnFields LOCAL lnFor, lcSelect lcCurrentAlias = ALIAS() lnFields = AFIELDS(laFields, m.lcAlias) lcSelect = "SELECT " FOR lnFor = 1 TO lnFields IF laFields[m.lnFor,2] == "M" && Memo IF m.lnTypeOfMemo == 1 lcSelect = lcSelect + [CAST(]+laFields[m.lnFor,1]+[ AS C(255)) AS ]+laFields[m.lnFor,1]+[, ] ENDIF ELSE lcSelect = lcSelect + laFields[m.lnFor,1]+[, ] ENDIF NEXT lcSelect = LEFT(lcSelect,LEN(lcSelect)-2)+" FROM "+m.lcAlias+[ INTO CURSOR crsForCopy" &lcSelect COPY TO (lcTargetFile) USE IN SELECT("crsForCopy") IF NOT EMPTY(lcCurrentAlias) SELECT (lcCurrentAlias) ENDIF RETURNNOT TESTED!!!!