Fórum Mestre-detalhe não deleta registro #516208

09/04/2015

0

Pessoal Ajudem por favor

Tenho um mestre-detalhe IBDataset(mestre) e IBTable(detalhe) em sistema de estoque. Quando da emissão do cupom caso tenha que que excluir um item o sistema faz tudo certo o cupom é emitido sem aquele item que foi apagado e tudo joinha. Mas o registro que foi apagado na aplicação ainda está no banco e não se apaga de jeito nenhum, já fiz de tudo que esperava dar certo e nada.
segue parte do código:

procedure TfrmTelaPDV.editExcluirExit(Sender: TObject);
begin
if dm2.cds_Detalhe.Locate('item', editExcluir.Text, []) then //// operador informa o item do cupom para excluir
begin
if MessageDlg('Confirma a Exclusão do Item?',mtConfirmation, [mbYes,mbNo],0)= mrYes then
begin
MemoEditExcluido(); ///insere linha de dedução do item no cupom
dm2.cds_detalhe.Delete; /// deleta o item mas antes devolve o item ao estoque e recalcula os valores do cupom tudo ok
end;
end
else
ShowMessage('Item não Encontrado');

telaExcluirItem.Visible := false;
EdtCodProd.SetFocus;
end;

Ao final o registro ainda está no banco, não foi apagado fisicamente;
já coloquei logo abaixo dm1.IBTrans2.CommitRetaining; mas também não resolve.
Me ajudem por favor.

Delphi7 / Firebird 2.5 / IBExpert
Marcos Roberto

Marcos Roberto

Responder

Posts

09/04/2015

Thiago Santana

MRoberto, a aplicação retorna algum erro?
Responder

Gostei + 0

09/04/2015

Marcos Roberto

Não nenhum. Só fico sabendo quando imprimo relatório das vendas por produtos, então todos os produtos excluidos aparecem.
Outra coisa é que o arquivo mestre está correto seus valores, digo já sem os produtos excluidos.
Responder

Gostei + 0

09/04/2015

Marisiana Battistella

Se deletar o registro diretamente no banco de dados, ele é excluido?
Responder

Gostei + 0

09/04/2015

Marcos Roberto

Sim. Pelo IBExpert tenho como deletar sem problema.
Responder

Gostei + 0

14/04/2015

Marisiana Battistella

Demorei mas voltei.... MRoberto, você conseguiu resolver?

Adquiri pouca experiência me programação com Delphi, mas a causa mais provável é que a inserção não esteja sendo efetuada de fato.
Você chegou a testar linha a linha para verificar se as informações estão sendo buscadas corretamente?
Lembro que existe um recurso para fazer esse tipo de verificação...
Responder

Gostei + 0

14/04/2015

Marcos Roberto

Marisiana,

Como disse, em tempo de execução tudo dá certo, o cupom sai sem o item excluido. O relatorio das vendas sai correto, somente se voce for listar todos os itens daquele cupom o excluido aparece, por estar no banco.

Não sei mais o que fazer, somente um expert em BD poderá dizer o que está acontecendo.

Muito agradecido;
Responder

Gostei + 0

15/04/2015

Marisiana Battistella

Mas é por essas razão que a exclusão não deve estar sendo efetivada no banco.
Verifica se após emitir esse cupom não está sendo realizado um rollback.
Responder

Gostei + 0

15/04/2015

Marcos Roberto

... após a deleção dou CommitRetaining, nunca uso rollback.

valeu.
Responder

Gostei + 0

15/04/2015

Marisiana Battistella

Mas CommitRetaining não a mantém a transação aberta?
Responder

Gostei + 0

15/04/2015

Marisiana Battistella

Encontrei essa explicação na web:
No Commit a transação é gravada e encerrada, sendo necessário startar novamente para uma nova sequência de comandos.
No CommitRetaining a transação é gravada, mas continua aberta, não sendo necessário restartar.
Responder

Gostei + 0

15/04/2015

Marcos Roberto

... Então se vc der o commit as entidades serão todas fechadas e em tempo de execução no meio de uma venda se vc fizer isto perde todo o serviço. O CommitRetaing encerra a transação, ou seja garante a gravação dos mesmos e vc continua acessando todas as entidades sem problema.


Valeu..
Responder

Gostei + 0

15/04/2015

Marisiana Battistella

Certo, entendido.
Então, no teu caso, como não está excluindo o item do banco de dados, em algum momento está precisando realizar o COMMIT para efetivar a deleção do registro.
Responder

Gostei + 0

22/04/2015

X Me

Você esta utilizando dataSetProvider?? Se sim, você precisa alterar a propriedades poCascadeDelete para True, ou seja, habilitar ela. Mesma coisa ocorre para a propriedade poCascadeUpdade. Ambas estão dentro de options.

Assim quando você alterar ou apagar algum registro o mestre detalhe também apaga os filhos desse registro.
Responder

Gostei + 0

22/04/2015

Marcos Roberto

xkEY

Estou usando IBDataSet (mestre) e IBTable (detalhe) será que tem que habilitar também algum evento?
Obrigado !
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar