Não encontrei nada sobre isso, exceto colocar a lista de campos no comando.
Tem outro jeito ?
INSERT INTO JPCADASTRO
( ( SELECT * FROM JPCADASTRO WHERE IDCADASTRO = 10 ) - campos IDCADASTRO, CNPJ, ENDERECO, INSCRICAO )
Por enquanto a saÃda foi fazer manual:
STATIC FUNCTION DuplicaCliente( mIdCadastro )
LOCAL aList := {}, nCont, cCampo, xValue
LOCAL cnMySql := ADOClass():New( AppConexao() )
IF mIdCadastro = 0
RETURN NIL
ENDIF
IF ! MsgYesNo( "Confirma criar novo cadastro baseado no atual?" )
RETURN NIL
ENDIF
WITH OBJECT cnMySql
:cSql := "SELECT * FROM JPCADASTRO WHERE IDCADASTRO = " + NumberSql( mIdCadastro )
:Execute()
FOR nCont = 1 TO :Rs:Fields:Count()
cField := Upper( :Rs:Fields( nCont - 1 ):Name )
xValue := :rs:Fields( nCont - 1 ):Value
DO CASE
CASE cField == "IDCADASTRO"
CASE cField == "CDCNPJ" ; xValue := Left( xValue, 11 ) + "0000-00"
CASE cField == "CDINSEST" ; xValue := ""
CASE cField == "CDENDERECO" ; xValue := ""
ENDCASE
IF cField != "IDCADASTRO"
:QueryAdd( cField, xValue )
ENDIF
NEXT
mIdCadastro := :QueryExecuteInsert( "JPCADASTRO" )
::axKeyValue[ 1 ] := mIdCadastro
:CloseRecorset()
ENDWITH
KEYBOARD "A" + Chr( K_ENTER )
RETURN NIL
Além do problema de digitar muitos campos, a lista pode ficar desatualizada com o passar do tempo, então não gostaria de ter que colocar a lista de campos no fonte.