Fórum Erro ao excluir dados de tabela detalhe #331409

18/10/2006

0

Terceiro post e mais importante.

Tenho duas tabelas uma mestre e outra detalhe, ta funcionando tudo belezinha, exceto na hora de excluir, todas as vezes q tento excluir, recebo a seguinte mensagem de erro:

Cannot delete master record with details

Como posso contornar esse problema?
Removendo todas os registros referentes a tabela mestre, da tabela detalhe antes da exclusão?

Agradeço desde já


Gardel

Gardel

Responder

Posts

18/10/2006

Ronaldo.cutu

bom dia

se sua tabela detalhes tem relacionamento com a mestre vc
primeiro tem excluir os itens da detalhes para depois escluir
a da mestre

att

Ronaldo


Responder

Gostei + 0

19/10/2006

Gardel

Sim, entendo e imaginei q fosse isso mesmo...

Porém, essa implementação de exclusão, eu fiz dentro do próprio banco de dados através de exclusão em cascata, pela chave estrangeira. Sendo assim gostaria que o delphi ignorasse esse erro, e permitisse que o proprio banco de dados realizasse essa operação.

Exemplo:
Qdo se faz o autoincremento dos campos chave primaria (cadastro de clientes por exemplo) por trigger, qdo adicionamos esses campos no dataset pelo delphi, esse campo vem com a propriedade required true, sendo assim toda vez q vc deixa o campo vazio e tenta salvar o registro ele gera o erro, dizendo que o campo é requerido, então coloca-se o valor da propriedade required como false, assim o erro não é gerado e o proprio banco trata de autoincrementar o campo usando a trigger.

Como no exemplo citado, o delphi ignora, e deixa o bd tratar, gostaria de saber se existe alguma maneira de fazer com que o delphi ignore esse erro e deixe o bd fazer as exclusão por si mesmo, visto que já está implementado dentro do banco.

Espero ter sido claro :)

Agradeço...


Responder

Gostei + 0

19/10/2006

Raserafim

vc já prestou atenção se este erro tb ocorre quando está só a aplicação rodando sem o delphi estar aberto?
as vezes acontece erros que apenas o debugador do delphi pega, mas na aplicação para o cliente, este erro pode não aparecer.


Responder

Gostei + 0

21/10/2006

Gardel

Sim sim, observei...

Qdo dentro do Delphi, o erro ocorre, e a mensagem de erro é mostrada.
Qdo fora do delphi, ou seja, com o programa já para o cliente a mensagem de erro nao é mostrada, porém, simplesmente nada acontece, o registro da tabela mestre não é excluido, muito menos os da tabela detalhe.

Alguém tem alguma idéia de como resolver isso?

Agradeço.


Responder

Gostei + 0

23/10/2006

Nigro

Mas a função do banco é essa mesmo a de sobrepor a integridade referencial sobre a linguagem.


Responder

Gostei + 0

23/10/2006

Tiagorocha

Deixa ver se eu tô entendendo direito...
1. Tem chave estrangeira apontando pra tabela master na tabela detail?
2. Tem ON UPDATE CASCADE nessa chave estrangeira?
3. E AINDA ASSIM NÃO FUNCIONA? Que estranho...


Responder

Gostei + 0

23/10/2006

Tiagorocha

2. Tem [b:37278e63e6]ON UPDATE[/b:37278e63e6] CASCADE nessa chave estrangeira?

Digo... ON DELETE


Responder

Gostei + 0

24/10/2006

Gardel

Exato...

Dentro do banco (FireBird), na tabela detalhe tem a chave estrangeira que liga ela com a tabela Mestre e essa chave está confirurada pra excluir em cascata caso o registro da tabela Mestre seja excluido.

Sinceramente desisti de contornar o problema, estou deletando pelo Delphi mesmo, faço um loop na tabela detalhe excluindo todo os registros da tabela detalhe que tem o mesmo codigo da tabela mestre.

O erro sumiu assim, mais não entendo porque esse erro ocorre...

Obrigado pela ajuda,


Responder

Gostei + 0

24/10/2006

Tiagorocha

Uma solução meio esquisita, porém comum no meio de desenvolvimento, é criar uma trigger no Before Delete da tabela master com um comando DELETE FROM DETALHE WHERE CODIGO=OLD.CODIGO ou coisa assim.
Eu só faria isso em último caso (num caso igual ao seu) :P


Responder

Gostei + 0

04/01/2008

Racastro

Após alterar a chave estrangeira da tabela detalhe para DELETE ON CASCADE, vá no ´DataSetProvider´ que está ligado à tabela MASTER e altere a opção ´poCascadeDeletes´ para TRUE. Pronto. Após essas alterações a exclusão deverá ocorrer sem problemas
Obrigada!!!


Responder

Gostei + 0

15/03/2008

T3r3son

To passando pelo mesmo problema, preciso saber como excluir os itens (sqldataset+dsp+clientdataset)
Alguma sugestão???
[]´s
Evaristo


Responder

Gostei + 0

15/03/2008

Wanderok

Ola.

Vejam se os registros da tabela detalhe nao estao linkados por algum objeto em seu projeto no momento da exclusao.


Responder

Gostei + 0

27/08/2009

Ricardoferreira_spa

vai nas propriedades Options do dataserprovider e coloca pra true o
poCascadeDeletes e poCascadeUpdates

Esperto ter ajudado

[/code][/url]


Responder

Gostei + 0

27/08/2009

Osocram

Isso que o amigo Ricardo passou esta certo.

vai nas propriedades Options do dataserprovider e coloca pra true o poCascadeDeletes e poCascadeUpdates Esperto ter ajudado
[/code][/url]


So para complementar o que estava acontecendo no caso de vcs, é que no banco de dados esta em cascade mas no delphi não permite, tanto que se vc tentar excluir o registro direto no banco deve funcionar.
Alterando as configurações que nem o Ricardo comentou dae o provider vai permitir isso tbm.

Flw.


Responder

Gostei + 0

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

Aceitar