Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
maivo Novato
Registrado: Segunda-Feira, 3 de Abril de 2006 Mensagens: 66 Localização: Rio Grande do Sul
|
Enviada: Dom Fev 06, 2011 7:25 pm Assunto: Key Violation |
|
|
Boa tarde, pesquisei mas não encontrei a solução..até encontrei na net pessoas com o exato problema, mas sem solução por isso criei um novo tópico.
Estou desenvolvendo um sistema de FP onde são inseridos códigos em uma tabela, sendo que ao inserir o segundo registro me retorna a mensagem de violação de chave.
O mais estranho é que começou a aparecer de uma hora para outra isso...se eu incluir UM registro, sair do sistema e entrar, consigo incluir normalmente, (incluo UM ,saio , volto , incluo OUTRO e assim por diante) o problema é quando vou incluir mais de um na sequência.
Logo após o CDSTabela.Post eu dou CDSTabela.Applyupdates(0);
Se alguém poder me ajudar, agradeceria tenho que entregar esse sistema e estou parado neste ponto.
Obrigado. |
|
Voltar ao Topo |
|
|
rafmattos Colaborador
Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Seg Fev 07, 2011 8:26 am Assunto: |
|
|
pq vc ta repetindo o código da chave primaria, como vc trabalha?
vc digita o código ou tem um Generator? como vc faz? |
|
Voltar ao Topo |
|
|
maivo Novato
Registrado: Segunda-Feira, 3 de Abril de 2006 Mensagens: 66 Localização: Rio Grande do Sul
|
Enviada: Seg Fev 07, 2011 10:13 am Assunto: |
|
|
É criada através de um generator .. autoincremento.. parece que alguma coisa corrompeu a chave primária, eu inclusive para testes coloquei em um label a chave anterior para ver e realmente está errada.. vou tentar explicar melhor:
Abrindo pelo Ibexpert a tabela eu vejo
ID
29
30
31
32
33
34
35
-> próximo seria o 36
Antes de dar o insert (só para teste) eu mandei exibir em um label o "last" id da tabela, ordenada pelo campo ID .. e me retorna "33" , sendo que como disse, consigo visualisar pe IBexpert que o último ID é o 35.
Existe alguma forma de reindexar? recriar a chave primária? meu medo é que isso ocorra no cliente com o banco cheio de dados..
Obrigado. |
|
Voltar ao Topo |
|
|
rafmattos Colaborador
Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Seg Fev 07, 2011 10:26 am Assunto: |
|
|
vc vai ter q setar o valor correto de novo
Código: |
SET GENERATOR seu_generator TO 35
|
|
|
Voltar ao Topo |
|
|
maivo Novato
Registrado: Segunda-Feira, 3 de Abril de 2006 Mensagens: 66 Localização: Rio Grande do Sul
|
Enviada: Seg Fev 07, 2011 10:50 am Assunto: |
|
|
eu dei um drop na tabela e recriei tudo... mas fiquei agora com um pé atrás.. preciso descobrir o que fiz de errado para causar isso.. pois quando o sistema estiver rodando no cliente não pode acontecer...
Existe alguma rotina que faça uma reindexação? recriação da chave primária, algo assim? |
|
Voltar ao Topo |
|
|
rvercesi Mestre
Registrado: Segunda-Feira, 29 de Novembro de 2010 Mensagens: 912 Localização: Curitiba / PR
|
Enviada: Seg Fev 07, 2011 10:59 am Assunto: |
|
|
O banco de dados não vai se perder nunca!
Você deve ter em algum momento alterado o valor do Generator!
Procure pelo teu sistema se em algum momento vc altera o valor do teu campo de ID.
Só isso que pode ter ocorrido! |
|
Voltar ao Topo |
|
|
rafmattos Colaborador
Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Seg Fev 07, 2011 11:01 am Assunto: |
|
|
ou na alteração vc pode ter alterado o código de algum registro ness tabela |
|
Voltar ao Topo |
|
|
maivo Novato
Registrado: Segunda-Feira, 3 de Abril de 2006 Mensagens: 66 Localização: Rio Grande do Sul
|
Enviada: Seg Fev 07, 2011 11:51 am Assunto: |
|
|
em nenhum momento dentro do sistema faço referência a esse campo..ele tá lá somente para ter uma chave primária...quando crio qualquer tabela já crio esse campo ID, integer, autoincremento, "create trigger", "create generator" e "create procedure" .. e esqueço...sempre fiz assim e nunca tive problemas..
Um detalhe que esqueci de salientar..o BD está de propósito em outro micro na minha rede local, optei por fazer assim porque o cliente vai usar somente em rede, então já estou desenvolvendo e testando em um ambiente parecido com o definitivo..se ocorreu alguma falha na rede poderia ter ocasionado esse problema? |
|
Voltar ao Topo |
|
|
maivo Novato
Registrado: Segunda-Feira, 3 de Abril de 2006 Mensagens: 66 Localização: Rio Grande do Sul
|
Enviada: Seg Fev 07, 2011 11:53 am Assunto: |
|
|
existe alguma técnica para minimizar esse tipo de problema? algum macete, cuidado, configuração, etc?
Como disse antes, a cada post eu dou um applyupdates(0) |
|
Voltar ao Topo |
|
|
rvercesi Mestre
Registrado: Segunda-Feira, 29 de Novembro de 2010 Mensagens: 912 Localização: Curitiba / PR
|
Enviada: Seg Fev 07, 2011 12:26 pm Assunto: |
|
|
Não, mesmo que a rede caia o próprio banco faz um rollback e cancela todas as atualizações que estavam pendentes.
Nunca vi um banco se perder no generator ou no COMMIT/ROLLBACK.
Talvez você tenha desligado o generator e inserido alguns registros sem ele e depois voltou a ligá-lo. |
|
Voltar ao Topo |
|
|
|