Auto incremento delphi - firebird
Ola a todos!
Com dbExpress tenho um clientDataSet, usando banco firebird, neste tenho um generator (gen_clientes_id) e uma trigger
Preciso que no meu formulário, seja feito um auto incremento nesse campo, usando justamente a trigger e o generator, ou não...
Desde já agradeço a todos.
Com dbExpress tenho um clientDataSet, usando banco firebird, neste tenho um generator (gen_clientes_id) e uma trigger
as
begin
if (new.id_clientes is null) then
new.id_clientes = gen_id(gen_clientes_id,1);
endPreciso que no meu formulário, seja feito um auto incremento nesse campo, usando justamente a trigger e o generator, ou não...
Desde já agradeço a todos.
Lg Embarcadero
Curtidas 0
Respostas
Claudio Andrade
22/09/2013
No evento OnNewRecord do seu clientdataset coloque a função a baixo.
procedure seuClientDatasetNewRecord(DataSet: TDataSet);
function GetID(NameGenerators: String): Integer;
var
sqlAutoInc: TSQLQuery;
begin
sqlAutoInc := TSQLQuery.Create(Self);
sqlAutoInc.SQLConnection := SQLConnection1;
sqlAutoInc.SQL.Add('SELECT GEN_ID ('+NameGenerators+', 1) FROM RDB$DATABASE');
sqlAutoInc.Open;
Result := sqlAutoInc.Fields[0].AsInteger;
end;
begin
seuClientDatasetCHAVE_PRIMARIA.AsInteger := GetID('SEU_GENERATOR');
end;
Essa função irá retornar o valor do generator.
Abraço.
procedure seuClientDatasetNewRecord(DataSet: TDataSet);
function GetID(NameGenerators: String): Integer;
var
sqlAutoInc: TSQLQuery;
begin
sqlAutoInc := TSQLQuery.Create(Self);
sqlAutoInc.SQLConnection := SQLConnection1;
sqlAutoInc.SQL.Add('SELECT GEN_ID ('+NameGenerators+', 1) FROM RDB$DATABASE');
sqlAutoInc.Open;
Result := sqlAutoInc.Fields[0].AsInteger;
end;
begin
seuClientDatasetCHAVE_PRIMARIA.AsInteger := GetID('SEU_GENERATOR');
end;
Essa função irá retornar o valor do generator.
Abraço.
GOSTEI 0
Mauro Brondi
22/09/2013
Obrigado Cláudio Andrade!
Estou vendo uma vídeo-aula do Rodrigo Carreiro Mourão e no Delphi 2007 (com Firebird 2.0) funciona somente com um DataSet.ApplyUpdates(0).
Mas no Delphi XE5 (com FB 2.5) não deu. (ou talvez eu tenha deixado passar alguma coisa...)
Nota: o curso a que me refiro é este: [url:descricao=Curso Rad Studio 2007, DBExpress 4 e Firebird 2.0]https://www.devmedia.com.br/curso/rad-studio-2007-dbx4-e-firebird-2-0-aplicacao-comercial-de-vendas-basico-do-inicio-ao-fim/117[/url]
Um ótimo curso.
Mas de qualquer forma a sua função me salvou. Muito obrigado.
Estou vendo uma vídeo-aula do Rodrigo Carreiro Mourão e no Delphi 2007 (com Firebird 2.0) funciona somente com um DataSet.ApplyUpdates(0).
Mas no Delphi XE5 (com FB 2.5) não deu. (ou talvez eu tenha deixado passar alguma coisa...)
Nota: o curso a que me refiro é este: [url:descricao=Curso Rad Studio 2007, DBExpress 4 e Firebird 2.0]https://www.devmedia.com.br/curso/rad-studio-2007-dbx4-e-firebird-2-0-aplicacao-comercial-de-vendas-basico-do-inicio-ao-fim/117[/url]
Um ótimo curso.
Mas de qualquer forma a sua função me salvou. Muito obrigado.
GOSTEI 0
Jonny Moraes
22/09/2013
AO FAZER O PROCEDIMENTO FUNCIONOU O AUTO INCREMENTO MAS AO FECHAR A FORM OS DADOS DIGITADOS NÃO SÃO SALVOS COMO PROCEDER MEU BOTÃO GRAVAR ESTA ASSIM :DTS.DataSet.Post; E NO EVENTO ON CLOSE DO FORMULARIO ESTA ASSIM :dmdados.CdsProdutos.applyupdates(0);
GOSTEI 0
Marco Salles
22/09/2013
com certeza tem erro .. O ApplyUpdates a exceção é silenciosa
Pesquise por econcileError para verificar o erro do seu Commit
[]sds
Pesquise por econcileError para verificar o erro do seu Commit
[]sds
GOSTEI 0