[firebase-br] TClientDataSet + Generator

Fausto fausto.s.a em uol.com.br
Ter Out 28 23:25:48 -03 2008


Fabrício Fadel Kammer escreveu:
> Boa tarde à todos,
> 
> Estou iniciando o desenvolvimento com TClientDataSet e gostaria de uma 
> dica do pessoal que trabalha com esse componente.
> 
> Até então só utilizei os componentes IBX para acesso ao firebird e os 
> cadastros todos eram feitos com componentes TIBDataSet. Nesses 
> componentes, para fazer a geração das chaves primárias eu utilizava a 
> propriedade GeneratorField, a qual incrementava um generator no momento 
> do Post no componente. Com TClientDataSet qual seria a melhor forma de 
> se fazer essa mesma operação?
Simples..
Utilize esta função aqui.. ela também vai servir para múltiplas inserções:
function RetunId(Tabela: string;DB:TSQLConnection): Integer;
Var
   SqlAux:TSQLDataSet;
begin
   SqlAux := TSQLDataSet.Create(nil);
   SqlAux.Connection := DB;
   SqlAux.CommandText := 'SELECT GEN_ID(GEN_' + Tabela + '_ID, 1) AS 
CODIGO FROM RDB$DATABASE';
   SqlAux.Open;
   Result := SqlAux.FieldByName('CODIGO').asInteger;
   SqlAux.Close;
   SqlAux.Destroy;
end;
Agora você a chama no evento BeforePost do seu ClientDataSet:
procedure TSeuDM.SeuClientDataSetBeforePost(DataSet: TDataSet);
begin
   if SeuClientDataSet.State = dsInsert then
     SeuClientDataSetSEUCAMPO.AsInteger := ReturnId('SuaTable',SuaConexao);
end;

Em tempo, a idéia deste código foi retirada do livro *Firebird Essencial*
-- 
Fausto Alves
Msn:faustoalves em com4.com.br
Skype:faustoalves
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird





Mais detalhes sobre a lista de discussão lista