Auto Incremento não funciona

Firebird

03/09/2010

Fala Galeraaa,
Estou tendo um problema com o meu auto incremento do meu banco.
tenho minha tabela e assim quando vou inserindo registro ele vai incrementando no meu campo ID da minha tabela mas o incremento chega uma hora e para tipo assim,  na minha tabela o id está em 526 mas no meu generator do incremento ele está em 523 assim dando conflito e não fazendo o registro em minha base.
Alguem poderia me ajudar.

Valeuu 
Clei Flavio

Clei Martins

Clei Martins

Curtidas 0

Respostas

Eduardo Vilaro

Eduardo Vilaro

03/09/2010

A dica seria 1 - Observar se no campo ID de seu ClientDataSet em FieldEditor o required está como false. 2 - No ClientDataSet no evento OnNewRecord vc esta passando algum ID ??? 3 - No Gererator do Seu DB  está identico ao número de registros existentes ?? 4- Pode ser feito de duas formas   4_1 - Passar um ID No OnNewRecord usando o generator do FireBird usando uma function   4_2 -  Passar no OnNewRecord  0  e usar StoreProcedure 5- Existiu um  caso que fiz um insert via código pelo IBEXpert o Gererator não foi acionado ficando com 0 resultando um transtrono imenso. 6- Usa  Transação [ Comit  / RollBack ] ?   7-  Qual firebird está usando ?  Delphi Versão ?   8 - Se usou alguns dos itens acima ?      Diagnosticar erros ou Problemas gerados devemos primeiramente descrever de que forma está usando concorda ?  fica muito mais facil te ajudar.
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2010

Fiz uma função que talvez te ajude (baseada na conexão dbexpress):   //Cabeçalho da função function GeneratorID (aName: string; Connection: TSQLConnection; Incrementa: Boolean): integer;     //função function GeneratorID (aName: string; Connection: TSQLConnection;
  Incrementa: Boolean): integer;
var
  Qry: TSQLQuery;
begin
  Qry := TSQLQuery.Create(nil);
  try
    Qry.SQLConnection := Connection;
    if Incrementa then
      Qry.SQL.Add(
        'SELECT GEN_ID('+aName+', 1) FROM RDB$DATABASE')
    else
      Qry.SQL.Add(
        'SELECT GEN_ID('+aName+', 0) FROM RDB$DATABASE');
    Qry.Open;
    Result := Qry.Fields[0].AsInteger;
  finally
    FreeAndNil(Qry);
  end;
end;   Qualquer coisa estou à disposição!!   Atenciosamente,   Emanoel Deivison Recife - PE
GOSTEI 0
Clei Martins

Clei Martins

03/09/2010

Bom vamos responder !!


1 - Observar se no campo ID de seu ClientDataSet em FieldEditor o required está como false.
 - sim está false.
2 - No ClientDataSet no evento OnNewRecord vc esta passando algum ID ???
 - não estou passando nenhum valor nesse evento.
3 - No Gererator do Seu DB  está identico ao número de registros existentes ??
Então, ai que é o problema, o meu generator está parando de gerar numero porem ai que dá pau, pq quando faço uma inserção de registro ele acusa dados duplicados, pq meu generator está parado.
4- Pode ser feito de duas formas  4_1 - Passar um ID No OnNewRecord usando o generator do FireBird usando uma function  4_2 -  Passar no OnNewRecord  0  e usar StoreProcedure5- Existiu um  caso que fiz um insert via código pelo IBEXpert o Gererator não foi acionado ficando com 0 resultando um transtrono imenso.6- Usa  Transação [ Comit  / RollBack ] ?
Não 7-  Qual firebird está usando ?  Delphi Versão ?
Firebird 2.0 e Delphi 7 8 - Se usou alguns dos itens acima ?  Diagnosticar erros ou Problemas gerados devemos primeiramente descrever de que forma está usando concorda ?  fica muito mais facil te ajudar.


Será que com essas informações vc consegue me ajudar ?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

03/09/2010

altere seu generator de modo a ser maior que o maior id da sua tabela.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

03/09/2010

Você deve ajustaro generator´para ficar igual ao do id da sua tabela. Depois utilize a função que o Emanoel passou sempre no Before Post das suas tabelas. Se quiser eliminar os teus generators te passo uma função que incrementa pelo Id de suas tabelas.
GOSTEI 0
Clei Martins

Clei Martins

03/09/2010


 

Galera seguinte, alterar o generator para maio que a minha tabela eu  fiz isso varias vezes porem o sistema roda normalmente mas depois o problema volta, o meu generator para ( " Ele meio que volta ") mas o meu id passa, tipo assim.
Tabela - ID = 2450  Generator = 2450 ai o sistema ta rodando normal derrepente fica assimTabela - ID = 2500  Generator = 2498  Ai que dá o problema minha tabela não consegue inserir registro porque é chave primaria e ele vai inserir um id que já existe.
Eu queria saber o porque isso está acontecendo e como acertar isso ?

GOSTEI 0
Clei Martins

Clei Martins

03/09/2010

Galera percebi uma coisa em  minha base e acho que pode ajudar a conclusão desse post.
 

Notei que  meus dados na minha tabela ficam aleatorios muito estranho acho que ai pode estar o problema.
Exemplo:
ID12342005671986..199
Ai vou ver meu generator e está no 200
alguem sabe porque ?
GOSTEI 0
POSTAR