AutoIncremento Delphi Firebird Firedac Sem Trigger nem Generator

23/04/2019

0

Ola Gostaria de uma Ajuda com um Campo de autoIncremento no Delphi sem ultilizar Trigger nem Generator ultilizando SELECT MAX


function TDMAutoIncremento.AutoIncremento(pTabela, pCampo: string): string;
begin
QryExeculta.Close;
QryExeculta.SQL.Clear;
Result := QryExeculta.SQL.Add(''''''''SELECT MAX(''''''''+pCampo+'''''''') +1 FROM ''''''''+pTabela+'''''''' '''''''');
QryExeculta.Open;
end;

eu tenho uma funçao que não sei exatamente se esta funcionando por que ainda nao testei na maquina pois nao me lembro dos codigos no BeforeUpdateRecord
gostaria de saber como faço para criar um auto incremento ja que meu SQL ja esta me dando o valor maximo do campo +1 que é o valor que eu preciso inserir quando for salvar

AQUI o meu BEFOREUPDATERECORD


procedure TfrmCadClientes.DSPCadClientesBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
If UpdateKind = ukInsert Then
DeltaDS.

end;

end.


Me lembro até essa parte não me recordo do resto o que eu preciso fazer aqui é enviar os valores dos parametros :pCampo e :pTabela la para a query se alguem puder ajudar grato
Guilherme Damacena

Guilherme Damacena

Responder

Posts

14/08/2019

Anderson Gonçalves

Ola Gostaria de uma Ajuda com um Campo de autoIncremento no Delphi sem ultilizar Trigger nem Generator ultilizando SELECT MAX


function TDMAutoIncremento.AutoIncremento(pTabela, pCampo: string): string;
begin
QryExeculta.Close;
QryExeculta.SQL.Clear;
Result := QryExeculta.SQL.Add(''''''''SELECT MAX(''''''''+pCampo+'''''''') +1 FROM ''''''''+pTabela+'''''''' '''''''');
QryExeculta.Open;
end;

eu tenho uma funçao que não sei exatamente se esta funcionando por que ainda nao testei na maquina pois nao me lembro dos codigos no BeforeUpdateRecord
gostaria de saber como faço para criar um auto incremento ja que meu SQL ja esta me dando o valor maximo do campo +1 que é o valor que eu preciso inserir quando for salvar

AQUI o meu BEFOREUPDATERECORD


procedure TfrmCadClientes.DSPCadClientesBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
var Applied: Boolean);
begin
If UpdateKind = ukInsert Then
DeltaDS.

end;

end.


Me lembro até essa parte não me recordo do resto o que eu preciso fazer aqui é enviar os valores dos parametros :pCampo e :pTabela la para a query se alguem puder ajudar grato



Mano, como o meu professor um dia me disse "Não interessa como vais fazer, desde que esteja funcionando bem." então se o banco de dados não é teu forte, leva para o Delphi ou o contrário, joga no teu campo.

Aqui vai um exemplo


A forma como está declarada a função é para uma UNIT separada só para funções e procedimentos, então cria uma ai pra ti.

function Incrementa(Tabela:String; CampoPK:String; Query:TADOQuery):Integer;
begin
try
With Query do
begin
close;
sql.Clear;
sql.Add('select max('+CampoPk+')as Maximo from '+Tabela);
open;
if Query.FieldByName('Maximo').AsInteger = 0 then
Incrementa := 1
else
Incrementa := Query.FieldByName('Maximo').AsInteger+1;
end;
except
ShowMessage('Ocorreu um evento inesperado no sistema, blá blá blá');
Exit;
end;
end;


Depois de fazer a tal função chama ela assim no teu código:

var x : integer;

x := incrementa('SUATABELA','CAMPOCHAVE',SuaQuery);

Abraço.

Espero ter ajudado, qualquer coisa chama no email
anderson.workinfo@gmail.com
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar