[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