Erro na aplicaçao mestre detalhe
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
alguem sabe o q esta acontecendo ? como resolver isso ?
Grato
Guilherme
gborges_13@yahoo.com.br
Guilherme
Curtidas 0
Respostas
Gandalf.nho
23/02/2005
Você precisa excluir primeiro os registros dependentes antes de excluir o atual, por causa da integridade.
GOSTEI 0
Guilherme
23/02/2005
mas isso nunca aconteceu quando usava o paradox com interbase nao tem como fazer isso ?
GOSTEI 0
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
23/02/2005
Como faço para ficar como quando usso o banco de dados paradox ?
GOSTEI 0
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
23/02/2005
Ok , mas como faço esse delete cascate ?
GOSTEI 0
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
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;
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
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
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
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
23/02/2005
Olá
Basta você colocar o seu código no OnExecute do objeto TDataSetDelete.
Abraços
Basta você colocar o seu código no OnExecute do objeto TDataSetDelete.
Abraços
GOSTEI 0
Guilherme
23/02/2005
Nao itendi o q vc quiz dizer !!!!!!
Tdatesetdelete ????????
Tdatesetdelete ????????
GOSTEI 0
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
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
23/02/2005
VAleu galera
GOSTEI 0