Fórum Como alterar o valor na tela de um campo de dados tipo codigo #531109

08/09/2015

0

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

Responder

Post mais votado

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!

Mateus Ribeiro

Mateus Ribeiro
Responder

Gostei + 1

Mais Posts

09/09/2015

Luis Paulo

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!
Responder

Gostei + 0

09/09/2015

Mateus Ribeiro

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í!
Responder

Gostei + 1

09/09/2015

Luis Paulo

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.
Responder

Gostei + 0

09/09/2015

Mateus Ribeiro

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
Responder

Gostei + 1

09/09/2015

Luis Paulo

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
Responder

Gostei + 1

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar