Auto Incremento não funciona
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
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
Curtidas 0
Respostas
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
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
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
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 ?
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
03/09/2010
altere seu generator de modo a ser maior que o maior id da sua tabela.
GOSTEI 0
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
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
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 ?
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