Notifications
Clear all

ListView com dados do Access de uma mesma coluna

5 Posts
3 Usuários
0 Reactions
1,293 Visualizações
(@rbfarina)
Posts: 0
New Member
Topic starter
 

Boa Noite!
Sou novo no fórum, já pesquisei bastante no fórum e na internet mas não encontro uma solução para meu problema.
Vamos lá!

Tenho um BD no access nele tenho uma tabela de saldo de meus produtos onde tenho um ID, o N° do frasco deste ID, fornecedor, classificação, e data de validade do fornecedor.
A conexão do Excel e o Access esta tranquilo o meu problema é que quero criar um LIstView com os dados, pois, quero apresentar o numero de registros do ID em função do tempo, ou seja exemplo tenho 300 do ID sendo que 10 estão vencidos, 30 estão entre a data e 30 dias para vencer, 90 entre 30 e 60 dias ... O listView iria aprsentar uma Lista com
ID Vencido <30 <60 <90 < 120
1 ___ 10 _ 30 _ 90 _50 _ 120

Abaixo o que desenvolvi mas não sei como fazer o filtro para os diversos tempos

Private Sub UserForm()

  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim rs2 As New ADODB.Recordset


      Dim data_calculada As Date
      data_calculada = DateSerial(Year(Now()), Month(Now()), Day(Now()) + 30)
      Dim data1calculada As Date
      data1_calculada = DateSerial(Year(Now()), Month(Now()), Day(Now()) + 30) 
    
     cn.Open str_cnn

    rs.Open "SELECT COUNT(Itens.ID) AS ContarDeID, Itens.Descricao, Itens.ID, dt_fornecedor FROM Itens INNER JOIN Saldo ON Itens.ID = Saldo.ID GROUP BY Itens.Descricao, Saldo.Status,saldo.dt_fornecedor, Itens.ID HAVING Saldo.Status= 'Recebido' AND saldo.dt_fornecedor < #" & date & "# ORDER BY Itens.ID", cn, adOpenForwardOnly, adLockReadOnly
    rs2.Open "SELECT COUNT(Itens.ID) AS ContarDeID, Itens.Descricao, Itens.ID, dt_fornecedor FROM Itens INNER JOIN Saldo ON Itens.ID = Saldo.ID GROUP BY Itens.Descricao, Saldo.Status,saldo.dt_fornecedor, Itens.ID HAVING Saldo.Status= 'Recebido' AND saldo.dt_fornecedor between #" & data_calculada & "# AND  #" & data1_calculada & "# ORDER BY Itens.ID", cn, adOpenForwardOnly, adLockReadOnly

    While Not rs.EOF
          Set li = ListView1.ListItems.Add(Text:=rs!ID)
          Set si = li.ListSubItems.Add(Text:=rs!ContarDeID)
 While Not rs.EOF
          Set si = li.ListSubItems.Add(Text:=rs2!ContarDeID)

        rs2.movenext

        rs.MoveNext 
    Wend
    Wend
    rs.Close
    rs2.Close
    cn.Close
    Set rs = Nothing
    Set rs2 = Nothing
    Set cn = Nothing
End Sub

Obrigado

Ricardo

 
Postado : 28/12/2015 8:53 pm
(@mprudencio)
Posts: 0
New Member
 

Crie uma consulta que filtre por data de vencimento.

Ou importe sua tabela de produtos e classifique por data de vencimento.

Outra coisa nao tem pq fazer isso no excel basta criar uma consulta no acess, e levar o resultado para um relatorio, ou ate mesmo se quiser mesmo em excel exportar o resultado da consulta para o excel.

 
Postado : 30/12/2015 1:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Voce que no mesmo listview as informações por coluna? Poste um modelo de como estão as informações (estrutura de se mdb) e como espera "ver" as informações; altere dados que julgar necessário para ficticios, assim ficará mais facil obter uma resposta que lhe auxilie na empreitada

 
Postado : 30/12/2015 1:54 pm
(@rbfarina)
Posts: 0
New Member
Topic starter
 

Obrigado pelas dicas !

Vou testar!

Abraço
Ricardo

 
Postado : 05/01/2016 8:23 pm
(@rbfarina)
Posts: 0
New Member
Topic starter
 

Agradeço as dicas,

Quebrei um pouco a cabeça e consegui resolver com este código meu problema

Sub update_list()
    ListView1.ListItems.Clear
    rs.Open "SELECT DISTINCT Itens.ID, Itens.Descricao FROM Itens INNER JOIN Saldo ON Itens.ID = Saldo.ID WHERE Saldo.status In ('Aberto','Recebido')", cn, adOpenForwardOnly, adLockOptimistic
    While Not rs.EOF
        
        mostra = False
        
        rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status In ('Aberto','Recebido') AND [dt_validade]-Date()>=0 and [dt_validade]-Date()<=90", cn, adOpenForwardOnly, adLockOptimistic
           venc_next_90 = rs2!ContarDeID
        rs2.Close
       
        If CheckBox1.Value = True And venc_next_90 > 0 Then mostra = True
        If CheckBox1.Value = False Then mostra = True
       
       If mostra Then
       
                Set Li = ListView1.ListItems.Add(Text:=rs!ID)
                Set Si = Li.ListSubItems.Add(Text:=rs!descricao)
                                
                rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status='Aberto'", cn, adOpenForwardOnly, adLockOptimistic
                    qtd_aberto = rs2!ContarDeID
                rs2.Close
                Set Si = Li.ListSubItems.Add(Text:=qtd_aberto)
                
                
                rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status='Recebido'", cn, adOpenForwardOnly, adLockOptimistic
                    qtd_rec = rs2!ContarDeID
                rs2.Close
                Set Si = Li.ListSubItems.Add(Text:=qtd_rec)
                
                
                rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status In ('Aberto','Recebido') AND [dt_validade]-Date()<0", cn, adOpenForwardOnly, adLockOptimistic
                    qtd_venc = rs2!ContarDeID
                rs2.Close
                Set Si = Li.ListSubItems.Add(Text:=qtd_venc)
            
                v1 = "0,31,61,91,121"
                v2 = "30,60,90,120,180"
                Dim v1_a() As String
                Dim v2_a() As String
                v1_a = Split(v1, ",")
                v2_a = Split(v2, ",")
                For vb = 0 To UBound(v1_a)
                    rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status In ('Aberto','Recebido') AND [dt_validade]-Date()>=" & v1_a(vb) & " and [dt_validade]-Date()<=" & v2_a(vb), cn, adOpenForwardOnly, adLockOptimistic
                        Set Si = Li.ListSubItems.Add(Text:=rs2!ContarDeID)
                    rs2.Close
                Next vb
            
                rs2.Open "SELECT Count(Saldo.ID) AS ContarDeID FROM Saldo WHERE Saldo.ID=" & rs!ID & " AND Saldo.status In ('Aberto','Recebido') AND [dt_vvalidade]-Date()>180", cn, adOpenForwardOnly, adLockOptimistic
                    qtd_180 = rs2!ContarDeID
                rs2.Close
                Set Si = Li.ListSubItems.Add(Text:=qtd_180)
        End If
        
        
        rs.MoveNext
    Wend
    rs.Close
End Sub

Obrigado
Att,

Ricardo Farina

 
Postado : 06/01/2016 6:30 pm