Mestre-detalhe não deleta registro

Firebird

09/04/2015

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

Curtidas 0

Respostas

Thiago Santana

Thiago Santana

09/04/2015

MRoberto, a aplicação retorna algum erro?
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

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.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

Se deletar o registro diretamente no banco de dados, ele é excluido?
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

Sim. Pelo IBExpert tenho como deletar sem problema.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

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...
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

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;
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

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.
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

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

valeu.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

Mas CommitRetaining não a mantém a transação aberta?
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

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.
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

... 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..
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

09/04/2015

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.
GOSTEI 0
X Me

X Me

09/04/2015

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.
GOSTEI 0
Marcos Roberto

Marcos Roberto

09/04/2015

xkEY

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