ROTINA GENERICA PARA DATACOMBO
                    Olá comunidade!
Preciso de um auxilio em uma rotina de autopreenchimento de um objeto DATACOMBO que esta funcionando perfeitamente mas eu gostaria de torna-la genérica para outros DATACOMBOS do meu form.
No meu form existem 9 DATACOMBOS, então imaginem 9 rotinas iguais para cada um deles!!!!
Seria possivel criar uma função para chamar de dentro do evento keyup e torna-la genérica para qualquer DATACOMBO?
Exemplo:
Abaixo minha rotina q esta funcionando:
                
            Preciso de um auxilio em uma rotina de autopreenchimento de um objeto DATACOMBO que esta funcionando perfeitamente mas eu gostaria de torna-la genérica para outros DATACOMBOS do meu form.
No meu form existem 9 DATACOMBOS, então imaginem 9 rotinas iguais para cada um deles!!!!
Seria possivel criar uma função para chamar de dentro do evento keyup e torna-la genérica para qualquer DATACOMBO?
Exemplo:
Private Sub cmbprocessador_KeyUp(KeyCode As Integer, Shift As Integer)
AutoPreenchimento(par1,par2,par3)
end SubAbaixo minha rotina q esta funcionando:
Private Sub cmbprocessador_KeyUp(KeyCode As Integer, Shift As Integer)
'AutoFill Datacombo
With cmbprocessador
     txtLen = Len(.Text)
     Select Case KeyCode
     Case vbKeyDelete 'trap these keys to not perform search
     Case vbKeyBack
     Case vbKeySpace
     Case vbKeyHome
     Case Else
          rst_processador.MoveFirst
          Do While Not rst_processador.EOF
             If Trim(UCase(Left(rst_processador!PROCESSADOR_MODELO, txtLen))) = Trim(UCase(.Text)) And Trim(.Text) <> "" Then
                .Text = rst_processador!PROCESSADOR_MODELO & " "
                .SelStart = txtLen
                .SelLength = Len(.Text) - Len(Trim(txtLen))
                Exit Do
             End If
             rst_processador.MoveNext
          Loop
     End Select
End With
End Sub
                    Não entendi muito bem a razão da filtragem de dados no evento KeyUp, pois os DataCombo já posicionam sobre o registro correto mediante a digitação, dependendo apenas de suas propriedades.
Se de fato é um DATACOMBO, seria necessário apenas carregar os dados da tabela e, para isso, basta usar algumas das propriedades do componente em uma função que receba os parà ¢metros:
1 - O objeto Datacombo (byref, of course);
2 - Um objeto Recordset (byref, of course);
3 - A string de conexão com o banco;
4 - A instrução de consulta SQL;
5 - O nome do campo á listar (opcional, com padrão = "display");
6 - O nome do campo para Identidade(opcional, com padrão = "id").
'...
[/c]
'...
[/c]
                
            Se de fato é um DATACOMBO, seria necessário apenas carregar os dados da tabela e, para isso, basta usar algumas das propriedades do componente em uma função que receba os parà ¢metros:
1 - O objeto Datacombo (byref, of course);
2 - Um objeto Recordset (byref, of course);
3 - A string de conexão com o banco;
4 - A instrução de consulta SQL;
5 - O nome do campo á listar (opcional, com padrão = "display");
6 - O nome do campo para Identidade(opcional, com padrão = "id").
'Múdulo (exemplo)
'...
[c]Public Sub MontaCombo(ByRef cmb As DataCombo, _
                      ByRef rst As ADODB.Recordset, _
                      ByVal cns As String, _
                      ByVal sql As String, _
                      Optional ByVal lst As String = "display", _
                      Optional ByVal idt As String = "id")
   If Not rst Is Nothing Then
      If Not rst.State = 0 Then rst.Close
      Set rst = Nothing
   End If
   Set rst = New ADODB.Recordset
   With rst
        .ActiveConnection = cns
        .CursorLocation = adUseClient
        .CursorType = adOpenForwardOnly
        .LockType = adLockReadOnly
        .Source = sql
        .Open
        Set .ActiveConnection = Nothing
   End With
   With cmb
       Set .RowSorce = rst
       .ListField = lst
       .BoundColumn = idt
       If Not rst.RecordCount = 0 Then
          .BoundText = rst.Fields(idt).Value
       End If
   End With
End Sub'...
[/c]
'Formulário (exemplo)
'...
Option Explicit
'...
Private rs() As ADODB.Recordset
'...
[c]Private Sub Form_Load()
   Dim cs As String
   Dim sq As String
   Dim nr As Integer
   cs = "Microsoft.Jet.OLEDB.4.0;Data Source=C:\Bases\mdb.mdb;"
   ReDim rs(5) As ADODB.Recordset
   For nr = 0 To 5
      Set rs(nr) = New ADODB.Recordset
   Next
   sq = "SELECT CODIGO AS ID, DESCRICAO AS DISPLAY FROM TB_CIDADES;"
   MontaCombo DataCombo1, rs(0), cs, sq
   sq = "SELECT CODIGO AS ID, DESCRICAO AS DISPLAY FROM TB_UF;"
   MontaCombo DataCombo2, rs(1), cs, sq
   sq = "SELECT SIGLA AS ID, NOME AS DISPLAY FROM TB_PAIS;"
   MontaCombo DataCombo3, rs(2), cs, sq
   sq = "SELECT CODIGO AS ID, NOME AS DISPLAY FROM TB_VENDEDOR;"
   MontaCombo DataCombo4, rs(3), cs, sq
   sq = "SELECT CODIGO AS ID, NOME AS DISPLAY FROM TB_PRODUTO;"
   MontaCombo DataCombo5, rs(4), cs, sq
   sq = Empty
   cs = Empty
End Sub'...
[/c]
                    Olá professor, tudo bem?
Agradeço por sua resposta!
Na verdade, o efeito desta rotina é um autocompletar quando se estiver digitando dentro de uma DATACOMBO.
Sei que se mudar a propriedade Style de 0 para 1, podemos ver que ao digitar dentro do DATACOMBO, a procura é efetuado automaticamente na lista mas não dentro do campo, por isso a rotina acima.
Sendo assim quando inserido a rotina acima no evento keyup, o resultado é obtido perfeitamente mas não acredito ser profisional digita-la em todos eventos keyup dos DATACOMBO existentes no meu form, entende?
Por isso imaginei esta rotina em forma de função, apenas citando ela dentro dos keyups com os parametros necessários para seu funcionamento como o nome do recordset, o campo para pesquisa e o nome do objeto atual ( activecontrol ).
Obrigado.
                
            Agradeço por sua resposta!
Na verdade, o efeito desta rotina é um autocompletar quando se estiver digitando dentro de uma DATACOMBO.
Sei que se mudar a propriedade Style de 0 para 1, podemos ver que ao digitar dentro do DATACOMBO, a procura é efetuado automaticamente na lista mas não dentro do campo, por isso a rotina acima.
Sendo assim quando inserido a rotina acima no evento keyup, o resultado é obtido perfeitamente mas não acredito ser profisional digita-la em todos eventos keyup dos DATACOMBO existentes no meu form, entende?
Por isso imaginei esta rotina em forma de função, apenas citando ela dentro dos keyups com os parametros necessários para seu funcionamento como o nome do recordset, o campo para pesquisa e o nome do objeto atual ( activecontrol ).
Obrigado.
                        Tópico encerrado , respostas não são mais permitidas