Fórum Codigo sequencial em cadastros #8294

04/08/2009

0

Olá pessoal, preciso de uma ajuda de vc´s.   Criei uma tabela para capturar o sequencial de cadastro de cada tabela, tenho os campos   Tabela   Empresa   Sequencial       Dentro da tabela eu coloco o nome da tabela q irei usar no meu ClientDataSet, então eu queria incrementar um codigo nesta tabela e retornar para o eu cadastro.   Buscar o codigo q esta na tabela eu até consigo, mas incrementar ele antes de buscar, não estou conseguindo, alguma luz ?!!!!     Abraços,   Rogério    
Rogério Nascimento

Rogério Nascimento

Responder

Posts

05/08/2009

Rodrigo Mourão

Olá Amigo !!!

Desculpe a demora, eu estava caçando minha rotina aqui nas milhes de linhas de código.
No MySql eu trabalho com uma tabela chamada Generator com dois campos TableName e Value,
assim coloco la os registros com o ID:
 
Cliente     10
Perfil       5
Produtos     6
 
E por ai vai....
 
Na hora de pegar dou um update somo mais 1 e retono.
 
function TDM.GenID(tablename: String): Integer;
var
  Qry: TSQLQuery;
  Transaction: TDBXTransaction;
begin
  try
    try
      Transaction := DBAcesso.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
      DBAcesso.ExecuteDirect('UPDATE SEQUENCE SET NEXTVALUE = NEXTVALUE+1 WHERE TABLENAME = '+QuotedStr(tablename));
      Qry := TSQLQuery.Create(Self);
      Qry.SQLConnection := DBAcesso;
      Qry.SQL.Add('SELECT NEXTVALUE FROM SEQUENCE WHERE TABLENAME = '+QuotedStr(tablename));
      Qry.Open;
      Result := Qry.Fields[0].AsInteger;
      DBAcesso.DBXConnection.CommitFreeAndNil(Transaction);
    except
      DBAcesso.DBXConnection.RollbackFreeAndNil(Transaction);
    end;
  finally
    FreeAndNil(Qry);
  end;
end;
 
Abs
Responder

Gostei + 0

05/08/2009

Rogério Nascimento

Fala ai Grande Rodrigo, tudo na paz?!!!     Posso usar então a mesma lógica q vc utiliza para pegar o id no banco firebird ? (pois é ela q eu utilizo para o ID heheh)    Mas, tem como evitar saltos de sequenciais, que acontecem muito qdo o usuario cancela a operação, oque vc me sugere?
Responder

Gostei + 0

05/08/2009

Rogério Nascimento

  Ou desta forma em caso de roolback ele não incrementa o numero ? evitando salto .   Abraços,   Rogério
Responder

Gostei + 0

05/08/2009

Rodrigo Mourão

Olá Amigo,

1) Bem pode usar em qualquer banco sim;

2) Se der Rollback nao vai incrementar não;

3) Agora quanto ao salto em caso de cancelar so tem um jeito. Vai no evento BeforeApplyUpdates e coloque lá. Assim só vai gerar quando realmente for gravar. Agora tem um porem se quiser ter o ID antes de gravar entao noa tem jeito, tem que gerar antes mesmo e se cancelar vai pular tb.

Poderia ate fazer uma rotina para Id nao usado em um tabela ai quando fosse gerar ia nesta tabela primeiro e tal  mas ai daria muito trabalho e o custo beneficio nao compensaria !!

Abs !!
Responder

Gostei + 0

05/08/2009

Rogério Nascimento

Valeu Rodrigo, vou testar hoje mesmo !!!

Abraços !
Responder

Gostei + 0

05/08/2009

Rogério Nascimento

Rodrigo, ficou perfeito, eu coloquei no before post e fiz alguns testes, caso o usuário inclua mas não salve, ele não pula o codigo, se ele salva, ja mostra na tela o numero.   Valeu demais, um abraço !!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar