DBExpress: Obter AutoInc após o Post
16/03/2006
0
estou usando o DBX/UIB com Firebird 1.5
seto o TField ´CODIGO´ do DataSet para AutoInc,
está funcionando corretamente, ao dar Post, ApplyUpdates...... o banco gera o autoinc corretamente....
MAS...... e agora, se eu precisar, logo após o Post, ter na mão qual foi o código autoinc gerado, para usar, por exemplo, num registro DETALHE..... oq devo fazer.
Qualquer dica será bem vinda!!!!!!
Bye
Eniorm
Posts
16/03/2006
Adriano Santos
estou usando o DBX/UIB com Firebird 1.5
seto o TField ´CODIGO´ do DataSet para AutoInc,
está funcionando corretamente, ao dar Post, ApplyUpdates...... o banco gera o autoinc corretamente....
MAS...... e agora, se eu precisar, logo após o Post, ter na mão qual foi o código autoinc gerado, para usar, por exemplo, num registro DETALHE..... oq devo fazer.
Qualquer dica será bem vinda!!!!!!
Bye[/quote:1fcdb77ae4]
Cara, existem diversas formas. Uma delas, acredito a menos usada, seja fazer uma select na tabela. Ex:
procedure TForm1.Button1Click(Sender: TObject); var Resultado : Double; begin with qryClientes do begin Close; Sql.Clear; Sql.Add(´SELECT MAX(CAMPO) AS ULT_REGISTRO FROM TABELA´); Open; Resultado := FieldbyName(´ULT_REGISTRO´).AsFloat; Close; end; end;
16/03/2006
Eniorm
16/03/2006
Marco Salles
situação que não deixa margem de desconfiança e usar uma sql que alem de retornar ela incrementa uma unidade no valor do generator.. e atribuir esse valor para o campo , quando se da um post , ou se dar um append na tabela
e mais ou menos assim :
var
ValorCampo:integer; //desnecessário
eu coloquei no evento BeforePost do Sql , para tentar ganhar mais tempo o possivel , porque toda vez que se executa uma consulta na SQLQuery1 , o valor do Generator é acrescentado mais um
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet); begin ClientDataSet1.FieldByName(´****´).AsInteger:=SQLQuery1.FieldByName(´ValorChave´).Asinteger; ValorCampo:=ClientDataSet1.FieldByName(´*****´).AsInteger; showmessage(inttostr(ValorCampo)); end;
A sql que incrementa esta definida nun SqlQuery a parte e foi definida assim a nivel de projeto
select gen_id(Gen_Venda, 1) as ValorChave from rdb$database;
[b:87cce4552f]eu estou inclinado a pensar que esta é a melhor forma , quando se quer ter o valor do incremento , imediatamente apos a inclusão do registro , que parece ser o seu caso[/b:87cce4552f]
16/03/2006
Marco Salles
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet); begin SQLQuery1.Close; SQLQuery1.open; ClientDataSet1.FieldByName(´****´).AsInteger:=SQLQuery1.FieldByName(´ValorChave´).Asinteger; ValorCampo:=ClientDataSet1.FieldByName(´****).AsInteger; showmessage(inttostr(ValorCampo)); end;
Clique aqui para fazer login e interagir na Comunidade :)