Fórum Como alterar o valor na tela de um campo de dados tipo codigo #531109
08/09/2015
0
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
Curtir tópico
+ 0Post mais votado
09/09/2015
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
Gostei + 1
Mais Posts
09/09/2015
Luis Paulo
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
09/09/2015
Mateus Ribeiro
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
09/09/2015
Luis Paulo
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
09/09/2015
Mateus Ribeiro
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
09/09/2015
Luis Paulo
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
Clique aqui para fazer login e interagir na Comunidade :)