Sobra de Registro
Estou excluindo registros de um tabela ´Filha´.
Exemplo: Tabela1=mãe, Tabela2=filha, elas estão relacionadas, quando for excluir um registro da tabela mãe tem que excluir os registro que estão relacionados na tabela filha.
Quando faço o teste com o Delphi aberto funciona, quando ele esta fechado não funciona o que será isto ?
Coloquei o código abaixo no evento BeforeDelete da tabela mãe:
[color=blue:10c38fca14]Table.First;
While (not Caa009.Eof) do
begin
Caa009.Delete;
Caa009.Open;[/color:10c38fca14][color=red:10c38fca14] {coloquei isto aqui porque antes a condição EOF se perdia }[/color:10c38fca14]
[color=blue:10c38fca14]Caa009.First;
end;[/color:10c38fca14]
Exemplo: Tabela1=mãe, Tabela2=filha, elas estão relacionadas, quando for excluir um registro da tabela mãe tem que excluir os registro que estão relacionados na tabela filha.
Quando faço o teste com o Delphi aberto funciona, quando ele esta fechado não funciona o que será isto ?
Coloquei o código abaixo no evento BeforeDelete da tabela mãe:
[color=blue:10c38fca14]Table.First;
While (not Caa009.Eof) do
begin
Caa009.Delete;
Caa009.Open;[/color:10c38fca14][color=red:10c38fca14] {coloquei isto aqui porque antes a condição EOF se perdia }[/color:10c38fca14]
[color=blue:10c38fca14]Caa009.First;
end;[/color:10c38fca14]
Jeanfiamoncini
Curtidas 0
Respostas
Josemarlourenco
30/05/2003
Se o seu código for realmente este, está errado.
Mas, de qualquer maneira, acho que o mais fácil (e rápido) é usar uma Query.
Vc pode fazer o seguinte:
1) Coloque uma TQuery (ou o componente query da palheta que estiver usando) no seu projeto;
2) No evento beforedelete da tabela mãe, escreva o seguinte código:
Begin
QueryFilha.Close;
QueryFilha.SQL.Clear;
QueryFilha.SQL.Add(´DELETE FROM NomeDaTabelaFilha ´);
QueryFilha.SQL.Add(´WHERE CampoChave = :parametro ´);
QueryFilha.Parameters[0].Value := ValorDoCampoChaveDaTabelaMae;
QueryFilha.ExecSql;
End;
Se por acaso houver algum na cláusula ´Parameters[0]´, descubra qual a propriedade equivalente no componente que estiver usando, já que o nome pode variar de componente para componente.
Não esqueça de substituir:
- QueryFilha: Pelo nome da query que for usar;
- NomeDaTabelaFilha: Pelo nome da tabela filha;
- CampoChave: Pelo nome do campo chave;
- ValorDoCampoChaveDaTabelaMae: Pelo valor do campo chave da tabela mãe.
Josemar
Mas, de qualquer maneira, acho que o mais fácil (e rápido) é usar uma Query.
Vc pode fazer o seguinte:
1) Coloque uma TQuery (ou o componente query da palheta que estiver usando) no seu projeto;
2) No evento beforedelete da tabela mãe, escreva o seguinte código:
Begin
QueryFilha.Close;
QueryFilha.SQL.Clear;
QueryFilha.SQL.Add(´DELETE FROM NomeDaTabelaFilha ´);
QueryFilha.SQL.Add(´WHERE CampoChave = :parametro ´);
QueryFilha.Parameters[0].Value := ValorDoCampoChaveDaTabelaMae;
QueryFilha.ExecSql;
End;
Se por acaso houver algum na cláusula ´Parameters[0]´, descubra qual a propriedade equivalente no componente que estiver usando, já que o nome pode variar de componente para componente.
Não esqueça de substituir:
- QueryFilha: Pelo nome da query que for usar;
- NomeDaTabelaFilha: Pelo nome da tabela filha;
- CampoChave: Pelo nome do campo chave;
- ValorDoCampoChaveDaTabelaMae: Pelo valor do campo chave da tabela mãe.
Josemar
GOSTEI 0
Fred
30/05/2003
bom se voce estiver um banco relacional como o interbase por ex. a melhor maneira seria na hora de criar chave estrangeira da tabela filha voce colocar o ´ON DELETE CASCADE´ ai sempre que deleta um registro mae os filhos serao apagados. Ex;
ALTER TABLE ´TABELAFILHA´ ADD CONSTRAINT ´FK_NOME´ FOREIGN KEY (´COD´) REFERENCES TABELAMAE (´COD´) ON UPDATE CASCADE ON DELETE CASCADE;
8)
ALTER TABLE ´TABELAFILHA´ ADD CONSTRAINT ´FK_NOME´ FOREIGN KEY (´COD´) REFERENCES TABELAMAE (´COD´) ON UPDATE CASCADE ON DELETE CASCADE;
8)
GOSTEI 0