GARANTIR DESCONTO

Fórum ADOQuery Trigger de DELETE para tabelas FILHAS #373186

06/08/2009

0

Bom dia Pessoal !

Estou com um problema. No meu sistema utilizo ADOQuery ( antes eu usava BDE ).
A questão é que eu tenho duas tabelas, uma PAI e a outra FILHA.

Na tabela PAI, tenho uma TRIGGER de DELETE que deleta os registros da tabela FILHA.

Ao deletar via sistema o registro da Tabela PAI, utilizando o navegador que está ligado com o dataset referente a tabela PAI, exclui normalmente da tabela PAI, só que dá uma mensagem de erro: ´Muitas linhas foram encontradas para atualização´... ou seja, não exclui os registros da tabela FILHA pela trigger. Eu criei uma FK na tabela Filha com referência a tabela PAI, apaguei a trigger do sistema e funcionou. Assim exclui tudo corretamente.

O problema é que o sistema é gigantesco, e como a base de dados foi montada dessa forma ficaria complicado criar todas as FK´s agora... eu queria saber se existe alguma configuração no ADO para suportar a exclusão dos itens da tabela FILHA pela TRIGGER criada na tabela PAI.


Mtomazelli

Mtomazelli

Responder

Posts

06/08/2009

Willian

Antes do problema em si, deixa eu tirar uma dúvida: vc estudou no Cabral (em Sertãozinho/SP) e trabalhou na Star Game (locadora de jogos)? Se for... então aqui é Willian que estudou e trabalhou com vc! :D Se não for, desculpe :oops: mas o sobrenome e a cidade do perfil são idênticos aos de um amigo que não vejo há muito tempo....

Seguinte: essa TRIGGER de delete que vc tem na PAI é uma trigger do BANCO que dispara um evento, é simplesmente o relacionamento MASTER/DETAIL gerenciado pelo Delphi ou é algum código específico que vc programou no evento da PAI?

Eu tive um problema parecido há muito tempo e talvez possa te ajudar. Me informa aí sobre como vc está fazendo o processo de exclusão.


Responder

Gostei + 0

06/08/2009

Mtomazelli

hahaha, Fala William... blza ? Sou eu mesmo... hahaha que coincidência heim ? rssss Sem falar que trabalhamos juntos na Multilógica também heim ??? rssss Tudo bem com vc ? anota meu email aí...
marcio@smarapd.com.br

Isso mesmo, a minha tabela PAI possui uma TRIGGER de DELEÇÃO no banco de dados... para apagar os registros da Tabela Filha... só isso... dispara um DELETE nos dados da FILHA... e é aí que o ADO me dá o tal problema... a base aqui é muito antiga e não utilizam Foreign Key, que seria o correto né ? por isso estou tentando achar alguma solução para isso. Eu realizei alguns testes e alterei a tabela, criei a FK com DELETE CASCADE... apaguei a TRIGGER da tabela PAI e funciona corretamente no ADO, sem dar erros... o problema seria alterar o sistema inteiro, que é gigantesco, e possui a base ´mau elaborada´... rs

Abraço... manda um email pra eu anotar o seu aqui pra gente conversar...

até mais.


Responder

Gostei + 0

06/08/2009

Willian

Mundo pequeno! :wink:

Seguinte: já tentou manter o esquema da TRIGGER mas no WHERE dela vc passar vários campos como parâmetros?

Tive um problema idêntico há anos e resolvi assim como te expliquei: o que dá a entender é que pelo WHERE do delete da trigger vários registros satisfazem a condição então talvez passando mais parâmetros vc consiga especificar uma única linha.

Se isso não der certo me avisa que eu tenho outras idéias.

Abraços,

Willian

(P.S.: Saudades das partidas de Mega Man!)


Responder

Gostei + 0

06/08/2009

Mtomazelli

Então, na verdade são vários itens mesmo que devem ser excluídos... imagina um cabeçalho de nota fiscal e seus itens, se eu excluir a nota os itens devem ser excluidos, pelo ID da tabela. São várias linhas no delete que vão ser excluídas realmente. ( Isso foi um exemplo, na verdade não é tabela de NF / Itens, mas é parecido... )


Responder

Gostei + 0

06/08/2009

Elip2008

Deixa eu t perguntar, vc configurou o banco d dados master detail com as ligaçoes on delete [cascade]. Assim vc naum vai precisar d trigger.
Caso vc esteja utilizando datasetprovider do Pai precisa ativar na Propriedade do mesmo Options [poCascadeDelete]. entaum vc naum precisar tentar deletar da tabela filha.


Responder

Gostei + 0

07/08/2009

Mtomazelli

Bom dia ! Primeiramente obrigado pela ajuda.

Eu não uso provider... eu uso o TADOQuery.

Na verdade, eu criei sim a FK com DELETE CASCADE... assim funciona perfeitamente... o problema é que a empresa onde trabalho tem um banco de dados de um sistema gigantesco... e não teria como sair criando FK em tudo... queria saber se no TADOQuery existe alguma configuração que permita o funcionamento da TRIGGER para DELEÇÃO dos registros da tabela FILHA, pois o banco é todo elaborado com esse tipo de TRIGGER...

OBS: Utilizando database c/ BDE funciona normalmente. Eu utilizo o TQUERY e funciona. Estamos tentando converter tudo para ADO... por isso estamos com esse problema.


Responder

Gostei + 0

07/08/2009

Elip2008

entaum eh soh vc deletar normalmente. no meu comando sql fik assim:

delete from tabela_filha where
idPai = id_da_tabela_pai.

entaum todos serão deletados. testei com varios registros.


Responder

Gostei + 0

07/08/2009

Mtomazelli

Sim, na minha TRIGGER da Tabela Pai, tem o DELETE da Tabela FILHA, conforme o registro que estou excluindo da PAI...

Esse DELETE que vc está me falando... vc fez na TRIGGER também ? Ou fez em uma TADOQuery separada ??? Se for assim, realmente, vai funcionar... o que eu quero é excluir a FILHA via TRIGGER da PAI...


Responder

Gostei + 0

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

Aceitar