Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Ter Out 08, 2019 6:12 pm Assunto: Duplicar Registro / Mestre Detalhe |
|
|
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
|
|
Voltar ao Topo |
|
|
setsystem.info Novato
Registrado: Quarta-Feira, 9 de Outubro de 2019 Mensagens: 3
|
Enviada: Qua Out 09, 2019 2:03 pm Assunto: Re: Duplicar Registro / Mestre Detalhe |
|
|
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
|
Esta muito confuso. Você pode explicar melhor? |
|
Voltar ao Topo |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Qua Out 09, 2019 2:33 pm Assunto: Re: Duplicar Registro / Mestre Detalhe |
|
|
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
|
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 |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
|
Voltar ao Topo |
|
|
ric_rio2 Aprendiz
Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Qui Out 10, 2019 7:23 am Assunto: |
|
|
Bom dia zanba.. tudo certinho??
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 ..
Qualquer coisa é só falar |
|
Voltar ao Topo |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Qui Out 10, 2019 8:11 am Assunto: |
|
|
ric_rio2 escreveu: | Bom dia zanba.. tudo certinho??
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 ..
Qualquer coisa é só falar |
Bom Dia Ric_Rio2! Tudo sim!
Vou Fazer aqui e te mando um Feedback! |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9098 Localização: Sinop-MT
|
Enviada: Qui Out 10, 2019 8:27 am Assunto: |
|
|
ric_rio2 escreveu: | Bom dia zanba.. tudo certinho??
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 ..
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 |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Qui Out 10, 2019 8:31 am Assunto: |
|
|
se for FireDAC ele ja tem a funcao CopyRecord, veja o link q enviei acima[/quote]
Sim Joemil!
Estou vendo agora ! |
|
Voltar ao Topo |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Sáb Out 12, 2019 9:58 pm Assunto: |
|
|
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 |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Seg Out 14, 2019 9:55 am Assunto: |
|
|
zanba escreveu: | ric_rio2 escreveu: | Bom dia zanba.. tudo certinho??
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 ..
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 |
|
|
ric_rio2 Aprendiz
Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Ter Out 15, 2019 6:47 am Assunto: |
|
|
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
INTEL |
|
Voltar ao Topo |
|
|
zanba Novato
Registrado: Segunda-Feira, 21 de Março de 2016 Mensagens: 15 Localização: Brazil,Rio de Janeiro
|
Enviada: Ter Out 15, 2019 11:26 am Assunto: |
|
|
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 |
|
|
ric_rio2 Aprendiz
Registrado: Segunda-Feira, 1 de Outubro de 2018 Mensagens: 108
|
Enviada: Qui Out 17, 2019 6:56 am Assunto: |
|
|
Bom dia zanba
tudo certinho??
Cara, desculpe a demora em responder.. aqui esta uma loucura,loucura,loucura..
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
Abraços |
|
Voltar ao Topo |
|
|
|