AutoIncremento Delphi Firebird Firedac Sem Trigger nem Generator

SQL

Delphi

Firebird

FireDAC

23/04/2019

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

Curtidas 0

Respostas

Anderson Gonçalves

Anderson Gonçalves

23/04/2019

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
GOSTEI 0
POSTAR