Desculpe intrometer aki. Acho q tenho uma função aki pronta pra você usar pro list view Se não for issi q estah procurando me desculpe: 'Esta funçao serve para conectar o recordset
Function GerarComando(Texto As String) As ADODB.Command
Dim Cmd As New ADODB.Command
Cmd.ActiveConnection = Conexao
Cmd.CommandText = Texto
Cmd.CommandType = adCmdText
Set GerarComando = Cmd
Set Cmd = Nothing
End Function
'Com esta funcao você pode listar com um sql qualquer objeto listview. Ele cria a tabela com seu respectivo tamanho calculado e depois conecta o recordset e envia as informações.
Sub ListarSQL(Obj As ListView, Texto As String, Tela As Form)
Dim Rs As New ADODB.Recordset
Dim clmx As ColumnHeader
Dim Itmx As ListItem
Dim I As Long
Tela.MousePointer = vbHourglass
Rs.Open GerarComando(Texto), , adOpenStatic
Obj.ListItems.Clear
Obj.ColumnHeaders.Clear
For I = 0 To Rs.Fields.Count - 1 Step 1
If Rs.Fields(I).Type = adBigInt Or Rs.Fields(I).Type = adInteger Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, 800)
ElseIf Rs.Fields(I).Type = adVarWChar Or Rs.Fields(I).Type = adChar Then
If Rs.Fields(I).DefinedSize >= 100 Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 30)
ElseIf Rs.Fields(I).DefinedSize >= 50 Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 50)
ElseIf Rs.Fields(I).DefinedSize >= 5 Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 120)
Else
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 600)
End If
ElseIf Rs.Fields(I).Type = adDate Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 250)
ElseIf Rs.Fields(I).Type = adBoolean Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, Rs.Fields(I).DefinedSize * 300)
ElseIf Rs.Fields(I).Type = 203 Then
Set clmx = Obj.ColumnHeaders.Add(, , Rs.Fields(I).Name, 1000)
Else
MsgBox "O Campo " & Rs(I).Name & " é de um tipo desconhecido"
End If
Next I
If Rs.RecordCount > 0 Then
Rs.MoveFirst
Do While Not Rs.EOF
Set Itmx = Obj.ListItems.Add(, , Rs(0))
For I = 1 To Rs.Fields.Count - 1
If Rs(I).Type = adBoolean Then
If Rs(I) = True Then Itmx.SubItems(I) = "SIM" Else Itmx.SubItems(I) = "NÃO"
Else
If Not IsNull(Rs(I)) Then
Itmx.SubItems(I) = Rs(I)
End If
End If
Next I
Rs.MoveNext
Loop
End If
Set Rs = Nothing
Tela.MousePointer = vbDefault
End Sub
'Agora se você quer colocar uma cor eu tenho outra função aki:
Sub CorGridNovo(Obj as Listview,cor As ColorConstants, Chave As Long)
Dim A As Integer
Obj.ListItems.Item(Chave).ForeColor = cor
For A = 1 To Obj.ColumnHeaders.Count -1 Step 1
Obj.ListItems(Chave).ListSubItems.Item(A).ForeColor = cor
Next A
End Sub Realmente para backcolor não funciona mas para forecolor sim Se tiver algum erro me avisa. Mais uma vez desculpe se não for isso e pela intromissao.