Pegando o último registro

Delphi

10/12/2013

Como eu faço pra pegar o último registro de uma banco de dados(firebird) e adicionar mais 1.
EX:
o último registro é de número 53. Eu pego esse número e adiciono +1...fica 54 na inclusão do banco de dados....tudo isso num DBText.(o campo já esta vinculado)

var
contador: integer = 0;
begin
DM_Controle.cdsControleDeAcessoCOD_ACESSO.Value:= StrToInt(contador.Caption);
crescente:= strtoint(contador.Caption) +1;
contador.Caption:= inttostr(crescente);
end;
Adriano Pinheiro

Adriano Pinheiro

Curtidas 0

Respostas

Mr. White

Mr. White

10/12/2013

    query.CLOSE;
    query.SQL.Text := 'SELECT MAX(codigo) AS crescente FROM tabela';
    query.OPEN;

    contador := query.fieldbyname('crescente').asinteger + 1;


No meu caso, faço um select na query, não sei se vai resolver pra você..
GOSTEI 0
Deivison Melo

Deivison Melo

10/12/2013

Você poderia utilizar a função Max e depois somar com + 1.

Exemplo:
Select max(valor) + 1 from RDB$DATABASE


Veja o exemplo abaixo:
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;


Veja que se não quiser fazer o uso do Generator (usei apenas como exemplo), simplesmente trocaria a instrução SQL do código acima, por:

SELECT max(valor) + 1 
  FROM RDB$DATABASE


Abração e bons código!!!

Emanoel Deivison
Recife - PE
GOSTEI 0
Adriano Pinheiro

Adriano Pinheiro

10/12/2013

não funcionou...

[Error] ControleDeAcesso.pas(125): Undeclared identifier: 'query'
GOSTEI 0
Mr. White

Mr. White

10/12/2013

Você tem que colocar o nome da sua query de consulta, se não tiver, declara uma variável...
GOSTEI 0
Eduardo Mendonça

Eduardo Mendonça

10/12/2013

de modo mais simples
DataModulel.tabela/queryNOME_DA_COLUNA .Last;
DbEdit.Text := IntToStr(DataModule.tabela/queryNOME_DA_COLUNA.AsInteger + 1);
GOSTEI 0
Adriano Pinheiro

Adriano Pinheiro

10/12/2013

Esse que ultimo que me passaram não funcionou.
esse código funcionou até pegar o registro mas não acrescentou +1.

DM_Controle.Query.SQL.Text := 'SELECT MAX(COD_ACESSO) AS crescente FROM CONT_ACESSO';
DM_Controle.query.OPEN;

contador := DM_Controle.query.fieldbyname('crescente').asinteger + 1;

fieldbyname não vai!

GOSTEI 0
Mr. White

Mr. White

10/12/2013

Que erro mostra?
GOSTEI 0
Adriano Pinheiro

Adriano Pinheiro

10/12/2013

ele não acrescenta o digito no COD_ACESSO.

Field COD_ACESSO "must have value...

ele não deveria acrescentar +1 no último registro?
GOSTEI 0
Adriano Pinheiro

Adriano Pinheiro

10/12/2013

consegui!...


DM_Controle.Query.Close;
DM_Controle.Query.SQL.Text := 'SELECT MAX(COD_ACESSO) AS crescente FROM CONT_ACESSO'; //pega o ultimo registro
DM_Controle.query.OPEN;
contador := 1;
if DM_Controle.query.fieldbyname('crescente').asinteger >0 then // verifica é maior que zero
contador := DM_Controle.query.fieldbyname('crescente').asinteger + 1; //acrescenta +1
DM_Controle.cdsControleDeAcesso.Insert;
DM_Controle.cdsControleDeAcessoCOD_ACESSO.Value := contador; //insere o contador no banco
GOSTEI 0
POSTAR