Coloque duas Queries no Datamodule.
Uma vamos chamar de qUpdAutoInc e a outra de qGetAutoInc. Estas queries, uma vai obter o valor da chave na tabela GAUTOINC e a outra gravar o novo valor lá.
Na query qGetAutoInc, vamos colocar a seguinte senteça:
SELECT VALAUTOINC FROM GAUTOINC
WHERE CODCOLIGADA = :CODCOLIGADA AND
CODSISTEMA = :CODSISTEMA AND CODAUTOINC = :CODAUTOINC
Esta sentença traz o valor atual do campo informado em CODAUTOINC (que na verdade é o nome do campo chave de uma tabela)
Na qUpdAutoInc, vamos colocar a sentença:
UPDATE GAUTOINC SET VALAUTOINC = :VALAUTOINC
WHERE CODCOLIGADA = :CODCOLIGADA AND
CODSISTEMA = :CODSISTEMA AND CODAUTOINC = :CODAUTOINC
Agora para você fazer o autoincremento, basta fazer:
function TDMFat.GenIDMov: integer;
begin
qGetAutoInc.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qGetAutoInc.ParamByName('CODSISTEMA').AsString := 'T';
qGetAutoInc.ParamByName('CODAUTOINC').AsString := 'IDMOV';
qGetAutoInc.Open;
Result := qGetAutoInc.fieldbyname('VALAUTOINC').AsInteger + 1;
qGetAutoInc.Close;
qUpdAutoInc.ParamByName('CODCOLIGADA').AsInteger := CorporeRM.Coligada;
qUpdAutoInc.ParamByName('CODSISTEMA').AsString := 'T';
qUpdAutoInc.ParamByName('CODAUTOINC').AsString := 'IDMOV';
qUpdAutoInc.ParamByName('VALAUTOINC').AsInteger := Result;
qUpdAutoInc.ExecSQL;
end;
No caso acima, esta rotina incrementa o campo IDMOV da Tabela TMOV do RM Nucleus. Muitos aqui vão me questionar porque eu não uso o Succ para incrementar o valor do campo. Eu explico: O uso de funções e procedimentos, só se torna conveniente quando a rotina é de complexidade considerável e que não é viável codificar diretamente na estrutura do programa. Para quem não sabe o que acontece com seu programa, quando ele esta sendo executado e encontra uma função o procedimento, ele para de executar, vai ser empilhado e então será executada a rotina (procedimento ou função) em questão. Então ficar usando em demasia, funções como Inc, Succ, dentre outras, irá promover uma relativa lentidão no seu sistema. Eu, particularmente, evito estas funções. Ao invés de usar Inc(i), eu prefiro usar i := i + 1