Autor
Mensagem
Informações sobre o chamado:
Criado em: 3/9/2010 5:04:32 PM
Status deste chamado: em andamento
Última ação ref. este chamado: Chamado resp. pelo usuario
Ver histórico do chamado
Criado em: 3/9/2010 5:04:32 PM
Status deste chamado: em andamento
Última ação ref. este chamado: Chamado resp. pelo usuario
Ver histórico do chamado
#ID: 385651
Postado em: 3/9/2010 5:04:32 PM
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
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.
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;
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
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 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 ] ?
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 ?
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 assim
Tabela - 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 ?
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:
ID
1
2
3
4
200
5
6
7
198
6
.
.
199
Ai vou ver meu generator e está no 200
alguem sabe porque ?







