Erro! Pegar ultimo registro.
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;
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
Curtidas 0
Respostas
Eric.miranda
15/10/2003
ninguém pode me ajudar????? :(
GOSTEI 0
Fabio.hc
15/10/2003
Depois do comando:
- tblcontrole.Append;
o próximo comando esperado é :
- tblcontrole.post;
e vc usou:
- tblcontrole.last;
Para resolver:
- 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
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.
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