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...