GARANTIR DESCONTO

Fórum Pegando o último registro #463599

10/12/2013

0

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

Responder

Posts

10/12/2013

Mr. White

    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ê..
Responder

Gostei + 0

10/12/2013

Deivison Melo

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
Responder

Gostei + 0

10/12/2013

Adriano Pinheiro

não funcionou...

[Error] ControleDeAcesso.pas(125): Undeclared identifier: 'query'
Responder

Gostei + 0

10/12/2013

Mr. White

Você tem que colocar o nome da sua query de consulta, se não tiver, declara uma variável...
Responder

Gostei + 0

10/12/2013

Eduardo Mendonça

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

Gostei + 0

11/12/2013

Adriano Pinheiro

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!

Responder

Gostei + 0

11/12/2013

Mr. White

Que erro mostra?
Responder

Gostei + 0

11/12/2013

Adriano Pinheiro

ele não acrescenta o digito no COD_ACESSO.

Field COD_ACESSO "must have value...

ele não deveria acrescentar +1 no último registro?
Responder

Gostei + 0

11/12/2013

Adriano Pinheiro

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
Responder

Gostei + 0

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

Aceitar