[firebase-br] ajuda com campo auto incremento

Fausto fausto.s.a em uol.com.br
Seg Nov 19 08:11:48 -03 2007


logam2 em gmail.com escreveu:
> Sou iniciante em FB tenho uma tabela onde cadastro ordens de serviço nessa
> tabela tenho um campo ID_OS que é um campo do tipo integer auto incremento
> ele preenche o campo 1,2,3,4,5....
> mas eu gostaria que ele pegace o valor do generator e juntace com os ultimos
> dois digitos do ano corrente e preenchece o campo IS_OS assim:
> 01/07,02/07,03/07,04/07,05/07...

Neste caso você teria que criar um campo varchar, ou seja, deixar o 
campo com o generator e neste novo campo varchar armazenar o conteúdo 
como você esta querendo.
Há duas maneiras de fazer isso, se estiver utilizando o Delphi, no 
evendo before post de sua Tabela, ou ClientDataSet, você pega o 
generator e "monta" o conteúdo do campo varchar em questão.
Mais ou menos assim:
SuaTabelaouSeuClientDataSetBeforePost..
begin
   camponovo := StrZero(pegargenerator(),6,0)+YearOff(Date);
end;
a função StrZero você acha na net, o YearOff tem que declarar a Unit 
DateUtils, função pegargenerator, você encontra no site da firebase, ou 
em www.activedelphi.com.br, não exatamente com este nome.
Você pode também criar uma trigger para fazer isso.
que seria assim.
SET SQL DIALECT 3;

SET NAMES WIN1252;

CREATE GENERATOR GEN_TBLTESTE;

SET TERM ^ ;


CREATE TRIGGER TBLTESTE_BI FOR TBLTESTE
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE CODAUX CHAR(12);
BEGIN
   IF (NEW.ID_OS IS NULL) THEN
     NEW.ID_OS = GEN_ID(GEN_TBLTESTE,1);
   CODAUX = LPAD(NEW.ID_OS,6,'0')||'/';
   NEW.IS_OS = CODAUX;
END
^


SET TERM ; ^
A função LPAD, faz parte das libs que acompanham o Firebird, para 
instala-las creio que você deve encontrar alguma coisa no site da Firebase.
Outra coisa, não consegui anexar o ano como você quer, mas creio que não 
deva ser tão difícil, o problema é que estou com muito trabalho aqui.
-- 
Fausto Alves
Franca - SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird





Mais detalhes sobre a lista de discussão lista