AutoIncremento Delphi Firebird Firedac Sem Trigger nem Generator

23/04/2019

10

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
Responder

Posts

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
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira