Fórum Obter o ultimo registro #452131
15/08/2013
0
Estou usando o Delphi 7, SQLCoonection -> SimpleDataSet.
Tentei SimpleDataSet1.DataSet.CommandText:= 'SELECT MAX(CAMPO_ID) FROM TABELA';
Mas não sei como pegar esse valor para somar + 1 e ter o proximo valor para CAMPO_ID.
Eu uso o Generator do FireBird só no momento do Post, para não ficar incrementando quando não se confirma a inserção.
Porém na momento da inserção eu queria colocar o valor no DBEdit para o usuário saber qual será o proximo registro.
Desde já o meu muito obrigado.
Julio.
Julio Junior
Curtir tópico
+ 0Posts
16/08/2013
Maxiwel Rodrigues
Creio que isso irá ajudar com certeza mais simples que isso só mamão com açúcar...
add:pirata_pirado33@hotmail.com //Qualquer ajuda....Delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBXpress, FMTBcd, DBClient, Provider, DB, SqlExpr, StdCtrls,
Buttons, Grids, DBGrids, Mask, DBCtrls;
type
TForm1 = class(TForm)
con1: TSQLConnection;
sds1: TSQLDataSet;
sds1ID_CLIENTE: TIntegerField;
sds1NOME: TStringField;
dsp1: TDataSetProvider;
cdsproprim: TClientDataSet;
cdsproprimID_CLIENTE: TIntegerField;
cdsproprimNOME: TStringField;
lbl1: TLabel;
dbedtID_CLIENTE: TDBEdit;
ds1: TDataSource;
lbl2: TLabel;
dbedtNOME: TDBEdit;
dbg1: TDBGrid;
btn1: TBitBtn;
procedure cdsproprimBeforeInsert(DataSet: TDataSet);
procedure cdsproprimNewRecord(DataSet: TDataSet);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
max:Integer; //Incremento a crianção do numero
procedure Vproprim;//procedimento a ao numero
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.cdsproprimBeforeInsert(DataSet: TDataSet);//selecione a tabela no DM e no evento BeforeInsert digite:
begin
Vproprim;
end;
procedure TForm1.cdsproprimNewRecord(DataSet: TDataSet);//novamento na tabela no DM insira o codigo no evento NewRecord
begin
cdsproprim.FieldByName('id_cliente').AsInteger :=max +1;
end;
procedure TForm1.Vproprim;//PROCEDIMENTO DE INCREMENTO...
var
marcador:TBookmark;//
begin
marcador:= cdsproprim.GetBookmark;
try
cdsproprim.DisableControls;
max:=0;
try
cdsproprim.First;
while not cdsproprim.Eof do
begin
if cdsproprim.FieldByName('id_cliente').AsInteger >max then
max:=cdsproprim.fieldbyname('id_cliente').AsInteger;
cdsproprim.Next;
end;
finally
cdsproprim.EnableControls;
end;
finally
cdsproprim.GotoBookmark(marcador);
cdsproprim.FreeBookmark(marcador);
end;
end;
procedure TForm1.btn1Click(Sender: TObject);//BOTAO DE INSERÇÃO - INSERIR
begin
cdsproprim.Insert;
;
end.
Obs.nome do meu ClientDataSet é "CDSPRODPRIM"
Gostei + 0
16/08/2013
Deivison Melo
function GeneratorID (aName: string; Connection: TSQLConnection; Incrementa: Boolean): integer;
Código da função:
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;
Gostei + 0
16/08/2013
Deivison Melo
Apenas reforçando pois ela era utilizada para incrementar um campo no firebird.
Abração!
Gostei + 0
20/08/2013
Julio Junior
Agora estou com um outro probleminha para seguir com a fase da cadastros:
Preciso descobrir uma forma ou função para evitar que alguns campos (DBEdits) sejam repetidos no banco de dados, preciso fazer essa verificação antes do Post.
Pensei em usar nos eventos OnExit's dos campos a verificar.
Desde já o meu muito obrigado pela ajuda.
Julio.
Gostei + 0
20/08/2013
Joel Rodrigues
Gostei + 0
20/08/2013
Julio Junior
Sds.
Julio.
Gostei + 0
20/08/2013
Nícolas Braz
Sds.
Julio.
Você pode deixar o campo como unique e quando emitir o erro o delphi tratar o erro.
Gostei + 0
20/08/2013
Julio Junior
Tentei usar o try mas não consigo fazer ele funcionar, acredito eu eu esteja fazendo alguma coisa errada mas ainda não descobri.
Teria um exemplo de como eu faria para tratar esse erro no Delphi. Estou usando o Delphi 7.
Sds.
Julio.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)