ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Consulta com join em 2 tabelas identificando tabelas

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 9:23 am    Assunto: Consulta com join em 2 tabelas identificando tabelas Responder com Citação

Bom dia,

Estou com um consulta nas tabelas de contas a pagar e receber e estou exibindo em uma Grid mas eu gostaria de saber como eu posso pintar de vermelho as linhas que são do contas a pagar.

Como vou conseguir identifcar de qual tabela é determinado campo?
_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Nov 28, 2013 9:43 am    Assunto: Responder com Citação

posta como vc ta selecionando os registros
no mysql, podemos fazer assim:

Código:
SELECT r.*, "R" AS tipo
FROM receber
UNION
SELECT p.* "P" AS tipo
FROM pagar


esse select ira criar um campo "virtual" chamado tipo com conteudo "R" ou "P" dependendo da tabela

lembrando q no UNION os campos devem ser iguais nas 2 tabelas
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 10:42 am    Assunto: Responder com Citação

Código:
      Screen.Cursor := crHourGlass;
      begin
        if cbConta.Text = '' then
          conta := '%'
        else
         conta := cbConta.Text;
      end;

      if edtReferente.Text = '' then
        referente := '%'
      else
        Referente := edtReferente.Text;

      Close;
      S := TStringList.Create;

      S.Clear;
      S.Add(' select receber.quitada, receber.datapagamento, receber.datavencimento,                       ');
      S.Add(' receber.referente, receber.contasid, receber.total from contasreceber  receber               ');
      S.Add(' join contas on (contas.contasid = receber.contasid)                                          ');
      S.Add(' where ' + datareceber + ' between :data1 and :data2 and receber.quitada like :quitadareceber ');
      S.Add(' and descricao like :recebercontas and receber.referente like :receberreferente               ');
      S.Add(' union all                                                                                    ');
      S.Add(' select pagar.quitada, pagar.datapagamento, pagar.datavencimento,                             ');
      S.Add(' pagar.referente, pagar.contasid, pagar.total from contaspagar pagar                          ');
      S.Add(' join contas on (contas.contasid = pagar.contasid)                                            ');
      S.Add(' where ' + datapagar  + ' between :data1 and :data2 and  pagar.quitada like :quitadapagar     ');
      S.Add(' and descricao like :pagarcontas and pagar.referente like :pagarreferente                     ');

      CommandText := S.Text;

      Params.ParamByName('data1').AsDate              := DataInicial;
      Params.ParamByName('data2').AsDate              := DataFinal;
      Params.ParamByName('quitadareceber').AsString   := 'S';
      Params.ParamByName('quitadapagar').AsString     := 'S';
      Params.ParamByName('recebercontas').AsString    := conta;
      Params.ParamByName('pagarcontas').AsString      := conta;
      params.ParamByName('receberreferente').AsString := '%'+referente+'%';
      params.ParamByName('pagarreferente').AsString   := '%'+referente+'%';

_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Nov 28, 2013 11:14 am    Assunto: Responder com Citação

os dados ja estao sendo mostrados no dbGrid?

se estao, basta vc configurar a propriedade OnDrawCollumCell
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 12:23 pm    Assunto: Responder com Citação

Citação:
os dados ja estao sendo mostrados no dbGrid?

se estao, basta vc configurar a propriedade OnDrawCollumCell


Sim, os dados são exibidos! Sim, eu vou usar a propriedade OnDrawCollumCell mas qual parametro eu vou passar para que o delphi possa identificar que é uma contas a receber e uma conta a pagar.
_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Nov 28, 2013 12:57 pm    Assunto: Responder com Citação

no seu BD nao permite criar "campos virtuais" no select?
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 12:58 pm    Assunto: Responder com Citação

Meu BD é firebird com dbExpress.
_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Nov 28, 2013 1:08 pm    Assunto: Responder com Citação

tenta fazer um select assim (ou alguma variacao)

SELECT cod_cliente, "R" AS tipo FROM receber

veja se funciona (pesquise na net sobre como criar esses campos)
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 1:16 pm    Assunto: Responder com Citação

Testando no ibexpert funcionou assim.

Código:
select receber.quitada, receber.datapagamento, receber.datavencimento, receber.referente, receber.contasid, receber.total, cast ('R' as char(1))
 from contasreceber receber
join contas on (contas.contasid = receber.contasid)
where receber.datavencimento <= :data and receber.quitada = 'S' and contas.descricao like :contas
 union all

select pagar.quitada, pagar.datapagamento, pagar.datavencimento, pagar.referente, pagar.contasid, pagar.total, cast ('P' as char(1))
from contaspagar pagar
join contas on (contas.contasid = pagar.contasid)
     
where pagar.datavencimento <= :data and  pagar.quitada = 'S'  and contas.descricao like :contas2

_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
oneshotbr
Colaborador
Colaborador


Registrado: Quarta-Feira, 6 de Mai de 2009
Mensagens: 1948
Localização: Taubaté - SP

MensagemEnviada: Qui Nov 28, 2013 1:46 pm    Assunto: Responder com Citação

A consulta ficou assim e deu certo.

Código:
S.Add(' select receber.quitada, receber.datapagamento, receber.datavencimento,                       ');
      S.Add(' receber.referente, receber.contasid, receber.total, cast ( ''R''  as char(1))                ');
      S.Add(' from contasreceber  receber                                                                  ');
      S.Add(' join contas on (contas.contasid = receber.contasid)                                          ');
      S.Add(' where ' + datareceber + ' between :data1 and :data2 and receber.quitada like :quitadareceber ');
      S.Add(' and descricao like :recebercontas and receber.referente like :receberreferente               ');
      S.Add(' union all                                                                                    ');
      S.Add(' select pagar.quitada, pagar.datapagamento, pagar.datavencimento,                             ');
      S.Add(' pagar.referente, pagar.contasid, pagar.total, cast (''P'' as char(1))                        ');
      S.Add(' from contaspagar pagar                                                                       ');
      S.Add(' join contas on (contas.contasid = pagar.contasid)                                            ');
      S.Add(' where ' + datapagar  + ' between :data1 and :data2 and  pagar.quitada like :quitadapagar     ');
      S.Add(' and descricao like :pagarcontas and pagar.referente like :pagarreferente                     ');


Obrigado!

Agora estou tentando somar só os que o meu novo campo é igual à R
_________________
AMD Phenom II X4 960T 3.00 GHz - 8 GB DDR III - HD 1000 GB SATA - GeForce GTX 650 TI GDDR 5 - Monitor 21,5" Full HD - Kubuntu 14.04 + Windows 7 Professional x64.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB