CONSULTA SQL COM 2 TABELAS

ARES 09/11/2011 18:00:12
#388845
Amigos, boa tarde!

Tenho as seguintes tabelas
vendas
produtos
clientes

Gostaria de colocar em um frm dois listview; 1 com a lista de cliente e quando clicado, abrisse os dados de compra deste cliente na outra listview.
Entretanto, preciso que para os produtos que não vendeu retorne null ou 0. Ou seja, todos os produtos cadastrados, seja com vendas ou não.
A base de dados tem informação de mais de 10 anos, mas as vendas serão somente do ano corrente.

No código está me retornando somente os produtos com vendas realizadas.

veja o código:

Public Sub abre_produto()
Dim scnn As String
Dim newlist As ListItem
Dim nitens As Integer
Dim nomee As String
lista2.ListItems.Clear

nomee = [Ô]NOME[Ô]

mycon.Open [Ô]dsn=asgard_salles[Ô]

With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText

If frminicial.txtemp = [Ô]170[Ô] Then


.CommandText = [Ô]select estoque.codigo, estoque.descricao, vendas.codigo_produto, sum(vendasquantidade) as quantidade, vendas.cliente, vendas.linha, vendas.data from estoque left join vendas on estoque.codigo = vendas.codigo_produto where vendas.cliente = [ô][Ô] & Me.txtcliente & [Ô][ô] and year(vendas.data) = [ô][Ô] & dataa & [Ô][ô] group by estoque.codigo, vendas.descricao, vendas.linha, vendas.cliente ORDER BY ESTOQUE.DESCRICAO[Ô]

Set myrs = .Execute

ElseIf frminicial.txtemp = [Ô]190[Ô] Then

.CommandText = [Ô]select estoque.codigo, estoque.descricao, vendas190.codigo_produto, sum(vendas190.quantidade) as quantidade, vendas190.cliente, vendas190.linha from estoque LEFT join vendas190 on estoque.codigo = vendas190.codigo_produto where vendas190.cliente = [ô][Ô] & Me.txtcliente & [Ô][ô] and year(vendas190.data) = [ô][Ô] & dataa & [Ô][ô] group by estoque.codigo, estoque.descricao, vendas190.codigo_produto, vendas190.cliente, vendas190.linha ORDER BY ESTOQUE.DESCRICAO[Ô]
Set myrs = .Execute

End If

End With
[ô] On Error Resume Next
Do Until myrs.EOF
Set newlist = lista2.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]CODIGO_PRODUTO[Ô]), myrs([Ô]CODIGO_PRODUTO[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]codigo[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]descricao[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]quantidade[Ô])


myrs.MoveNext
Loop


myrs.Close
Set myrs = Nothing
mycon.Close

End Sub

Desde já agradeço.


LLAIA 11/11/2011 10:39:23
#388946
Estranho, pois vc está usando LEFT JOIN. A princípio está certo. Teria como vc subir o BD com as tabelas reduzidas (evidentemente) que permitam a simulação do resultado esperado por vc, para podermos testar o seu código?
ARES 14/11/2011 15:42:24
#389139
Amigo, boa tarde!

Desculpe-me a resposta tardia (estou fechando a minha conclusão de período).

Tendo em vista as diversas variáveis que rodeiam o relatório que tenho que fazer, segue os dados que exporto para o PDV via FTP.

Preciso das informações na horizontal:

Cliente cidade batata tomate abacate banana total
Ricardo Nantes Belo Horizonte 200 100 0 100 R$ 100,00
Jóse das couves Belo Horizonte 0 500 2 20 R$ 250,00

TOTAIS 200 600 2 120 R$ 350,00
Média R$ 10,00 5,00 1,00 7,00

Ou seja, os dados devem ser apresentado desta maneira, com filtro por vendedor e por grupo de produtos

Tenho diversas tabelas;
produtos: CODIGO ;DESCRICAO ;SALDO ;
vendas: LINHA ;CODIGO ;DESCRICAO ;EMBALAGEM ;QUANTIDADE;VALOR TOTAL ;CLIENTE ;DATA ;VENDEDOR ;
clientes: CODIGO ;NOME ;ENDERECO ;BAIRRO ;CIDADE ;UF;CEP ;FONE ;ROTA ;

