Buscar

Anexar o ano ao valor do campo autoincremento

Código

{ Boa tarde a todos.

Eu criei uma função dentro do Delphi, pega o Autoincremento e anexar o ano, ou o mes, ou o dia.

Para fazer isto no entanto, o seu campo autoincremento tem que ser do tipo Varchar e não númerico, isto porque ele vai acrescentar o caractere "/".

Na função, um dos parâmetros que voce vai fornecer é se voce quer anexar o Dia, o Mes ou Ano.

Antes de mais nada, necessário é que voce declare a Unit DateUtils na seção Uses da sua Unit.

Eis a função: }


function TfrmTemplate.NextDoc(Num, Calendar: string): string;
var
 S, D: integer;
 Ano, Mes, Dia: string;
begin
 Ano := '/' + IntToStr(YearOf(Date));
 if MonthOf(Date) < 10 then
    Mes := '/0' + IntToStr(MonthOf(Date))
 else
    Mes := '/' + IntToStr(MonthOf(Date));
 if DayOf(Date) < 10 then
    Dia := '/0' + IntToStr(DayOf(Date))
 else
    Dia := '/' + IntToStr(DayOf(Date));
 if Calendar = 'Ano' then Calendar := Ano;
 if Calendar = 'Mes' then Calendar := Mes;
 if Calendar = 'Dia' then Calendar := Dia;
 if (Num <> '') and (Calendar = Copy(Num, Pos('/', Num), Length(Calendar))) then begin
     D := (Pos('/', Num) - 1);
     S := StrToInt(Copy(Num, 1, D)) + 1;
     FmtStr(Num, '%.' + IntToStr(D) + 'd', [S]);
     Result := Num + Calendar;
 end else
   Result := '0001' + Calendar;
end;
 
{ Onde o parâmetro Num, vai ser o valor do campo Autoincremento, especificamente do último registro, apanhado de uma instrução Select assim: }

 Select Max(Codigo) as Maior From Tabela
 
{ Ai voce vai passar como parâmetro para função assim: }

  NextDoc(IBQuery1Maior.Value, "Ano");
 
{ Ora, mas a função Max do SQL não pega o maior valor númerico de um campo númerico  ? Não só campos númericos, porém em se tratatando de campos Strings, no caso do SQL (Varchar), ele vai comparar a maior cadeia do código ASCII dentro do campo.

A função vai comparar o ano ou dia ou o mes, de acordo com o segundo parâmetro passado, com o ano ou mes ou dia da data atual do sistema, se for diferente, ele acrescenta ele coloca "0001/Ano atual", se o ano for igual, ele acrescenta mais um na numeração mantendo o ano ou mes ou dia.

Esperimente usar a função assim }


NextDoc("0035/2007", "Ano");

// Ou assim

NextDoc("0048/2006", "Ano");

Um abraço a todos
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 23/10/07
Por: Jorge Da Silva Abreu
Visualizada: 8057 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009