Visual Basic 6  - Uma rotina para preencher controles de lista : combobox , listbox , etc...


Ao utilizar DAO em seus projetos , uma tarefa que quase sempre você vai precisar fazer é carregar um controle lista : ComboBox , ListBox , etc..

É importante você ter sempre a mão uma rotina que faça este serviço , uma rotina que seja a mais genérica possível. Existem diversas maneiras de você fazer isto , eu vou mostrar nesta dica uma delas.

Nesta rotina você informa o nome do controle que deseja preencher , o nome da Tabela origem dos dados , o nome do campo da tabela que será usado na propriedade ItemData ( precisa ser um campo único) , o nome do campo que deseja exibir no controle .

O nome que darei a rotina será CarregaControle. A estrutura da sub-rotina é a seguinte:

CarregaControle(Controle As Object, Tabela, CodigoCampo, DescricaoCampo As String)

Nota: A propriedade ItemData define um número específico para cada item de um controle ListBox e ComboBox

'Preenche combobox e fill listbox
'como usar: CarregaControle NomeControle, "Nometabela", "CodigodoCampo","DescricaoCampo"
'
'CodigoCampo : é o identificador unico do campo . Ex: CodigoCliente
'DescricaoCampo : e o campo texto para exibir no controle. Ex: NomeCliente
'
Public Sub CarregaControle(Controle As Object, Tabela, CodigoCampo, DescricaoCampo As String)

On Error GoTo Erro

Dim rs As Recordset   'Declara um recorset
Dim sql As String       'Declara uma string para a consulta SQL

Controle.Clear
'limpa o controle
sql = ""
'limpa a string SQL
'Define a string SQL para selecionar os registros
sql = "SELECT " & CodigoCampo & ", " & DescricaoCampo & " FROM " & Tabela
'abre o recorddset com os dados retornados
Set rs = db.OpenRecordset(sql, dbOpenForwardOnly)

With rs
Do Until .EOF 'percorre o recordset ate o fim

  'inclui os itens correspondentes
  Controle.AddItem rs(DescricaoCampo)
  Controle.ItemData(Controle.NewIndex) = rs(CodigoCampo)
  .MoveNext

  Loop
  'fecha o recordset
  .Close
End With

Set rs = Nothing 'libera o recordset
Exit Sub

Erro: 'se houver erros faz o tratamento

If Err.Number <> 0 Then
  MsgBox ("Erro #: " & Str(Err.Number) & Err.Description)
  Exit Sub
End If

End Sub

Voce deve abrir o banco de dados e quando desejar preencher uma combobox e uma listbox basta invocar a rotina. No exemplo acima estou abrindo o banco de dados Teste.mdb e vou preencher os controles com os dados da tabela Pilotos . Iremos usar o campo CodigoPiloto para atribuir a propriedade ItemData e o campo NomePiloto para exibir no controles de lista.

O projeto exemplo usa uma combobox , uma listbox e um botão de comando.

O código do formulário abre o banco de dados e invoca a rotina duas vezes , uma para preencher a combo e a outra para preencher a listbox.

O código para fazer a chamada da função pode ser o seguinte:

Abaixo eu estou preenchendo uma combo - combo1 e uma listbox - list1. Usando conexão DAO.

CarregaControle Combo1, "Authors", "Au_ID", "Author"   

Private Sub Command1_Click()

Set db = DBEngine.OpenDatabase("c:\teste\Biblio.mdb")

CarregaControle Combo1, "Authors", "Au_ID", "Author"
CarregaControle List1, "Authors", "Au_ID", "Author"
End Sub

Nota: Você deve declarar na seção General Declarations do seu formulário a variável objeto db:

Dim db As DAO.Database

Apenas lembrando que se você quiser pode usar uma conexão ADO , basta fazer os ajustes.

O código para abrir uma conexão ADO é :

Dim cnn As New ADODB.Connection
cnn.Open "Provider = Microsoft.Jet.OLEDB.3.51;Data Source = C:\teste\Biblio.mdb;"

Até a próxima.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti