AUTO COMPLETAR COM TEXTBOX ???

XAVIER 23/05/2013 16:16:02
#423952
Olá pessoal!

Como fazer um campo textbox auto comletar ?

Obrigado.
PROFESSOR 26/05/2013 20:05:41
#424054
Até que tem. Um exemplo simples pode ser assim:

Option Explicit

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim sText As String
Dim xText As String
With Text1
If Not (KeyAscii = vbKeyBack Or _
KeyAscii = vbKeyEscape Or _
KeyAscii = vbKeyReturn) Then
If .SelLength > 0 Then
sText = Left$(.Text, .SelStart) & Chr$(KeyAscii)
Else
sText = .Text & Chr$(KeyAscii)
End If
xText = Completa(sText)
If (Len(Trim$(xText)) = 0) Then
.SelStart = Len(sText)
.SelLength = Len(.Text) - .SelStart + 1
Else
.Text = xText
.SelStart = Len(xText) + 1
End If
KeyAscii = 0
End If
End With
End Sub

Public Function Completa(procura As String) As String
Dim m(10) As String
m(0) = [Ô]koolsid[Ô]
m(1) = [Ô]hack[Ô]
m(2) = [Ô]vbfnewcomer[Ô]
m(3) = [Ô]luca[Ô]
m(4) = [Ô]let me in[Ô]
m(5) = [Ô]blah blah[Ô]
m(6) = [Ô]kool[Ô]
m(7) = [Ô]hacker[Ô]
m(8) = [Ô]ataba[Ô]
m(9) = [Ô]Etc...[Ô]
Dim ret As String
Dim iPos As Long
For iPos = 0 To UBound(m)
If (LCase(Mid$(m(iPos), 1, Len(procura))) = LCase$(procura)) Then
ret = m(iPos)
Exit For
End If
Next
Completa = ret
End Function


Com algumas alterações, e acrescidos os tratamentos possíveis á KeyPress, pode ser adaptado para que a lista venha desde uma base de dados, e mais alterado ainda, pode ser um UserControl similar á um TextBox.
WIRCAO 27/05/2013 09:41:01
#424072
Coloca um Listbox no form e preenche o mesmo de acordo com os dados que queres:

[ô]No evento Form_Load
[ô]Preenche o Listbox
CON_NOTA [ô]sub conexão
Dim Tbsql As New ADODB.Recordset
Dim CONSULTASQL As String
CONSULTASQL = [Ô]SELECT * from TAB_PRODUTOS order by codigo asc[Ô] [ô]seleciona o campo desejado (no exemplo [Ô]codigo[Ô])
Set Tbsql = CON.Execute(CONSULTASQL)
Do Until Tbsql.EOF
List1.AddItem Tbsql([Ô]codigo[Ô])
Tbsql.MoveNext
Loop


[ô]No evento Change do campo desejado
[ô]codigo é o textbox para auto completar

Dim POS As Long
List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal CStr(codigo.Text))

If List1.ListIndex = -1 Then
POS = codigo.SelStart
Else
POS = codigo.SelStart
codigo.Text = List1
codigo.SelStart = POS
codigo.SelLength = Len(codigo.Text) - POS
End If
RODOLFOREJ 16/06/2013 21:12:32
#424856
Amigos, alguem pode me ajudar com isso, queria aquela pesquisa dinamica sabe, que busca a coluna de nome no banco de dados acess, alguem pode passar um passo a passo ou dizer onde encontro, sou novato e num sei de nada ainda rsrs..

obrigado.
ACCIOLLY 17/06/2013 17:22:16
#424893
Resposta escolhida
Vou te dar uma dica muito simples e eficaz! rsrsrs

se vc estiver utilizando um Data Control pode fazer o seguinte:

Utilize este código no evento change do textbox

Private sub Text1_change()

Dim SQL as String
Dim Criterio as String

Criterio = Chr$(39) & Text1.Text & [Ô]*[Ô] & Chr(39)

SQL = [Ô]Select * From sua_tabela Where coluna_para_fazer_Pesquisa Like[Ô] & Criterio

Data1.RecordSource = SQL
Data1.Refresh

End Sub


Este código fará com que a pesquisa seja realizada na hora em que digitar uma letra, ou seja, se vc digitar a letra [Ô]A[Ô] serão filtrados todos os registros que começam com a letra [Ô]A[Ô]. Depois digitando a letra [Ô]L[Ô] ou seja [Ô]AL[Ô] serão filtrados todos os registros que começam com as letras [Ô]AL[Ô]. Daí vc vai digitando até achar o registro certo. Ex: Digitando [Ô]ALICE[Ô], você terá todas as alices gravadas no seu banco de dados.

Mas não se esqueça que o text1 não pode estar vinculado a nenhum field de banco de dados muito menos ao data control. ;)

se vc quiser pode colocar esse código no evento click de um botão. a diferença é que a pesquisa só será realizada quando vc clicar neste botão e não quando for digitando.

você também pode utilizar esses comandos SQL em outros controles de acesso a dados. Mas não exatamente assim. rsrsrs

Pode também utilizar uma instrução SQL para filtrar como é feito no dataenvironment:

DataEnvironment1.Rs_comand_do_DataEnvironment.Filter = [Ô]Campo_tabela Like [ô] [Ô] & text1.text & [Ô] %[ô] [Ô]

viu só! com uma simples linha!
Tópico encerrado , respostas não são mais permitidas