Erro na aplicaçao mestre detalhe

Delphi

23/02/2005

E ai pessoal é o seguinte tenho uma aplicaçao onde tem registro mestre detalhe ate ai tudo ok , mas quando tento escluir algum registro q ja tem detalhes cadastrodos gera o seguinte erro : violation of foreing key constraint ´integ_17´ on table ´Banco_filho´
alguem sabe o q esta acontecendo ? como resolver isso ?


Grato
Guilherme
gborges_13@yahoo.com.br


Guilherme

Guilherme

Curtidas 0

Respostas

Gandalf.nho

Gandalf.nho

23/02/2005

Você precisa excluir primeiro os registros dependentes antes de excluir o atual, por causa da integridade.


GOSTEI 0
Guilherme

Guilherme

23/02/2005

mas isso nunca aconteceu quando usava o paradox com interbase nao tem como fazer isso ?


GOSTEI 0
Gandalf.nho

Gandalf.nho

23/02/2005

Ao criar o relacionamento entre as tabelas declare como DELETE CASCADE ou crie uma trigger para fazer essa exclusão por você


GOSTEI 0
Guilherme

Guilherme

23/02/2005

Como faço para ficar como quando usso o banco de dados paradox ?


GOSTEI 0
Gandalf.nho

Gandalf.nho

23/02/2005

Como faço para ficar como quando usso o banco de dados paradox ?


Na verdade isso não deveria funcionar no Paradox, já que ele não tem DELETE CASCADE, provavelmente deve haver um código na aplicação que exclui os registros filhos e só depois o pai.


GOSTEI 0
Guilherme

Guilherme

23/02/2005

Ok , mas como faço esse delete cascate ?


GOSTEI 0
Gandalf.nho

Gandalf.nho

23/02/2005

Quando você cria a integridade relacional entre duas tabelas coloque ON DELETE CASCADE no final da linha.


GOSTEI 0
Guilherme

Guilherme

23/02/2005

como nao conseguir fazer o on delete cascade estou tentando fazer do seguinte modo no evento before delete

begin
TBBanco_Filho.First;
TBBanco_Filho.DisableControls;
while not TBBanco_Filho.Eof do begin
if TBBanco_FilhoCODCAD.Value = TBBanco_PaiCODCAD.Value then begin
TBBanco_Filho.Delete;
TBBanco_Filho.next;
end else
TBBanco_Filho.next;
end;
TBBanco_Filho.EnableControls;
TBBanco_Pai.Delete;
end;

mas mesmo assim nao esta funcionando gostaria de saber como eu faço para cancelar o comando delete ? para q fique assim :

begin
tbbanco_pai.cancelaocomandodelete;
TBBanco_Filho.First;
TBBanco_Filho.DisableControls;
while not TBBanco_Filho.Eof do begin
if TBBanco_FilhoCODCAD.Value = TBBanco_PaiCODCAD.Value then begin
TBBanco_Filho.Delete;
TBBanco_Filho.next;
end else
TBBanco_Filho.next;
end;
TBBanco_Filho.EnableControls;
TBBanco_Pai.Delete;
end;


GOSTEI 0
Gandalf.nho

Gandalf.nho

23/02/2005

No meu caso eu não uso o evento BeforeDelete e coloco o código diretamente no botão de exclusão.


GOSTEI 0
Guilherme

Guilherme

23/02/2005

minha pergunta foi outra .....

Gostaria de saber como faço para cancelar o delete pois eu uso o componente action list para fazer a funçao do dbnavigator


obrigado


GOSTEI 0
Tnaires

Tnaires

23/02/2005

Olá
Basta você colocar o seu código no OnExecute do objeto TDataSetDelete.
Abraços


GOSTEI 0
Guilherme

Guilherme

23/02/2005

Nao itendi o q vc quiz dizer !!!!!!
Tdatesetdelete ????????


GOSTEI 0
Tnaires

Tnaires

23/02/2005

Olá
Vc não falou q estava usando ActionList? A ação q implementa a exclusão de um registro é um objeto TDataSetDelete. Aí basta vc colocar o código q vc falou no evento OnExecute da ação.
Abraços


GOSTEI 0
Guilherme

Guilherme

23/02/2005

VAleu galera


GOSTEI 0
POSTAR