Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

flavioavilela

Consulta complicada

Recommended Posts

Galera, é o seguinte:

estou fazendo uma janela de filtragem de Vendas por Clientes...

a pessoa digita o nome do cliente e aparece num dbgrid todos os produtos que esse cliente já comprou com seus respectivos nº do pedido, datas das vendas e etc...

tenho uma tabela que está armazenando os dados da venda, como n do pedido, data venda, o cliente, o valor total... e outra tabela que está armazenando os itens da venda, como n do pedido, codigo produto, produto, valor venda desconto, quantidade, subtotal................

estou usando query da peleta bde e consequentemente cada tabela com uma query. E é ai q está minha dúvida: como vou fazer pra fazer essa pesquisa por clientes, e ele ir lá na outra query buscar o cliente q eu quero????????????????? será que eu tenho q salvar da tabela itens de venda, o nome do cliente tb???????? ou eu me guio pelo n do pedido que já tenho nas duas tabelas??? ou como que será feito?????

 

desde já, agradeço a ajuda de todos... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, é o seguinte...

eu preciso fazer uma filtragem para saber quantos produtos um determinado cliente comprou esse mes por exemplo......

alguém pode me dar uma luz???????????????????????

desde já, agradeço a atenção de todos... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Flavio,

 

supondo que você tenha as tabelas... Cliente, Produto, Venda e Venda_Itens....

 

 

SELECT COUNT(COD_PRODUTO) AS QTDE

FROM VENDA, VENDA_ITENS

WHERE VENDA.COD_VENDA = VENDA_ITENS.COD_VENDA

AND VENDA.COD_ASSOCIADO = :COD_ASSOCIADO

 

Query1.ParamByName('cod_associado').AsInteger := StrToInt(edtCodAssociado.Text)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte:...

 

 

SELECT <SEUS CAMPOS>

FROM TAB_CLIENTE, TAB_VENDA,TAB_VENDA_ITENS, TAB_PRODUTO,

WHERE TAB_CLIENTE.COD_CLIENTE = TAB_VENDA.COD_CLIENTE // AQUI VOCÊ FAZ A JOIN ENTRE TAB_CLIENTE E TAB_VENDA

AND TAB_VENDA.NR_VENDA = TAB_VENDA_ITENS.NR_VENDA // AQUI VOCE FAZ A JOIN ENTRE TAB_VENDA E TAB_VENDA_ITENS

AND TAB_VENDA_ITENS.COD_PRODUTO = TAB_PRODUTO.COD_PRODUTO

andTAB_CLIENTE.NOME = :nome // busca pelo nome do cliente

 

Query1.ParambyName('nome'). AsString := edtNome.Text;

 

Nome select voce pode colocar qualquer campo das tabelas TAB_CLIENTE, TAB_VENDA,TAB_VENDA_ITENS, TAB_PRODUTO. Mas lembre-se que voce deve colocar o nome da tabela + . + nome do campo, caso existam campos com nome iguais em tabelas diferentes!

 

Esse sql tem q estar dentro de 1 unico componente query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Flavio,

 

supondo que você tenha as tabelas... Cliente, Produto, Venda e Venda_Itens....

 

 

SELECT COUNT(COD_PRODUTO) AS QTDE

FROM VENDA, VENDA_ITENS

WHERE VENDA.COD_VENDA = VENDA_ITENS.COD_VENDA

AND VENDA.COD_ASSOCIADO = :COD_ASSOCIADO

 

Query1.ParamByName('cod_associado').AsInteger := StrToInt(edtCodAssociado.Text)

 

 

certo... tenho essas tabelas ai mesmo todas criadas...

só que, vamos ver se eu intendi: COD_PRODUTO seria o codigo do produto, VENDA.COD_VENDA seria codigo da venda na tabela venda = codigo da venda na tabela venda_itens e oq seria codigo associado da tabela venda??? esse :cod_associado é um parametro né.....

 

tipo... eu preciso é assim.... eu vou digitar o nome do cliente num edit e informar também um intervalo de datas e outros edits...... dai aparecia os itens que esse cliente comprou nesse intervalo no dbgrid..... saca?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

flavio,

 

seguinte: esse associado na verdade é cliente... é pq aqui no trabalho a gente lida com associados.... rs

 

COD_CLIENTE E NAO COD_ASSOCIADO...

 

BUSCANDO PELO NOME ENTAO...

 

SELECT COUNT(COD_PRODUTO) AS QTDE

FROM VENDA, VENDA_ITENS, CLIENTE

