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
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
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)