Procurar
Tópicos semelhantes
Últimos assuntos
Criando uma rotina customizada de autoincremento de ID´s no RM
Página 1 de 1
Criando uma rotina customizada de autoincremento de ID´s no RM
Criando uma rotina customizada de autoincremento de ID´s no RM
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
Postado por Walter Chagas Jr. às 12/21/2007 01:14:00 PM 0 comentários
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
Postado por Walter Chagas Jr. às 12/21/2007 01:14:00 PM 0 comentários
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Ter 20 Jun 2017 - 12:48 por paulo.ferreira_rj
» Instalar base DEMO
Sex 2 Jun 2017 - 6:29 por akaytatsu
» Relatorio Rm reports / Holerite salario
Ter 18 Out 2016 - 8:09 por Gárgio
» DEFAULT NO CADASTRO DE FUNCIONARIOS RM LABORE
Sex 7 Out 2016 - 21:51 por mpsbrasilia
» Duvida RM Labore - Calculo Folha de Pagamento
Seg 12 Set 2016 - 15:51 por RIVALDO PAES
» Exportar Imagem do banco de dados SQL SERVER
Qui 28 Jul 2016 - 11:42 por edivan
» Consulta SQL
Qui 10 Set 2015 - 11:32 por evertonerp
» Existe Algum Demo do RM Labore???
Sex 17 Abr 2015 - 11:53 por fmsolucoes
» RM BIBLIOS
Seg 16 Fev 2015 - 7:50 por fmsolucoes