LOCAL cChar, cFields, cFile, nReccount, nStartTime, ix > >SELECT * FROM h:\ids5\dbfs\t_tanklayout INTO CURSOR _tmpXML NOFILTER READWRITE > >nReccount = RECCOUNT() >cFile = SYS(2015)+'.tmp' >nStartTime=SECONDS() >cChar=CHR(13) > >cFields = "fb=IIF(RECNO() = 1,'<TEST>'+CHR(13),'')+CHR(9)+'<CLIENT>'," >FOR ix=1 TO FCOUNT() > IF !TYPE(FIELD(ix))$'GM' > cFields = cFields + "f"+ALLTRIM(STR(ix))+"=CHR(9)+CHR(9)+'<"+FIELD(ix)+">'+" > cFields = cFields + IIF(TYPE(FIELD(ix))$'CM', FIELD(ix), "Transform("+FIELD(ix)+")")+"+" > cFields = cFields + "'</"+FIELD(ix)+">'," > ENDIF >ENDFOR >cFields = cFields + "F"+ALLTRIM(STR(ix))+"=chr(9)+'</CLIENT>'+IIF(RECNO() = nReccount,CHR(13)+'</TEST>','')" > >SET FIELDS GLOBAL >SET FIELDS TO &cFields >COPY TO (cFile) TYPE DELIMITED WITH "" WITH CHARACTER &cChar >SET FIELDS TO > >? SECONDS() - nStartTime > >MODIFY FILE (cFile) >ERASE (cFile) >RETURN>
StartTime=Seconds() lcMyXML=ToXML('testcursor') ? Seconds() - StartTime lcTemp = Sys(2015)+'.tmp' Strtofile(m.lcMyXML,m.lcTemp) Modify Command (m.lcTemp) Erase (m.lcTemp) Function ToXML Lparameters tcCursorName, tcWhere Local lcChar,lcTemp,lcXML,lcFields,ix,; lcFields, lnHandle, lcTempFields,lnSelect lnSelect = Select() lcChar=Chr(13) lcTemp = Sys(2015)+'.tmp' tcWhere = Iif(Empty(m.tcWhere),'',m.tcWhere) Select 0 Use (tcCursorName) Again Alias _tmpXML lcTempFields = Sys(2015)+'.tmp' lnHandle = Fcreate(m.lcTempFields) Fwrite(m.lnHandle,; "f0=IIF(RECNO() = 1,'<TEST>'+CHR(13)+' <CLIENT>',' <CLIENT>'),") For ix=1 To Fcount() If !Type(Field(m.ix))$'GM' Fwrite(m.lnHandle,"f"+Ltrim(Str(ix))+"=' <"+Field(ix)+">'+") Fwrite(m.lnHandle,Iif(Type(Field(ix))$'CM',; 'Trim('+Field(ix)+')+',; 'Transform('+Field(ix)+')+')) Fwrite(m.lnHandle,"'</"+Field(ix)+">',") Endif Endfor Fwrite(m.lnHandle,"f"+Ltrim(Str(m.ix))) Fwrite(m.lnHandle,; "=Iif(Recno()=Reccount(),' </CLIENT>'+Chr(13)+'</TEST>',' </CLIENT>')") Fclose(m.lnHandle) lcFields = Filetostr(m.lcTempFields) Erase (m.lcTempFields) Set Fields Global Set Fields To &lcFields Copy To (m.lcTemp) &tcWhere ; Type Delimited With "" With Character &lcChar Use In '_tmpXML' Set Fields To Select (m.lnSelect) lcXML = Filetostr(m.lcTemp) Erase (m.lcTemp) Return m.lcXMLSo VFP sets its mark from 8 secs to just under 6.5 seconds vs C# 17-18secs :) Wish it was this fast and powerfull when it's something not data too :)