Erro! Pegar ultimo registro.

Delphi

15/10/2003

Boa tarde pessoal.
estou precisando fazer o seguinte.
tenho um programa que tem uma tabela(msaccess) que tem os seguintes campos: Numeração(campo chave), data, rementente, destinatario.
este programa roda em rede.. Estou tentando fazer o seguinte:
Qdo o usuário clicar em Gravar ele pega o valor do ultimo registro e adiciona +1..
Não pode ser autoinc pq o numero seria 001F/03 , 002F/03 , 003F/03 ...
acontece que com a procedure abaixo tá dando erro de violação de chave pq eu mando ir para o ultimo, mas o ultimo já é este registro que estou editando..

procedure Tfrmcontrole.btnincluirClick(Sender: TObject);
begin
Dscontrole.AutoEdit:= true;
dbdata.SetFocus;
tblcontrole.Append;
end;


procedure Tfrmcontrole.btnatualizarClick(Sender: TObject);
var A:string;
Present:Tdatetime;
Year,Month,day:word;

begin
Present:= now;
decodedate(Present,Year,Month,day);
Tblcontrole.Last; [b:e4f580d7c3]// O ERRO É AQUI[/b:e4f580d7c3]
A:= trim(inttostr(strtoint(trim(copy(tblcontrolenumeracao.asstring,1,Pos(´-´,tblcontrolenumeracao.asstring)-1)))+1)+´ - F/´+ copy(inttostr(year),3,2));
dbedit1.Enabled:=true;
dbedit1.Text:= A;
dbedit1.Enabled:=false;
tblcontrole.Post;
tblcontrole.Refresh;
dscontrole.AutoEdit:=false;
end;


Eric.miranda

Eric.miranda

Curtidas 0

Respostas

Eric.miranda

Eric.miranda

15/10/2003

ninguém pode me ajudar????? :(


GOSTEI 0
Fabio.hc

Fabio.hc

15/10/2003

Depois do comando:
- tblcontrole.Append;

o próximo comando esperado é :
- tblcontrole.post;


e vc usou:
- tblcontrole.last;

Para resolver:
  private
   A:string; 
   
procedure Tfrmcontrole.btnincluirClick(Sender: TObject); 
var Present:Tdatetime; 
   Year,Month,day:word; 
begin 
   tblcontrole.last;//  (pegar o ultimo registro e adiciona 1)
   Present:= now; 
   decodedate(Present,Year,Month,day); 
   A:= trim(inttostr(strtoint(trim(copy(tblcontrolenumeracao.asstring,1,Pos(´-´,tblcontrolenumeracao.asstring)-1)))+1)+´ - F/´+ copy(inttostr(year),3,2)); 
   Dscontrole.AutoEdit:= true; 
   dbdata.SetFocus; 
   tblcontrole.Append; 
end; 



procedure Tfrmcontrole.btnatualizarClick(Sender: TObject); 
begin 
   dbedit1.Enabled:=true; 
   dbedit1.Text:= A; 
   dbedit1.Enabled:=false; 
   tblcontrole.Post; 
   tblcontrole.Refresh; 
   dscontrole.AutoEdit:=false; 
end;



GOSTEI 0
Eric.miranda

Eric.miranda

15/10/2003

Valeu Fábio,
mas pelo que vi no seu código ele não prevê a possibilidade de por exemplo:

um cara vai e pega o registro 007 - f/03 e está concluindo a edição dele para gravar no botão atualizar..


nisso um outro cara vai e pega o 008 - f/03 e digita e grava antes que o 007 fosse gravado.. aí o 007 decide não gravar mais.. aí ficara picado na numeração, coisa que não pode acontecer..

o que estava pensando era na hora exata que fosse gravar ver qual era o ultimo numero e acrescentar 1 e gravar.


GOSTEI 0
POSTAR