ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Duplicar Registro / Mestre Detalhe

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Ter Out 08, 2019 6:12 pm    Assunto: Duplicar Registro / Mestre Detalhe Responder com Citação

Tenho um Form de saída, nele tenho 2 tabelas à saida_cab e tenho a saida_item!(Uso o TFDquery) para cada tabela !

Porém, depois de eu salva uma saída ! eu busco ela normal.
Agora depois que eu busco ela , eu quero copiar tudo que esta na saida menos o Código da saida e inserir um novo registro na tabela com os dados clonados da saída anterior!


Será que alguém aí possa me ajuda?
Abraços

Cool
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
setsystem.info
Novato
Novato


Registrado: Quarta-Feira, 9 de Outubro de 2019
Mensagens: 3

MensagemEnviada: Qua Out 09, 2019 2:03 pm    Assunto: Re: Duplicar Registro / Mestre Detalhe Responder com Citação

zanba escreveu:
Tenho um Form de saída, nele tenho 2 tabelas à saida_cab e tenho a saida_item!(Uso o TFDquery) para cada tabela !

Porém, depois de eu salva uma saída ! eu busco ela normal.
Agora depois que eu busco ela , eu quero copiar tudo que esta na saida menos o Código da saida e inserir um novo registro na tabela com os dados clonados da saída anterior!


Será que alguém aí possa me ajuda?
Abraços

Cool



Esta muito confuso. Você pode explicar melhor?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Qua Out 09, 2019 2:33 pm    Assunto: Re: Duplicar Registro / Mestre Detalhe Responder com Citação

setsystem.info escreveu:
zanba escreveu:
Tenho um Form de saída, nele tenho 2 tabelas à saida_cab e tenho a saida_item!(Uso o TFDquery) para cada tabela !

Porém, depois de eu salva uma saída ! eu busco ela normal.
Agora depois que eu busco ela , eu quero copiar tudo que esta na saida menos o Código da saida e inserir um novo registro na tabela com os dados clonados da saída anterior!


Será que alguém aí possa me ajuda?
Abraços

Cool



Esta muito confuso. Você pode explicar melhor?






Tenho meu formulário de saída nele estou usando 2 TFDQUERY (COMPONENTE FIREDAC) Uma para tabela saida_cab e a outra para saida_item !
Depois que eu faço a saida dando baixa no estoque ,imprimo o relátório tudo certinho. porém no mês seguinte preciso fazer essa mesma saída ! então ao inves de eu fazer essa saida novamente digitando ela toda de novo
eu quero duplica-lá de uma forma quê a (chave primária mude para uma nova ) e que copie toda a saida anterior para uma nova dando baixa no estoque !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 8913
Localização: Sinop-MT

MensagemEnviada: Qua Out 09, 2019 2:38 pm    Assunto: Responder com Citação

veja este post se ajuda

https://www.devmedia.com.br/forum/duplicar-registro-e-modificar-a-copia/600656
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ric_rio2
Novato
Novato


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 69

MensagemEnviada: Qui Out 10, 2019 7:23 am    Assunto: Responder com Citação

Bom dia zanba.. tudo certinho?? Smile
Cara da para fazer isso sim.. tipo..

Código:
  Qy_Pai.First;
  while not Qy_Pai.Eof do
        begin
          Qy_Aux.Append;
          For A := 0 to Qy_Pai.FieldCount - 1 Do
              begin
                For B := 0 to Qy_Aux.FieldCount - 1 Do
                    begin
                      If Qy_Pai.Fields[A].FieldName = Qy_Aux.Fields[B].FieldName  then
                         begin
                           Qy_Aux.Fields[B].Value:=
                                  Qy_Pai.Fields[A].Value
                         end
                    end

              end;

          Qy_Aux.FieldByName('ID_DA_TABELA').AsInteger:= Novo_Numero;
          Qy_Aux.Post;

          // Neste momento, ANTES do NEXT do pai, faria a mesma logica para a tabela FILHA
          Qy_Pai.NExt;
        end
;

Espero ter sido claro e inteligível .. Smile
Qualquer coisa é só falar
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Qui Out 10, 2019 8:11 am    Assunto: Responder com Citação

ric_rio2 escreveu:
Bom dia zanba.. tudo certinho?? Smile
Cara da para fazer isso sim.. tipo..

