Fórum ADOQuery Trigger de DELETE para tabelas FILHAS #373186
06/08/2009
0
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
Curtir tópico
+ 0Posts
06/08/2009
Willian
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.
Gostei + 0
06/08/2009
Mtomazelli
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.
Gostei + 0
06/08/2009
Willian
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!)
Gostei + 0
06/08/2009
Mtomazelli
Gostei + 0
06/08/2009
Elip2008
Caso vc esteja utilizando datasetprovider do Pai precisa ativar na Propriedade do mesmo Options [poCascadeDelete]. entaum vc naum precisar tentar deletar da tabela filha.
Gostei + 0
07/08/2009
Mtomazelli
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.
Gostei + 0
07/08/2009
Elip2008
delete from tabela_filha where
idPai = id_da_tabela_pai.
entaum todos serão deletados. testei com varios registros.
Gostei + 0
07/08/2009
Mtomazelli
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...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)