Incremento

15/05/2008

1

Bem pessoal eu estou fazendo incrementaçao atraves de uma table cada formulario eu acrescento um table, problema que quando vou da um novo registro as vezes da um novo incremento ou as vezes ele repete, mas no caso um exemplo tem o codigo do cliente ja existente 1, e se e u da um novo ele deveria aparecer no codigo 2, mas as vezes ele repete, ai que ta eu queria contornar esse problema na hora da pessoa preencher todos os campos, e mandar salvar e se o codigo estiver repetindo da uma mensagem para o usuario alterar. eu utilizo firebird, e como ja disse to usando cada formulario para acrescentar uma table vou deixar o codigo como faço para incrementar.

var ultcod: integer;
begin
DM_dados.tbl_cliente.insert;
tblauxcliente.Open;
tblauxcliente.Last;
ultcod:=tblauxclienteCLI_CODIGO.value+1;
DM_dados.tbl_clienteCLI_CODIGO.value:=ultcod;
tblauxcliente.close;

no caso o tblauxcliente é a table que utilizo no formulario e o tbl_cliente que é uma table no Data Module


Responder

Posts

16/05/2008

Edineidaniel

Rodrigo...

Eu não gosto muito de depender de componentes do tipo table para executar este tipo de função, pq a gnt nunca sabe exatamente com o componente erá se comportar... (as vezes certo, as vezes errado)...

Utilizo SQL e nunca mais tive problema...

Faça a adequação desta função para os componentes que vc utiliza, eu uso DBExpress
function AutoInc(Conexao: TSQLConnection; Tabela, Campo: String): String;
Var
  sqlAuto: TSQLDataSet;
begin
  Result := ´1´;
  try
    sqlAuto := TSQLDataSet.Create(Nil);
    try
      with sqlAuto do
      begin
        SQLConnection := Conexao;
        close;
        CommandText := ´SELECT MAX(´+Campo+´)+1 as CAMPO FROM ´+Tabela;
        Open;
        if not IsEmpty then
          if Fields[0].AsString <> ´´ then
            Result := Fields[0].AsString;
      end;
    finally
      sqlAuto.Free;
    end;
  except
    ShowMessage(´Problemas com o AutoIncremento da Tabela [´+tabela+´]!´);
  end;
end;


t+
Edinei


Responder

16/05/2008

Rodrigo X

bem eu criei um generator e uma trigger

CREATE TRIGGER ´GERA_CODIGO_CLIENTE´ FOR ´CLIENTE´
ACTIVE BEFORE INSERT POSITION 0
as
begin
new.cli_codigo = gen_id(gen_cod_cliente,1);
end
^

bem eu utilizo no delphi, so os componentes table datasource, quero saber se puder com detalhes o que eu preciso agora para auto incrementar
pesquisei varias vezes aqui no forum e nada so acho dizendo para outros tipo de banco ou utilizando bdeexpress, e nao conseguir assimiliar
se alguem puder me ajudar utilizo entao como eu disse table e datasource obrigado.


Responder

17/05/2008

Paullsoftware

Conselho!!!
Esqueça os componentes ´[b:e7d053fed1]Tables[/b:e7d053fed1]´, ele são componentes que normalmente tazem todos os dados, deve se amarrar a Filters, e as consultas normalmente são usadas com Locate, use SQLQuerys ou de preferência SQLDataSet´s se estiver usando DBExpress, em conjunto com os DataSetProviders e ClientDataSets...

As Querys e DataSet´s aceitam comandos SQL que facilitam e melhoram muito o desempenho de suas aplicações... sem contar que é mais fácil de dar manutenção entre outros...

espero ter ajudado :wink:


Responder