Código:
  Qy_Pai.First;
  while not Qy_Pai.Eof do
        begin
          Qy_Aux.Append;
          For A := 0 to Qy_Pai.FieldCount - 1 Do
              begin
                For B := 0 to Qy_Aux.FieldCount - 1 Do
                    begin
                      If Qy_Pai.Fields[A].FieldName = Qy_Aux.Fields[B].FieldName  then
                         begin
                           Qy_Aux.Fields[B].Value:=
                                  Qy_Pai.Fields[A].Value
                         end
                    end

              end;

          Qy_Aux.FieldByName('ID_DA_TABELA').AsInteger:= Novo_Numero;
          Qy_Aux.Post;

          // Neste momento, ANTES do NEXT do pai, faria a mesma logica para a tabela FILHA
          Qy_Pai.NExt;
        end
;

Espero ter sido claro e inteligível .. Smile
Qualquer coisa é só falar


Bom Dia Ric_Rio2! Tudo sim!

Vou Fazer aqui e te mando um Feedback!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 8913
Localização: Sinop-MT

MensagemEnviada: Qui Out 10, 2019 8:27 am    Assunto: Responder com Citação

ric_rio2 escreveu:
Bom dia zanba.. tudo certinho?? Smile
Cara da para fazer isso sim.. tipo..

Código:
  Qy_Pai.First;
  while not Qy_Pai.Eof do
        begin
          Qy_Aux.Append;
          For A := 0 to Qy_Pai.FieldCount - 1 Do
              begin
                For B := 0 to Qy_Aux.FieldCount - 1 Do
                    begin
                      If Qy_Pai.Fields[A].FieldName = Qy_Aux.Fields[B].FieldName  then
                         begin
                           Qy_Aux.Fields[B].Value:=
                                  Qy_Pai.Fields[A].Value
                         end
                    end

              end;

          Qy_Aux.FieldByName('ID_DA_TABELA').AsInteger:= Novo_Numero;
          Qy_Aux.Post;

          // Neste momento, ANTES do NEXT do pai, faria a mesma logica para a tabela FILHA
          Qy_Pai.NExt;
        end
;

Espero ter sido claro e inteligível .. Smile
Qualquer coisa é só falar


se for FireDAC ele ja tem a funcao CopyRecord, veja o link q enviei acima
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Qui Out 10, 2019 8:31 am    Assunto: Responder com Citação

se for FireDAC ele ja tem a funcao CopyRecord, veja o link q enviei acima[/quote]

Sim Joemil!
Estou vendo agora !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Sáb Out 12, 2019 9:58 pm    Assunto: Responder com Citação

joemil escreveu:
veja este post se ajuda

https://www.devmedia.com.br/forum/duplicar-registro-e-modificar-a-copia/600656


Boa noite Joemil!

Tive um Problema com o CopyRecord aí fui da uma pesquisada verifiquei que ele não aceita campos calculados!
Então para mim não vai funcionar ! Obrigado pela dica!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Seg Out 14, 2019 9:55 am    Assunto: Responder com Citação

zanba escreveu:
ric_rio2 escreveu:
Bom dia zanba.. tudo certinho?? Smile
Cara da para fazer isso sim.. tipo..

Código:
  Qy_Pai.First;
  while not Qy_Pai.Eof do
        begin
          Qy_Aux.Append;
          For A := 0 to Qy_Pai.FieldCount - 1 Do
              begin
                For B := 0 to Qy_Aux.FieldCount - 1 Do
                    begin
                      If Qy_Pai.Fields[A].FieldName = Qy_Aux.Fields[B].FieldName  then
                         begin
                           Qy_Aux.Fields[B].Value:=
                                  Qy_Pai.Fields[A].Value
                         end
                    end

              end;

          Qy_Aux.FieldByName('ID_DA_TABELA').AsInteger:= Novo_Numero;
          Qy_Aux.Post;

          // Neste momento, ANTES do NEXT do pai, faria a mesma logica para a tabela FILHA
          Qy_Pai.NExt;
        end
;

Espero ter sido claro e inteligível .. Smile
Qualquer coisa é só falar


Bom Dia Ric_Rio2! Tudo sim!

Vou Fazer aqui e te mando um Feedback!






Bom dia irmão !!

Estou bem perdido! rsrsr....

Está tabela Qy_Aux seria minha tabela de itens?
A e B são Variaves correto?

eu tenho um agrupamento que fiz na minha TFDquery para impressão do relátorio,seria possivel eu usar ele para este metado?
Esta Assim:

begin
Q_saidacabproduto.Open;
// Q_saidaitem.Open;
Q_IMPRIMIR.Close;
Q_IMPRIMIR.Open();
Q_IMPRIMIR.SQL.Clear;
Q_IMPRIMIR.SQL.add(' select ');
Q_IMPRIMIR.SQL.add(' s.id_saida_cab,s.id_paciente,s.data_saida,s.data_proenvio, ');
Q_IMPRIMIR.SQL.add(' p.nome_paci,p.endereco_paci,p.estado_paci,p.municipio_paci,p.bairro_paci,p.tel_paci, ');
Q_IMPRIMIR.SQL.add(' p.cep_paci,p.conve_paci,e.nome_pro,e.tipo_pro,c.nome_convenio,si.data_saida_item, ');
Q_IMPRIMIR.SQL.add(' si.id_produtos_saidaitem,si.data_validade_saida,si.qtd_saida_item,si.F_uso_saida_item ');
Q_IMPRIMIR.SQL.add(' from saida_cab S inner join paciente p on p.id_paciente = s.id_paciente ');
Q_IMPRIMIR.SQL.add(' inner join convenio c on c.id_convenio = p.conve_paci ');
Q_IMPRIMIR.SQL.add(' inner join saida_item SI on SI.id_saida_cab = S.id_saida_cab ');
Q_IMPRIMIR.SQL.add(' inner join produtos E on E.id_pro = SI.id_produtos_saidaitem ');
Q_IMPRIMIR.SQL.add(' WHERE S.ID_SAIDA_CAB = ''' + editcodigo.text + ''' ');
// Q_IMPRIMIR.SQL.add(' order by s.id_saida_cab desc ');


Q_IMPRIMIR.Open();
Q_IMPRIMIR.FetchAll;
DMIMPRESSO.frxformsaida.PrepareReport;
DMIMPRESSO.frxformsaida.ShowPreparedReport;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ric_rio2
Novato
Novato


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 69

MensagemEnviada: Ter Out 15, 2019 6:47 am    Assunto: Responder com Citação

Boa tarde zanba.
Cara na realidade o que o código que sugeri faz é o seguinte..:
Abre(open) uma query Qy_Pai.. Select * from TABELA

Ai no Primeiro REGISTRO LE campo a campo e appenda na tabela Qy_AUX ( que é a mesma tabela que o pai )
Ao Final de ler todos os campos, ALTERA o ID do novo registro que esta na tabela Qy_Aux.. pois não pode ter o mesmo id do que a tabela Qy_PAI...
Apôs ler todos os campos do REGISTRO DO PAI, se faz a mesma lógica para os FILHOS.
Dai se da o NEXT na Qy_PAI. E começa tudo novamente..

Como ele esta lendo todos os campos da QY_PAI e procurando os mesmos campos no QY_AUX, se o QY_AUX estiver com o SELECT * FROM PAI, sem os joins, e tiver todos os campos necessarios no QY_PAI que tem JOIN, então,
tudo ocorrerá corretamente caso os campos existam nos dois objetos.
Eu sujeriria que você fizesse o seguinte..:

Código:
Qy_Pai_Aux.Close;
Qy_Pai_Aux.Sql.Clear;
Qy_Pai_Aux.Sql.Add('Select * from Tabela_Pai where ID_Pai = :ID_do_PAi');

Qy_Aux.Close;
Qy_Aux.Sql.Clear;
Qy_Aux.Sql.Add('Select * from Tabela_Pai where ID_Pai is null ');
Qy_Aux.Open;

Qy_Pai.First;
While not Qy_Pai.Eof do
      begin
        Qy_Pai_Aux.Close;
        Qy_Pai_Aux.ParamByName('ID_DO_PAI').AsInteger:= Qy_Pai.FieldByName('ID_PAi').AsInteger;
        Qy_Pai_Aux.Open;
        For A:= 0 To Qy_Pai.FieldCount - 1 do
            begin
              For B:= 0 To Qy_Aux.FieldCount - 1 do
                  begin
                    If Qy_Pai_Aux.Fields[A].FieldName = Qy_Aux.Fields[B].FieldName then
                       begin
                         Qy_Aux.Fields[B].AsValue:= Qy_Pai_Aux.Fields[A].AsValue;
                       end;
                  end;
            end;

        Qy_Aux.FieldByName('ID_Pai').AsInteger:= Novo_ID;


        //Fazer a mesma logica para os filhos Antes Do POST do Qy_Aux pois ele DESAPARECERA assim que colocar o id_pai.

        Qy_Aux.Post;

        Qy_Pai.Next;
      end;


Espero ter sido claro.. caso tenha alguma duvida é só falar Smile
INTEL
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
zanba
Novato
Novato


Registrado: Segunda-Feira, 21 de Março de 2016
Mensagens: 11

MensagemEnviada: Ter Out 15, 2019 11:26 am    Assunto: Responder com Citação

Então Ric_rio2!

Veja se é assim !

Coloquei mais 2 query uma para espelho da minha tabela saida_cab e a outra para espelho da minha tabela saida_item! Seria isso?
ficou assim Q_saidacabproduto = Q_aux e minha Q_saidaitem = Q_aux_item! Seria isso ai que vc me passou?

Código ficou assim;

begin
Q_saidacabproduto.Close;
Q_saidacabproduto.Sql.Clear;
Q_saidacabproduto.Sql.Add('select * from saida_cab where id_saida_cab = :id_saida_cab ');

Q_Aux.Close;
Q_Aux.Sql.Clear;
Q_Aux.Sql.Add('select * from saida_cab where id_saida_cab is null ');
Q_Aux.Open;

Q_saidacabproduto.First;
While not Q_saidacabproduto.Eof do
begin
Q_saidacabproduto.Close;
Q_saidacabproduto.ParamByName('id_saida_cab').AsInteger:= Q_saidacabproduto.FieldByName('id_saida_cab').AsInteger;
Q_saidacabproduto.Open;
For A:= 0 To Q_saidacabproduto.FieldCount - 1 do
begin
For B:= 0 To Q_Aux.FieldCount - 1 do
begin
If Q_saidacabproduto.Fields[A].FieldName = Q_Aux.Fields[B].FieldName then
begin
Q_Aux.Fields[B].AsValue:= Q_saidacabproduto.Fields[A].AsValue;
end;
end;
end;


Q_Aux.FieldByName('id_saida_cab').AsInteger:= Q_saidacabproduto.RecordCount +1;
//----------------------------------- filha-----------------------------------------

Q_saidaitem.Close;
Q_saidaitem.Sql.Clear;
Q_saidaitem.Sql.Add('select * from saida_cab where id_saida_cab = :id_saida_cab ');

Q_aux_item.Close;
Q_aux_item.Sql.Clear;
Q_aux_item.Sql.Add('select * from saida_cab where id_saida_cab is null ');
Q_aux_item.Open;

Q_saidaitem.First;
While not Q_saidaitem.Eof do
begin
Q_saidaitem.Close;
Q_saidaitem.ParamByName('id_saida_cab').AsInteger:= Q_saidaitem.FieldByName('id_saida_cab').AsInteger;
Q_saidaitem.Open;
For A:= 0 To Q_saidaitem.FieldCount - 1 do
begin
For B:= 0 To Q_aux_item.FieldCount - 1 do
begin
If Q_saidaitem.Fields[A].FieldName = Q_aux_item.Fields[B].FieldName then
begin
Q_aux_item.Fields[B].AsValue:= Q_saidaitem.Fields[A].AsValue;
end;
end;
end;

Q_aux_item.FieldByName('id_saida_item').AsInteger:= Q_saidaitem.RecordCount +1;

//Fazer a mesma logica para os filhos Antes Do POST do Qy_Aux pois ele DESAPARECERA assim que colocar o id_pai.

Q_Aux.Post;

Q_saidacabproduto.Next;
end;

Porém está dando dando erro no A e no B :https://uploaddeimagens.com.br/imagens/ffffffffffffffff-png-e5650d4b-0e81-4dd6-a414-0a07e7c083bc

Sei que o erro é bobo mais já a dias nesse projeto estou meio de cabeça quente e acabo não percebendo algumas coisas bobas que aparecer.rsrsrs.
Abraços;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
ric_rio2
Novato
Novato


Registrado: Segunda-Feira, 1 de Outubro de 2018
Mensagens: 69

MensagemEnviada: Qui Out 17, 2019 6:56 am    Assunto: Responder com Citação

Bom dia zanba
tudo certinho??
Cara, desculpe a demora em responder.. aqui esta uma loucura,loucura,loucura.. Smile
Voce tem que DECLARAR as VARIAVEIS..
Tipo

Código:
procedure TFo_Main.Button2Click(Sender: TObject);
  VAR
    A, B : Integer;
begin
  For A:= 0 To Q_saidacabproduto.FieldCount - 1 do
       begin
          For B:= 0 To Q_Aux.FieldCount - 1 do
          begin
          end
       end;
end;


Pela imagem que tu postou acho que é isso.
Se não for avisa que olhamos novamente Smile
Abraços
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB