Dados duplicam ao gravar na tabela (MySQL/Firedac)
Bom dia.
Fiz um gerador de parcelas com um RxMemoryData temporário e as parcelas são geradas normalmente, porém após gravar os dados na tabela verifiquei pelo dbForge que as informações estavam duplicadas. Sinceramente não sei o que está errado, se é alguma configuração no FDQuery ou outra configuração qualquer. Abaixo segue o código para gravação dos dados:
Como podem ver, no final do loop estou utilizando o rxPARC.Delete, assim a cada registro gravado na tabela real, o registro da tabela temporária é apagado. Anteriormente estava utilizando rxPARC.Next, mas dos 2 modos os dados ficam duplicados.
Até o momento, a única maneira que encontrei de evitar a duplicidade foi fechar e abrir a tabela original a cada registro gravado. Fazendo um teste gerei 20 parcelas, e o que deveria ser num piscar de olhos demorou uns 15s.
Ah, o CachedUpdates está True.
Será que mesmo após o ApplyUdates ainda fica algum dado em memória?
É isso, espero que possam me ajudar.
Grato
Marcos
Fiz um gerador de parcelas com um RxMemoryData temporário e as parcelas são geradas normalmente, porém após gravar os dados na tabela verifiquei pelo dbForge que as informações estavam duplicadas. Sinceramente não sei o que está errado, se é alguma configuração no FDQuery ou outra configuração qualquer. Abaixo segue o código para gravação dos dados:
rxPARC.First;
while not rxPARC.Eof do
begin
// Dados Comuns
dmdados.qryCReceber.Append;
qryCRecebercr_nrocompra.Value := iNroCompra;
dmdados.qryCRecebercr_cli_id.Value := StrToInt(edtCODI.Text);
dmdados.qryCRecebercr_dtcompra.Value := edtDCOM.Date;
dmdados.qryCRecebercr_totalcompra.Value := edtTOTA.Value;
dmdados.qryCRecebercr_saldo.Value := edtTOTA.Value;
dmdados.qryCRecebercr_descricao.Value := edtDESC.Text;
dmdados.qryCRecebercr_juros.Value := edtJURP.Value;
dmdados.qryCRecebercr_juros_val.Value := edtJURV.Value;
dmdados.qryCRecebercr_desconto.Value := edtJURP.Value;
dmdados.qryCRecebercr_desconto_val.Value := edtJURV.Value;
dmdados.qryCRecebercr_condpag_id.Value := StrToInt(lblCPAG.Caption);
dmdados.qryCRecebercr_totalparcelas.Value := edtNPAR.Value;
dmdados.qryCRecebercr_intervalo.Value := edtINTE.Value;
dmdados.qryCRecebercr_dia_fixo.Value := edtDFIX.value;
dmdados.qryCRecebercr_total_geral.Value := edtVFIM.Value;
dmdados.qryCRecebercr_quitado.Value := 'N';
// Parcelas
dmdados.qryCRecebercr_nroparcela.Value := strtoint(rxPARCNroParc.Value);
dmdados.qryCRecebercr_valparcela.value := rxPARCValor.Value;
dmdados.qryCRecebercr_dtvenc.Value := rxPARCVencimento.Value;
dmdados.qryCReceber.Post;
dmdados.qryCReceber.ApplyUpdates(0);
rxPARC.Delete;
end;
Como podem ver, no final do loop estou utilizando o rxPARC.Delete, assim a cada registro gravado na tabela real, o registro da tabela temporária é apagado. Anteriormente estava utilizando rxPARC.Next, mas dos 2 modos os dados ficam duplicados.
Até o momento, a única maneira que encontrei de evitar a duplicidade foi fechar e abrir a tabela original a cada registro gravado. Fazendo um teste gerei 20 parcelas, e o que deveria ser num piscar de olhos demorou uns 15s.
Ah, o CachedUpdates está True.
Será que mesmo após o ApplyUdates ainda fica algum dado em memória?
É isso, espero que possam me ajudar.
Grato
Marcos
Marcos
Curtidas 0