DBCombo com busca automática 

Lembra-se do controle DBCombo ?  Há tempos não tocamos neste assunto. Que tal obter o efeito da busca dinâmica em um DBCombo ? 

Funciona assim : Quando você digitar os caracteres na DBCombo , a medida que você digita é feita uma busca automática e exibindo no controle o nome mais próximo do que foi digitado. 

Vamos criar um projeto onde iremos usar dois controles DBCombo , um com o recurso ativo e outro com o controle DBCombo normal . Assim podemos comparar e visualizar o efeito.

1-) Inicie um novo projeto no VB e insira no formulário padrão dois controles DbCombos e dois Controles Data control como no layout abaixo:

 2-) Insira um módulo no seu projeto e a seguir digite o código abaixo no módulo:

Public Sub DBComboAutomatica(dcbo As DBCombo, datacontrol As data, KeyAscii As Integer)

Dim buffer As String
Dim rs As Recordset
Dim criterio As String

buffer = Left(dcbo.Text, dcbo.SelStart) & Chr(KeyAscii)

Set rs = datacontrol.Recordset

criterio = "Left([" & dcbo.BoundColumn & "],"
criterio = criterio & Str(Len(buffer))
criterio = criterio & ") = '" & buffer & "'"

rs.findfirst criterio

If Not rs.nomatch Then
   dcbo.Text = rs(dcbo.BoundColumn)
   dcbo.SelStart = Len(buffer)
   dcbo.SelLength = Len(dcbo.Text)
End If

Set rs = Nothing

End Sub

Este código usa o método FindFirst para localizar no recordset o critério informado na DBCombo. Assim se você digitar a letra M no controle o critério usado será :   Left([Author], 1) = 'm'  

Ao digitar a letra a o critério mudará para : Left([Author], 1) = 'ma'           e assim por diante...

3-) Agora vamos ativar o recurso para o controle DBcombo1. Para isto insira no evento KeyPress deste controle o código a seguir:

Private Sub DBCombo1_KeyPress(KeyAscii As Integer)
   If KeyAscii <> 13 And KeyAscii <> 8 And KeyAscii <> 32 Then
          DBComboAutomatica DBCombo1, Data1, KeyAscii
          KeyAscii = 0
  End If
End Sub

Este código invoca a procedure DBComboAutomatica passando como parâmetros o nome do controle , o nome do controle Data e a tecla pressionada. - DBComboAutomatica DBCombo1, Data1, KeyAscii

Para fazer funcionar vincule os controles Data Control - Data1 e Data2 - a mesma base de dados e a seguir associe cada controle DBCombo ao controle de dados Correspondente:  DBCombo1 ao Data1 e DBCombo2 ao Data2.(Voce vai ter que configurar : DataSource e RowSource ,  ListField e DataField. )

Rode o projeto compare o comportamento dos dois controles. (Não aconselho usar este recurso para uma grande massa de dados...) 

Até mais...