Ajuda - Busca - Membros - Calendário
Versão Completa: Como Inverter A Disposiçao De Um Campo No Banco De Dados?
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Fausto Mlheiros
Saudações!

Meu sistema sempre manda pro banco de dados(Interbase) um campo na seguinte formação: 012007. Onde 01 é o mês e 2007 é o ano no formato integer, mas o banco de dados TEM QUE INVERTER OS CAMPOS. Pegar 012007 e gravar 200701. É possivel fazer isso no banco de dados sem mexer nos fontes do sistema?

Abraços

Fausto Malheiros
HDELPHI
QUOTE(Fausto Mlheiros @ 04/06/2007 - 18:09) *
Saudações!

Meu sistema sempre manda pro banco de dados(Interbase) um campo na seguinte formação: 012007. Onde 01 é o mês e 2007 é o ano no formato integer, mas o banco de dados TEM QUE INVERTER OS CAMPOS. Pegar 012007 e gravar 200701. É possivel fazer isso no banco de dados sem mexer nos fontes do sistema?

Abraços

Fausto Malheiros


Colega não é possivel fazer isto sem alterar os fontes, mesmo que no banco de dados este campos seja integer, voce tem que transformar o seu inteiro em string e depois separar com copy esta string, ajuntar novamente invertido e depois transformar novamente em integer e gravar no banco: ex:

a : integer; b,c : string;

begin

a := 012007;
b := copy(a,1,2);
c := copy(a,3,4);
a := strtoint(c+cool.gif;

// gravar ....

end;
Fausto Malheiros
Saudações!

Meu sistema sempre manda pro banco de dados(Interbase) um campo na seguinte formação: 012007. Onde 01 é o mês e 2007 é o ano no formato integer, mas o banco de dados TEM QUE INVERTER OS CAMPOS. Pegar 012007 e gravar 200701. É possivel fazer isso no banco de dados sem mexer nos fontes do sistema?

Abraços

Fausto Malheiros
HDELPHI
correção ...

a:= strtoint(c+cool.gif;
--Robinho --
Olá.

Adiciona o meu MSN que eu acho que posso te ajudar.

robinhocne@hotmail.com
Fausto Malheiros
Valeu HDELPHI!

Se não tiver jeito mesmo, vou ter que meter a mão na massa.
Erso
tem sim você pode usar uma trigger!!
CODE
CREATE TRIGGER NOMETRIGGER FOR NOMETABELA
ACTIVE BEFORE INSERT POSITION 0
AS
begin
NEW.NOMECAMPO  = substring(NEW.NOMECAMPO from 3 for 4) || substring(NEW.NOMECAMPO from 1 for 2);
end




toda vez que for inserido um noo registro ele chama a trigger e formata o seu campo!
Micheus
Tópicos mesclados conforme comunicado por MP a Fausto Malheiros.
Fausto Malheiros
Ok Erso!

    O NEW.NOMECAMPO que você citou no exemplo é o campo que vai ser mudado sua disposição certo?
    O aplicativo continua chamando o mesmo campo?

Valeu e obrigado pela dica. Bração.
Micheus
Fausto, o NEW se refere ao registro sendo gravado no banco.

Você está ciente que este processo irá realmente "Pegar 012007 e gravar 200701", mas se você ler este campo no seu programa ele aparecerá com a nova formatação e não a que você passa na gravação?
Fausto Malheiros
Micheus! Estou fazendo essa rotina agora neste instante e surgiu um porem.

Essa rotina funciona no sentido da informação Banco de Dados ---> Aplicativo. Mas e o contrario? aplicativo ---> Banco de dados? Como faço pro banco de dados inverter o campo quando o aplicativo enviar "012007"?

Fazendo isso. FECHOU, não preciso mexer em nenhuma linha de código do sistema.
Micheus
QUOTE(Fausto Malheiros @ 05/06/2007 - 16:34) *
Micheus! Estou fazendo essa rotina agora neste instante e surgiu um porem.

Essa rotina funciona no sentido da informação Banco de Dados ---> Aplicativo. Mas e o contrario? aplicativo ---> Banco de dados? Como faço pro banco de dados inverter o campo quando o aplicativo enviar "012007"?
Fazendo isso. FECHOU, não preciso mexer em nenhuma linha de código do sistema.
Fausto Malheiros, foi por isto que fiz o último comentário.
Você cria a trigger para está resolver um problema, sendo que o caminho inverso você não consegue com um procedimento similar. Então, até onde eu sei, não tem jeito não, tem que mexer no código mesmo.
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.