Fórum Problema com chave primaria! #370568
19/05/2009
0
´Violation of FOREIGN_KEY constraint indice table on tabela_master´
Delphi6, interbase 6
Fausto.malheiros
Curtir tópico
+ 0Posts
22/05/2009
Diegus
Gostei + 0
22/05/2009
.lg.
Você está tentando apagar um registro onde ele tem dados relacionado em outra tabela.
Verifica a se a tabela tem integridade estrutural com outras tabelas. Se tiver... e houver dados... vc não vai conseguir apagar os campos.
so 1 dúvida:
Registro_detalhe é uma tabela!?
Gostei + 0
22/05/2009
Fausto.malheiros
O registro_detalhe esta contido dentro da tabela cliente.
exemplo: Quando vou apagar o cliente ele da um erro na tabela_master, de cidade. Se eu estivesse excluindo a cidade codigo = 20, concordo que daria o erro, pois tem varios clientes cadastrado na cidade codigo = 20, mas estou fazendo o contrario. Estou escluindo o cliente, não poderia dar esse erro.
codigo abaixo:
[b:304e366fa3][color=red:304e366fa3]Essa qry tem a função de buscar somente os codigos de parcelamento[/color:304e366fa3][/b:304e366fa3]
QryAtualizaParcelamento.Close;
QryAtualizaParcelamento.Params[0].AsInteger := StrToInt(EdtAnoExercicio.Text);
QryAtualizaParcelamento.Open;
while not QryAtualizaParcelamento.Eof do
begin
QryTrabalho.Close;
QryTrabalho.SQL.Clear;
[b:304e366fa3][color=red:304e366fa3]essa tabela é detalhe da tabela de baixo[/color:304e366fa3][/b:304e366fa3]
QryTrabalho.SQL.add(´delete from [color=orange:304e366fa3]parcelamento_inscricao[/color:304e366fa3] p ´);
QryTrabalho.SQL.add(´where p.codigo_parcelamento = ´ + QryAtualizaParcelamento.FieldByName(´codigo_parcelamento´).AsString);
QryTrabalho.ExecSQL;
QryAtualizaParcelamento.Next;
end;
StbMensagem.SimpleText := ´Aguarde, pesquisando parcelas... ´;
self.Update;
QryAtualizaParcelamento.First;
while not QryAtualizaParcelamento.Eof do
begin
QryTrabalho.Close;
QryTrabalho.SQL.Clear;
[b:304e366fa3][color=red:304e366fa3]essa tabela é detalhe da tabela de baixo que preciso deletar[/color:304e366fa3][/b:304e366fa3]
QryTrabalho.SQL.add(´delete from [color=orange:304e366fa3]parcelas[/color:304e366fa3] p ´);
QryTrabalho.SQL.add(´where p.codigo_parcelamento = ´ + QryAtualizaParcelamento.FieldByName(´codigo_parcelamento´).AsString);
QryTrabalho.ExecSQL;
QryAtualizaParcelamento.Next;
end;
StbMensagem.SimpleText := ´Aguarde, atualizando BANCO DE DADOS... ´;
self.Update;
DtmDados.SQLBanco.Commit(TD);
StbMensagem.SimpleText := ´Aguarde, excluindo DÍVIDAS... ´;
self.Update;
DtmDados02.QryExcluiDivida.Close;
DtmDados02.QryExcluiDivida.ParamByName(´ano_exercicio´).AsInteger := StrToInt(EdtAnoExercicio.Text);
[b:304e366fa3][color=red:304e366fa3]aqui esta dando o erro em relação ás tabelas excluidas acima[/color:304e366fa3][/b:304e366fa3]
DtmDados02.QryExcluiDivida.ExecSQL;
Gostei + 0
22/05/2009
.lg.
Gostei + 0
22/05/2009
Fausto.malheiros
Eu só posso excluir uma divida, se não tiver nenhum parcelamento em aberto.
Por isso no codigo eu excluo primeiro os parcelamentos e suas parcelas, usando como parametro o ano_exercicio.
Uma vez excluidas as parcelas, dai sim, excluo as dividas, usando o mesmo parametro, ano_exercicio.
Gostei + 0
25/05/2009
.lg.
Estou meio que entre alguns palpites...
Para eliminar os meus palpites... Você poderia mostrar o relacionamento entre as tabelas desse procedimento!?
Eis as tabelas que enxergei no seu procedimento:
- DIVIDA_ATIVA
- PARCELAMENTO_INSCRICAO
- PARCELAS
Só mostre nas tabelas as colunas que tiverem foreign Key ( vindo de qual tabela ) e as colunas com Primary Key. Não precisa mostrar as demais colunas.
Tem jeito?
Gostei + 0
25/05/2009
Fausto.malheiros
Sem problema algum amigo! Eu que agradeço o fato de vcs estar me ajudando.
ocorreu o seguinte: quando eu estava montando pra vc o relacionamento das tabelas, surgiu uma quarta tabela nessa coisa toda. A tabela PARCELAS.
Como eu disse anteriormente, não fui eu que desenvolvi esse sistema e estou apanhando em algumas coisas.
Achoque o problema esta aqui:
(violation of FOREIGN KEY constraint ´FK_PARCELAS_PARCELAMENTO´ [b:b1a5a07b20]on table ´PARCELAS[/b:b1a5a07b20]´)
Quando acorre essa mensagem de erro acima, é por que eu tenho que apagar ´primeiro´ a tabela que esta no [b:b1a5a07b20]´on table ´tabela_qualquer´[/b:b1a5a07b20] , depois apagar a tabela corrente certo?
Gostei + 0
25/05/2009
.lg.
Pelo nome da foreign key. O problema está aí. Dá uma olhada no que essa FK restringe entre as 2 tabelas e veja o que você está tentando fazer.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)