que podem ser usadas para a criação do relatório acima apresentado. ( a visualização pode ser para impressão ou na tela).

Aceito qualquer sugestão.

Att
Ricardo Nantes
ARES 18/11/2011 10:33:13
#389370
Amigos,

Estou fazendo uma [Ô]gambiarra[Ô] para resolver o problema de imediato até que consiga colocar os dados conforme descrito acima.

Fiz uma planilha no excel e utilizei todas as formulas necessárias para obter o relatório. entretanto, estou com dificuldade em criar um array para que os dados sejam colocados em cada linha da planilha.

Tipo

linha 1 =
linha 2 =

conforme alocação na tabela.

Segue o código:

Private Sub Excel()
Dim Plan As Object [ô]Aplicação Excel
[ô]extraído do vbmania
[ô]acesso em 18/11/2011

[ô]INSTANCIA OBJETO EXCEL NA MEMÓRIA
[ô]**********************************************************************

Set Plan = CreateObject([Ô]excel.application[Ô])

[ô]CHAMA EXCEL / IMPRIME
[ô]**********************************************************************
Plan.Workbooks.Open App.Path & [Ô]\excelptvendascliente006.xlsx[Ô]
Plan.Visible = True
Plan.UserControl = False

[ô]PREENCHE CéLULAS DESEJADAS
[ô]**********************************************************************
[ô]On Error GoTo errlocalizacao
Dim rs As New ADODB.Recordset
Dim mycon1 As New ADODB.Connection
mycon1.Open [Ô]dsn=asgard[Ô]

[ô] [Ô]where supervisor = [ô][Ô] & frminicial.StatusBar1.Panels(2).Text & [Ô][ô][Ô]

Dim sSQL As String
sSQL = [Ô]Select linha, [Ô] & _
[Ô]codigo_produto, [Ô] & _
[Ô]descricao, [Ô] & _
[Ô]embalagem, [Ô] & _
[Ô]quantidade, [Ô] & _
[Ô]valor_total, [Ô] & _
[Ô]cliente, [Ô] & _
[Ô]data, [Ô] & _
[Ô]vendedor [Ô] & _
[Ô]from vendas190 [Ô] & _
[Ô]where vendedor = [Ô] & Val(frminicial.StatusBar1.Panels(2)) & [Ô][Ô]

rs.CursorLocation = adUseClient
rs.Open sSQL, mycon1, adOpenKeyset, adLockOptimistic, adCmdText
rs.ActiveConnection = Nothing

Do While Not rs.EOF

With Plan
[ô] aqui entraria o array para mudar para .range([Ô]a3[Ô])...
.range([Ô]A2[Ô]).Value = rs!linha
.range([Ô]B2[Ô]).Value = (Val(rs!CODIGO_PRODUTO))
.range([Ô]c2[Ô]).Value = rs!descricao
.range([Ô]d2[Ô]).Value = rs!embalagem
.range([Ô]e2[Ô]).Value = rs!quantidade
.range([Ô]f2[Ô]).Value = rs!valor_total
.range([Ô]g2[Ô]).Value = rs!cliente
.range([Ô]h2[Ô]).Value = rs!data
.range([Ô]i2[Ô]).Value = rs!vendedor
End With

rs.MoveNext
Loop



[ô]FECHA REFERÊNCIA AOS OBJETOS
[ô]**********************************************************************
Set Plan = Nothing

saida:
Set rs = Nothing
Set mycmd = Nothing
mycon1.Close
Exit Sub
errlocalizacao:
With Err
If .Number <> 0 Then
MsgBox [Ô]Houve um erro ao gerar os dados do relatório. Favor verificar com o administrativo.[Ô], vbInformation, [Ô]Objetivo[Ô]
.Number = 0
GoTo saida
End If
End With


End Sub

Private Sub Command1_Click()
Call Excel

End Sub

Caso tenham um sugestão.

Att
Tópico encerrado , respostas não são mais permitidas