Ajuda com campo auto inc

Firebird

14/11/2007

Olá eu sou novo em programação e no FB!!
Eu tenho uma tabela OS nela têm campos de identificação do equipamento, proprietário e defeito!
O problema é tenho um campo auti inc com o nome ID_OS tipo integer
A medida que vou cadastrando novas OS funciona legal mas o campo é preenchido com 1,2,3,4,5...
Eu gostaria que fosse preenchido assim 01/07,02/07,03/07...
O numero da OS: 01 mais os dois últimos dígitos do ano corrente 07
Alguém pode me ajudar??
Estou usando FB1.5 e Delphi 7
Estou migrando minha base para FB 2.0
Obrigado


Logam

Logam

Curtidas 0

Respostas

Pestana_

Pestana_

14/11/2007

para fazer o que você quer o campo [b:a1466c7437]ID_OS[/b:a1466c7437] tem que ser do tipo string porque alem do código você precisa
concatenar o traço mais o ano [ 01/07 ]. é isso que você quer ?



Pestana.


GOSTEI 0
Logam

Logam

14/11/2007

Sim!! mas como eu faço pra extrair o ano abrevido??
Ontem eu ja converti o campo ID_OS para varchar mas ainda não consegui extrair o ano e formar [01/07]!!
eu não sei qual código usar pra fazer isso!!


GOSTEI 0
Pestana_

Pestana_

14/11/2007

verifique se assim resolve:
codigo + ´/´ + FormatDateTime(´yy´, date));



flw.


GOSTEI 0
Pestana_

Pestana_

14/11/2007

você tambem pode utilizar o [b:f9205494dc]YearOf()[/b:f9205494dc], mas não se esqueça de incluir na clausula uses [color=green:f9205494dc]DateUtils[/color:f9205494dc].


GOSTEI 0
Logam

Logam

14/11/2007

Mas eu quero fazer isso direto no banco não via delphi!!


GOSTEI 0
Logam

Logam

14/11/2007

Assim funciona saída resultado 1/2007
CREATE TRIGGER OS_TES_BI FOR OS
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
Begin
/* Trigger text */
IF (NEW.teste IS NULL) THEN
NEW.teste = GEN_ID(gen_os_tes,1)||´/´|| extract (year from current_date);
end
^
SET TERM ; ^


Tentei assim e da o erro da imagem
CREATE TRIGGER OS_TES_BI FOR OS
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
Begin
/* Trigger text */
IF (NEW.teste IS NULL) THEN
NEW.teste = GEN_ID(gen_os_tes,1)||´/´||cast (extract (year from current_date)as varchar(2));
end
^
SET TERM ; ^



GOSTEI 0
Pestana_

Pestana_

14/11/2007

eu tambem não estou conseguindo, não sei se existe alguma função no banco que copia ou remove um pedaço de uma string.


flw.


GOSTEI 0
Logam

Logam

14/11/2007

Eu consegui fazer oque queria!!
Eu fiz assim:

CREATE TRIGGER OS_TES_BI FOR OS
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
begin
  /* Trigger text */
   IF (NEW.teste IS NULL) THEN
    NEW.teste = GEN_ID(gen_os_tes,1)||´/´||substring ((extract (year from current_date))from 3 for 4) ;
end
^


SET TERM ; ^



GOSTEI 0
Pestana_

Pestana_

14/11/2007

que bom que você consegiu, pelo jeito você utilizou UDF para pegar pedaço de uma string.


flw.


GOSTEI 0
Logam

Logam

14/11/2007

Não eu não usei udf!!
vi no site onde descobri isso que essa função substring é nativa do firebird mesmo!!


GOSTEI 0
POSTAR