Convidado 2/1/2013, 16:01
Boas Rafael, ListView é totalmente diferente de listBox...Crie uma função para o carregamento da lista, e nesta crie consultas VBA com o critério que deseja,
Neste exemplo podes observar que utilizo duas SQL's, uma para uma data no form e outra para a data do sistema, e direciono para o caso específico.
Então, crie uma consulta e SQL/VBA, aplique os critérios que deseja.. e no click do botão chame a função: Call fLoadList
- Código:
'====================================================================================================================================
'Códigos utilizados para a listView
'====================================================================================================================================
Private Function fLoadList()
On Error GoTo TrataErro
Dim StrAno As String
StrAno = Nz(Me.cboAno.Value, "")
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Variáveis
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim rst As DAO.Recordset
Dim I As Integer
Dim StrSQL As String
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Carrega a SQL para o recordsource
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If StrAno <> "" Then
'SQL para tblAlunos
StrSQL = "SELECT ID_Mens, Aluno_ID, CpMensalidade, CpEmissao, Format(CpValor,'Currency') as Valor1, Format(CpLanche,'Currency'), CpVencimento, CpDataPagto," _
& " Format(CpValorPago,'Currency') As Valor ,IIf([CpSituaçao]=-1,'PAGO ','DEVEDOR') AS Expr2 ," _
& " Format(cpVencimento,'yyyy') as AnoRef, Format((CpValor-CpValorPago) + CpLanche,'Currency') as Resid" _
& " FROM tblMensalidade WHERE Aluno_Id = " & Me.tx3 & " And Format(cpVencimento,'yyyy') = '" & StrAno & "'" _
& " Order By ID_Mens;"
Else
'SQL para tblAlunos
StrSQL = "SELECT ID_Mens, Aluno_ID, CpMensalidade, CpEmissao, Format(CpValor,'Currency') as Valor1, Format(CpLanche,'Currency'), CpVencimento, CpDataPagto," _
& " Format(CpValorPago,'Currency') As Valor ,IIf([CpSituaçao]=-1,'PAGO ','DEVEDOR') AS Expr2 ," _
& " Format(cpVencimento,'yyyy') as AnoRef, Format((CpValor-CpValorPago) + CpLanche,'Currency') as Resid" _
& " FROM tblMensalidade WHERE Aluno_Id = " & Me.tx3 & " And Format(cpVencimento,'yyyy') = '" & Year(Date) & "'" _
& " Order By ID_Mens;"
End If
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Carrega o recordset basedo na SQL
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Set rst = CurrentDb.OpenRecordset(StrSQL, dbOpenDynaset)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Limpa todos os ítens lista.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Para a lstMensalidade
lvxObj.ListItems.Clear
'Para a lstMensalidade
'lvxObj_1.ListItems.Clear
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Checa os valores presentes no recordset
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If rst.BOF Then
' Se não foram retornado registros.. não há necessidade de adicionar os ítens na lista
Else
'Se existe registros presentes.. adiciona registros na lista
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Loop através de registros, adicionando cada item
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rst.MoveFirst
While Not rst.EOF
'Loop através de cada campo no conjunto de registros
For I = 0 To rst.Fields.Count
If I = 0 Then
' Seta o valor e imagem para a primeira coluna, para recolocar o incone, retirar o ultimo parênteses e retirar a aspa simples
Set lstItem = lvxObj.ListItems.Add(, , Nz(Trim(rst(I)))) ', , "img3")
' Seta o tooltiptext para o primeiro item
lstItem.ToolTipText = rst(I)
'Seta a primeira coluna como BOLD (Está desabilitado)
lstItem.Bold = True
'====================================================================
ElseIf I < rst.Fields.Count Then
' set the subsequent columns, known as subitems.
lstItem.SubItems(I) = Nz(Trim(rst(I))) ', "")
End If
' adiciona novo campo caso exista no recordset
Next I
' adiciona o próximo registro
rst.MoveNext
Wend
End If
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' Encerra e limpa o rst
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
rst.Close
'====================================================================================
'Carrega o ícone para a segunda coluna de acordo com a quantidade de linhas da lista
For I = 1 To lvxObj.ListItems.Count
' lvxObj.ListItems(i).ListSubItems(1).ReportIcon = 1
Next I
'====================================================================================
Me.MudaCor
If Classifica = True Then Exit Function
Me.ClassificaColuna
Exit Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Tratamento de Erros
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exit_TrataErro:
DoCmd.Hourglass False
DoCmd.Echo True
Exit Function
TrataErro:
Select Case err.Number
Case 3075
Resume Next
Case 3464
Resume Next
Case 91
Resume Next
Case Else
DoCmd.Hourglass False
DoCmd.Echo True
MsgBox "Erro Gerado no: frmAlunos (btnNovaMat_Click)" _
& vbNewLine & "Erro Número: " & err.Number _
& vbNewLine & "linha: " & Erl _
& vbNewLine & "Descrição: " & err.Description _
& vbNewLine & "Por favor contate o Administrador de Sistema.", vbCritical, err.Number & ", linha:" & Erl
End Select
End Function
Cumprimentos.