Como alterar o valor na tela de um campo de dados tipo codigo
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.
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
Curtidas 0
Melhor post
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...
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...
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!
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
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!
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
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!
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
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.
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
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.
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
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
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