Fórum Master / Detail no delphi/interbase. #369101
16/03/2009
0
Fausto.malheiros
Curtir tópico
+ 0Posts
16/03/2009
Aeciovc
vc fala em relação ao Cascade do delete?
flw!!
Gostei + 0
16/03/2009
Fausto.malheiros
Então preciso IGNORAR essa condição...Preciso excluir aquela tabela sem que o INTERBASE me retorne erro.
Gostei + 0
17/03/2009
Mdv
Não conheço alguma maneira de fazer isso sem excluir tambem os registros filhos antes de excluir o registro pai.
att. MDV
Gostei + 0
17/03/2009
Marco Salles
Ao excluir um Regsitro vc receberá a mensagem :
[b:b193971846]´cannot Delete Master Records With Details´[/b:b193971846]
Indicando que não é possivel excluir um Registro Mestre se ele possui Detalhes.
Porem para que isto seje permitido altere a sub-Propriedade poCasacadeDeletes da Propriedade Options do DataSetProvider
claro que para isto funcionar , no Script de criação do Banco , nas definição das chaves estrangeiras , que o Registro das Tabelas ESPECIFICAS <GEN/ESP> serão excluidas automaticamente.
Gostei + 0
17/03/2009
Pestana_
Você esta querendo excluir o registro da tabela pai mesmo que contenha registros na tabela filho? se for isso, então você pode definir como on delete cascade na tabela filho.
exemplo:
create table tabelaPai( id integer not null, campo1 varchar(50), campo2 numeric(10,2), constraint pk_tabelaPai primary key (id)); create table tabelaFilho( id integer not null, idPai integer not null, campo1 varchar(30), campo2 integer, constraint pk_tabelaFilho primary key (id), constraint fk_tabelaFilho_IdPai foreign key(idPai) references tabelaPai(id) on delete cascade);
Com isso você pode excluir o registro da tabela pai sem se preocupar se existe registro na tabela filho, mesmo que tenha registros filhos o mesmo será deletado automaticamente pelo o banco.
Agora se você não quer definir como on delete cascade e quer deletar registros na tabela pai e sem deletar registros na tabela filho isso não tem lógica e o próprio banco SGBD não aceita esse tipo de coisa.
Gostei + 0
17/03/2009
Fausto.malheiros
É isso mesmo Pestana. Foi uma falha na modelagem do banco. O Banco de dados esta corretissimo em não permitir isso...mas devido ás circunstancias imaginei ter algum jeito de ´driblar´ o banco nessa questão....mas felizmente ou infelizmente não sei....parece não ter jeito.
Gostei + 0
17/03/2009
Pestana_
Você poderia tentar deletar a constraint da tabela filha (constraint fk), com isso todos os regstros da tabela filha perderam a ´referência´ com a tabela pai, mas com este jeito você consegue deletar o registro da tabela pai (ou ex tabela pai :D) sem nenhum problema. Feito isso, é só relacionar os registros da tabela filha com a tabela pai novamente.
boa sorte!
Gostei + 0
17/03/2009
Pestana_
alter table nomeTabela drop constraint nomeConstraint
Gostei + 0
17/03/2009
Fausto.malheiros
Se isso não me trazer problema fisico no banco, esta RESOLVIDO...por que problema logico sei que podera me dar.
Blz...Vlw pela dica. :idea: :idea: :idea:
Gostei + 0
18/03/2009
Pestana_
Depois que você deletar os registros da tabela pai, você pode criar a constraint novamente na tabela filha tornando o campo chave estrangeira.
alter table tabelaFilha add constraint fk_tabelaFilha_idPai foreing key (idPai) references tabelaPai(id)
Gostei + 0
18/03/2009
Fausto.malheiros
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)