WHERE VENDA.COD_VENDA = VENDA_ITENS.COD_VENDA

AND VENDA.COD_CLIENTE = CLIENTE.COD_CLIENTE

AND CLIENTE.NOME = edtNome.Text

and dt_venda between datetimerpicker1.date and datetimerpicker2.date // periodo entre datas

 

nas suas outras considerações, voce está correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

flavio,

 

seguinte: esse associado na verdade é cliente... é pq aqui no trabalho a gente lida com associados.... rs

 

COD_CLIENTE E NAO COD_ASSOCIADO...

 

BUSCANDO PELO NOME ENTAO...

 

SELECT COUNT(COD_PRODUTO) AS QTDE

FROM VENDA, VENDA_ITENS, CLIENTE

WHERE VENDA.COD_VENDA = VENDA_ITENS.COD_VENDA

AND VENDA.COD_CLIENTE = CLIENTE.COD_CLIENTE

AND CLIENTE.NOME = edtNome.Text

and dt_venda between datetimerpicker1.date and datetimerpicker2.date // periodo entre datas

 

nas suas outras considerações, voce está correto.

a certo rsrs, entendi... só uma coisa: tabela itens_venda, deverá ter o nome do cliente?????????? no meu eu não coloquei, deve ser por isso q estou com tanta dúvida rsrsrs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não... nome do cliente somente na tabela de CLIENTE...

 

você precisa ter o codigo do cliente na sua tabela de vendas...

 

repare nesta linha q coloquei no sql acima.... AND VENDA.COD_CLIENTE = CLIENTE.COD_CLIENTE

 

aqui você faz a join entre as tabelas venda e cliente, sacou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não... nome do cliente somente na tabela de CLIENTE...

 

você precisa ter o codigo do cliente na sua tabela de vendas...

 

repare nesta linha q coloquei no sql acima.... AND VENDA.COD_CLIENTE = CLIENTE.COD_CLIENTE

 

aqui você faz a join entre as tabelas venda e cliente, sacou...

ahhhh sim... nem prestei atenção... mas agora deu tudo certinho....

vlw kra... você saca pakrai...

brigaduuuuuuu

Compartilhar este post


Link para o post
Compartilhar em outros sites

kra, saca só

 

select (Clientes.Nome, Clientes.Codigo, Saida_Produtos_Balcao.Codigo_Cliente,

Saida_Produtos_Balcao.N_Pedido, Itens_Venda_Balcao.N_Pedido) from

Clientes, Saida_Produtos_Balcao

where Clientes.Codigo = Saida_Produtos_Balcao.Codigo_Cliente and

Saida_Produtos_Balcao.N_Pedido = Itens_Venda_Balcao.N_Pedido and

Clientes.Nome = :Nome

 

 

 

está dando erro na sintaxe... oq pode ser????

Compartilhar este post


Link para o post
Compartilhar em outros sites

e ai marcelão... frmz???

consegui solucionar o problema da sintaxe... pesquisou blzinha... só que agora, eu precisava fazer aparecer no dbgrid o q q esse cliente comprou, a data do q ele comprou, o valor dos itens que ele comprou e por ai vai..... aqui aparece só o campo nome, dois campos pedido e dois campos codigo_cliente... como faço pra aparecer os itens que ele comprou????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Flavio,

 

você tem q fazer o seguinte: Lá nas suas clausulas AND, você vai ter q fazer a ligação entre as suas tabelas VENDAS e ITENS DA VENDA... você o nome certinho e faz a ligação usando o codigo da venda...

 

depois disso você coloca os campos q quer mostrar no select...

 

agora veja por exemplo, você colocou isso no seu select... Clientes.Codigo, Saida_Produtos_Balcao.Codigo_Cliente ... esses campos sao iguais, você pode deixar apenas 1... mesmo que eles estejam em algum AND, eles nao precisam ficar no SELECT!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Flavio,

 

você tem q fazer o seguinte: Lá nas suas clausulas AND, você vai ter q fazer a ligação entre as suas tabelas VENDAS e ITENS DA VENDA... você o nome certinho e faz a ligação usando o codigo da venda...

 

depois disso você coloca os campos q quer mostrar no select...

 

agora veja por exemplo, você colocou isso no seu select... Clientes.Codigo, Saida_Produtos_Balcao.Codigo_Cliente ... esses campos sao iguais, você pode deixar apenas 1... mesmo que eles estejam em algum AND, eles nao precisam ficar no SELECT!

a sim... vou tentar fazer aqui então... e já posto se consegui ou não rsrs...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.