Pegando o último registro
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;
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
Curtidas 0
Respostas
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
10/12/2013
Você poderia utilizar a função Max e depois somar com + 1.
Exemplo:
Veja o exemplo abaixo:
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:
Abração e bons código!!!
Emanoel Deivison
Recife - PE
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
10/12/2013
não funcionou...
[Error] ControleDeAcesso.pas(125): Undeclared identifier: 'query'
[Error] ControleDeAcesso.pas(125): Undeclared identifier: 'query'
GOSTEI 0
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
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
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!
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
10/12/2013
Que erro mostra?
GOSTEI 0
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?
Field COD_ACESSO "must have value...
ele não deveria acrescentar +1 no último registro?
GOSTEI 0
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
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