>lparameters tvDataIn, tcEndOfDay >local lcRetVal, llEndOfDay > >#define C_SQUOTE ['] > >llEndOfDay = iif(pcount() < 2, .F., upper(trim(tcEndOfDay))=='ENDOFDAY') > >do case > case vartype(tvDataIn)='D' &&date > if empty(tvDataIn) or isblank(tvDataIn) > lcRetVal='NULL' > else > lcRetVal="'"+dtos(tvDataIn) + iif(llEndOfDay, " 23:59:59'" ," 00:00:00'") > endif > case vartype(tvDataIn)='T' &&time > if empty(tvDataIn) or isblank(tvDataIn) > lcRetVal='NULL' > else > lcRetVal="'"+dtos(ttod(tvDataIn))+' '+ttoc(tvDataIn, 2)+"'" > lcRetVal=strtran(lcRetVal, 'A.M.', 'AM', -1, -1, 1) > lcRetVal=strtran(lcRetVal, 'P.M.', 'PM', -1, -1, 1) > endif > case vartype(tvDataIn)='C' &&character >*-jt- if at("'", tvDataIn)>0 and at('"', tvDataIn)>0 >*-jt- lcRetVal='"'+strtran(tvDataIn, '"','""')+'"' >*-jt- else >*-jt- if at("'", tvDataIn)>0 >*-jt- lcRetVal='"'+tvDataIn+'"' >*-jt- else >*-jt- lcRetVal="'"+tvDataIn+"'" >*-jt- endif >*-jt- endif > lcRetVal=C_SQUOTE+strtran(tvDataIn, C_SQUOTE, C_SQUOTE+C_SQUOTE)+C_SQUOTE > case vartype(tvDataIn)='L' &&logical > lcRetVal=iif(tvDataIn=.t., '1', '0') > case vartype(tvDataIn)='X' &&null value > lcRetVal='NULL' > case vartype(tvDataIn)='N' &&int, float, double, numeric (not currency) > &&transform will not work on a B(8) field created by XMLToCursor() > lcRetVal=alltrim(str(tvDataIn,16,4)) > do while at('.', lcRetVal)>0 and inlist(substr(lcRetVal, len(lcRetVal)), '0', '.') > lcRetVal=substr(lcRetVal, 1, len(lcRetVal)-1) > enddo > case vartype(tvDataIn)='Y' &¤cy > lcRetVal=transform(tvDataIn,'999999999999.9999') > otherwise &&other > lcRetVal=transform(tvDataIn) >endcase > >return lcRetValThank you very much. Very useful function to have.