Página 1 de 1

Duplicar registro

Enviado: 19 Fev 2020 11:36
por JoséQuintas
Como o cliente cadastra muitas filiais de determinadas empresas, tenho a opção de duplicar cadastro.
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:

Código: Selecionar todos

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.

Duplicar registro

Enviado: 19 Fev 2020 15:14
por susviela@bol.com.br
Se ... e somente se, essa opção de duplicar o cadastro está acontecendo no momento da inclusão:

1) Aviso de gravação realizada com sucesso e perguntando se deseja gravar um outro registro com dados "similares" a esse registro;

2) Se e somente se resposta = SIM (não limpar o formulário e habilitar o botão de gravação )

Isso evitaria mais um acesso ao banco, o que nem chega a ser um problema;

Obs.: o item de pergunta / permissão de duplicar registros poderia ser setado nas configurações do sistema;