Problema com chave primaria!
Estou tentando apagar o registro_detalhe e esta dando erro no indice com a tabela_master. O que fazer?
´Violation of FOREIGN_KEY constraint indice table on tabela_master´
Delphi6, interbase 6
´Violation of FOREIGN_KEY constraint indice table on tabela_master´
Delphi6, interbase 6
Fausto.malheiros
Curtidas 0
Respostas
Diegus
19/05/2009
Coloca aqui como vc ta fazendo esse procedimento de exclusão...
GOSTEI 0
.lg.
19/05/2009
Sua tabela faz ligação com alguma outra tabela.
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!?
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
Fausto.malheiros
19/05/2009
Registro_detalhe é uma tabela!?
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
.lg.
19/05/2009
Qual comando sql tem dentro da query [b:8b0b707b10]QryExcluiDivida[/b:8b0b707b10]?
GOSTEI 0
Fausto.malheiros
19/05/2009
delete from divida_ativa d
where d.ano_exercicio = :ano_exercicio
and not Exists(select * from parcelamento_inscricao i
where i.ano_exercicio = d.ano_exercicio
and i.inscricao = d.inscricao
and not exists(select * from parcelas p
where p.codigo_parcelamento = i.codigo_parcelamento
and not p.data_pagamento is null) )
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.
DtmDados02.QryExcluiDivida.Close;
DtmDados02.QryExcluiDivida.ParamByName(´ano_exercicio´).AsInteger := StrToInt([b:b1f32f9773]EdtAnoExercicio.Text[/b:b1f32f9773]);
DtmDados02.QryExcluiDivida.ExecSQL;
GOSTEI 0
.lg.
19/05/2009
Desculpe não ter repondido na sexta em diante... a partir das 5:30pm meu fds é totalmente apertado. Seria bom se os fds tivessem 3 dias. Mas... voltemos ao seu problema.
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?
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
Fausto.malheiros
19/05/2009
Blz .Ig.!
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?
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
.lg.
19/05/2009
Da uma olhada no relacionamento entre a tabela PARCELA e a tabela PARCELAMENTO.
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.
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