Deletar cadastros e vincular movimentações vinculadas a outro registro

Delphi

09/08/2012

Galera

Tenho uma tela CadPadrao, onde herdo ela para todos os cadastros.
Funciona perfeitamente, Insert, Edit, Delete, pesquisa etc.
Porém quanto vou deletar por exemplo um produto que já tem movimentações vinculadas, eu tive que criar um código próprio para produtos, para procurar um novo produto para substituir o que está sendo deletado.
         if Application.MessageBox(PChar(Erro: Registro deve estar vínculado a alguma movimentação! + #13 + Deseja substituir as movimentações desse código por outro?), PChar(NomeSistema), MB_YESNO + MB_ICONQUESTION) = mrYes then
         begin
             CodigoPesquisa := Pesquisa(View, CampoID);
             if CodigoPesquisa   then
             begin
                if Tabela = CADPRODUTOS_SERVICOS then
                begin
                   ExecutarSQL(update movnotasfiscais_itens set id_produto_servico =  + QuotedStr(CodigoPesquisa)+  where id_produto_servico =  + QuotedStr(cdsMaster.FieldByName(CampoID).AsString) +  and id_empresa =  + IntToStr(CodigoEmpresa));
                end;
                cdsMaster.Delete;
                cdsMaster.ApplyUpdates(0);
             end;
         end;


Como é uma tela genérica, queria saber se tem uma maneira de fazer a mudança sem precisar fazer update de tabela em tabela que necessite do produto.

Aguardo
Huelbert Oliveira

Huelbert Oliveira

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

09/08/2012

Rapaz, nesse caso eu sugiro que você use um trigger nessa tabela que, quando o campo em questão for alterado, atualize todas as demais tabelas que usam esse produto.
GOSTEI 0
Huelbert Oliveira

Huelbert Oliveira

09/08/2012

mesmo na trigger eu não consigo mudar as movimentações para outro produto.
queria um código que atualiza todas as tabelas sem precisar setar uma por uma.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

09/08/2012

Vixe, cara, aí fica meio difícil. Você quer atualizar todas as tabelas que utilizem esse campo?

Acho que para isso você precisaria fazer uma pesquisa nos objetos do banco e localizar todas as tabelas que contém esse campo. Depois gerar um script pra cada uma e executar (a partir doo Delphi).

Não acho que seja viável. Generalizar é bom, mas tem limites. Com isso você pode acabar tendo confusões no futuro.
GOSTEI 0
POSTAR