Como alterar o valor na tela de um campo de dados tipo codigo

Delphi

Firebird

08/09/2015

Boa Tarde Pessoal,

Tenho uma tabela pedido que era de um bd antigo da empresa, acontece que na tabela pedido tem um campo status onde são gravados valores de 1 a 4, sendo 1-cancelado, 2-Nulo, 3-Baixado e 4 Faturado. Queria que quando chamasse esse campo numa tela de consulta usando um dbtext ou dbedit mostrasse não o 1,2,3,4 mas sim, baixado, faturado, nulo e cancelado de acordo com o código gravado. DELPHI7, uso IBdatabase, IBconnection, IBquery e datasource Banco de Dados firebird 2.5
Agradeço muito se alguém puder ajudar.
Luis Paulo

Luis Paulo

Curtidas 0

Melhor post

Mateus Ribeiro

Mateus Ribeiro

09/09/2015

Bom dia!

Eu vejo duas opções pra realizar isso...

1º - Você cria um CASE no seu SQL, tratando esse campo, pra em vez de exibir os números, ele já traz conforme vc disse...
CASE 
  WHEN STATUS = 1 THEN 'CANCELADO'
  WHEN STATUS = 2 THEN 'NULO'
  WHEN STATUS = 3 THEN 'BAIXADO'
  WHEN STATUS = 4 THEN 'FATURADO'
  ELSE 'INDEFINIDO' 
END AS 'STATUS' 


2º - Você cria um campo calculado (string) na sua Query, que receberá essas informações, então no evento OnCalcField dela, vc trata e manipula...
Case Query.FieldByName('STATUS').Value Of
  1: Query.FieldByName('CAMPO_CALCULADO').Value:= 'CANCELADO';
  2: Query.FieldByName('CAMPO_CALCULADO').Value:= 'NULO';
  3: Query.FieldByName('CAMPO_CALCULADO').Value:= 'BAIXADO';
  4: Query.FieldByName('CAMPO_CALCULADO').Value:= 'FATURADO';
end;


Obs: No caso do campo calculado vc poderia usar "IF ELSE", mas eu prefiro CASE rs

Bom é isso, eu particularmente usaria a primeira opção, pois já traria do banco do jeito que será preciso.


Espero que ajude!
GOSTEI 1

Mais Respostas

Luis Paulo

Luis Paulo

08/09/2015

Bom Dia, Mateus!

Seguinte agradeço demais pelo código, estou com dúvida apenas para implementar ele na IBQuery pois la já tenho um select como segue abaixo:

select * from cadastro Inner Join pedido
on cadastro.id = pedido.fk_cadastro order by cadastro.razao_social asc

O código que você me apresentou eu coloco em seguida ou preciso usar alguma expressão para linkar o case

Se puder me ajudar ai já mato essa dúvida.

Agradeço pela ajuda, valeu mesmo!
GOSTEI 0
Mateus Ribeiro

Mateus Ribeiro

08/09/2015

Bom Dia, Mateus!

Seguinte agradeço demais pelo código, estou com dúvida apenas para implementar ele na IBQuery pois la já tenho um select como segue abaixo:

select * from cadastro Inner Join pedido
on cadastro.id = pedido.fk_cadastro order by cadastro.razao_social asc

O código que você me apresentou eu coloco em seguida ou preciso usar alguma expressão para linkar o case

Se puder me ajudar ai já mato essa dúvida.

Agradeço pela ajuda, valeu mesmo!


Boa tarde!!

Com base nesse SQL que vc passou, ficaria assim:
SELECT C.*,
       (CASE 
           WHEN P.STATUS = 1 THEN 'CANCELADO'
           WHEN P.STATUS = 2 THEN 'NULO'
           WHEN P.STATUS = 3 THEN 'BAIXADO'
           WHEN P.STATUS = 4 THEN 'FATURADO'
        ELSE 'INDEFINIDO' END) AS 'STATUS'       
  FROM CADASTRO C
 INNER JOIN PEDIDO P
    ON C.ID = P.FK_CADASTRO
ORDER BY C.RAZAO_SOCIAL ASC


Só identei seu SQL pra ficar visualmente mais organizado... Testa aí!
GOSTEI 1
Luis Paulo

Luis Paulo

08/09/2015

Boa Tarde, Mateus!

Beleza o código funciona, só achei um problema é que na tabela pedido, não vem alguns campos como NRO_PEDIDO, OBSERVACAO_FISCAL e outros não aparecem quando adiciono no ADD FIELDS, ja a tabela cadastro esta vindo certinho os campos.

Sabe porque isso acontece, ele chama parcial alguns campos, quase a maioria da tabela pedido, mas não todos.
GOSTEI 0
Mateus Ribeiro

Mateus Ribeiro

08/09/2015

Boa Tarde, Mateus!

Beleza o código funciona, só achei um problema é que na tabela pedido, não vem alguns campos como NRO_PEDIDO, OBSERVACAO_FISCAL e outros não aparecem quando adiciono no ADD FIELDS, ja a tabela cadastro esta vindo certinho os campos.

Sabe porque isso acontece, ele chama parcial alguns campos, quase a maioria da tabela pedido, mas não todos.


Ah sim, foi falta de atenção minha kkk desculpe!

No SQL que passei eu dei instrução pra traze todos os campos somente da tabela cadastro ( C.* ), então basta vc adicionar pra trazer todos da tabela pedidos ( P.* )

Só adiciona lá:

SELECT C.*,
               P.*, // ADICIONA ISSO LÁ QUE RESOLVE
GOSTEI 1
Luis Paulo

Luis Paulo

08/09/2015

Blz, Agora deu certinho...rs
Agradeço muito sua atenção e ajuda...

Além de ajudar com o código me ajudou a entender o seu funcionamento, agora já entendi o seu correto uso.


Grato amigo
GOSTEI 1
POSTAR