REALIZAR PESQUISA AO PARAR DE DIGITAR NO TEXTBOX

JLSMA 27/06/2013 15:14:34
#425311
BOA TARDE

GOSTARIA DE VERIFICAR SE é POSSÍVEL INCLUIR ALGUMA INSTRUÇÃO NO TEXTBOX ONDE EU POSSA REALIZAR A PESQUISA NO BANCO DE DADOS ASSIM QUE PARAR DE DIGITAR

ESTOU USANDO ESTE COMANDO NO TEXTBOX

Private Sub TxtConsultaDescricao_KeyUp(KeyCode As Integer, Shift As Integer)
LblInforma.Caption = [Ô]CONSULTA DO MOVIMENTO GERAL POR DESCRIÇÃO[Ô]
If TxtConsultaDescricao <> Empty Then
CarregaFlexPesquisa
Else
CarregaFlex
End If
End Sub

DESTA FORMA FICA MUITO LENTO POISA A CADA TECLA PRESSIONADA A PESQUISA é REALIZADA, POR ISSO PRECISO REALIZAR ESTA ALTERAÇÃO ONDE A RESQUISA SEJA INICIADA QUANDO O USUARIO PARA DE TECLAR, ISSO SEM USAR BOTOES OU TECLAS ADICIONAIS

TENTEI COLOCAR UM TIMER ONDE ELE ZERA A CADA TECLA DIGITADA MAS NÃO FUNCIONOU

Private Sub TxtConsultaDescricao_KeyUp(KeyCode As Integer, Shift As Integer)
Somatempo = 0
If SomaTempo > 0 Then
LblInforma.Caption = [Ô]CONSULTA DO MOVIMENTO GERAL POR DESCRIÇÃO[Ô]
If TxtConsultaDescricao <> Empty Then
CarregaFlexPesquisa
Else
CarregaFlex
End If
End If
End Sub

Private Sub Timer1_Timer()
SomaTempo = SomaTempo + 1
End Sub

Obrigado

JAIR
NALDOXD 27/06/2013 15:58:27
#425314
Bom, muito utilizado é o evento chamado LostFocus...
JLSMA 27/06/2013 16:40:37
#425318
BOA NALDOXD

ENTÃO NA VERDADE O CURSOS NÃO SAI DA DA CAIXA DE TEXTO,

PENSO ASSIM
AO DIGITAR é PRESSIONADO UMA TECLA SEGUIDA DA OUTRA, CERTO?
SE HOUVER UM INTERVALO DE TEMPO ENTRE O QUE FOI DIGITADO E O CURSOR ESTIVER PARADO ELE REALIZA A CONSULTA.

UM EXEMPLO
AO DIGITAR [Ô]JAIR[Ô] O CURSOR FICOU PARADO NA POSIÇÃO 5 DA CAIXA DE TEXTO E SE NADA FOR DIGITADO APÓS 0,02 SEGUNDOS ELE REALIZA A PESQUISA.

ISSO PODE SER EM QUALQUER POSIÇÃO DA CAIXA DE TEXTO O PONTO é O CURSOR FICOU PARADO COM ALGO DIGITADO INICIA A PESQUISA ... SEM TER QUE COLOCAR UM BOTÃO PARA CLICAR TIPO PESQUISAR

ISSO JÁ ACONTECE NO EVENTO KEY MAS A PESQUISA E REALIZADA EM CADA TECLA PRESSIONADA ISSO DEIXA MUITO LENTO A PESQUISA

JAIR
JLSMA 27/06/2013 16:42:52
#425319
BOA NALDOXD

ENTÃO NA VERDADE O CURSOS NÃO SAI DA DA CAIXA DE TEXTO,

PENSO ASSIM
AO DIGITAR é PRESSIONADO UMA TECLA SEGUIDA DA OUTRA, CERTO?
SE HOUVER UM INTERVALO DE TEMPO ENTRE O QUE FOI DIGITADO E O CURSOR ESTIVER PARADO ELE REALIZA A CONSULTA.

UM EXEMPLO
AO DIGITAR [Ô]JAIR[Ô] O CURSOR FICOU PARADO NA POSIÇÃO 5 DA CAIXA DE TEXTO E SE NADA FOR DIGITADO APÓS 0,02 SEGUNDOS ELE REALIZA A PESQUISA.

ISSO PODE SER EM QUALQUER POSIÇÃO DA CAIXA DE TEXTO O PONTO é O CURSOR FICOU PARADO COM ALGO DIGITADO INICIA A PESQUISA ... SEM TER QUE COLOCAR UM BOTÃO PARA CLICAR TIPO PESQUISAR

ISSO JÁ ACONTECE NO EVENTO KEY MAS A PESQUISA E REALIZADA EM CADA TECLA PRESSIONADA ISSO DEIXA MUITO LENTO A PESQUISA

JAIR
GANDA.NICK 29/06/2013 11:57:13
#425367
Olá,

Private Sub TxtConsultaDescricao_KeyUp(KeyCode As Integer, Shift As Integer)
Somatempo = 0
If SomaTempo > 0 Then
LblInforma.Caption = [Ô]CONSULTA DO MOVIMENTO GERAL POR DESCRIÇÃO[Ô]
If TxtConsultaDescricao <> Empty Then
CarregaFlexPesquisa
Else
CarregaFlex
End If
End If
End Sub

Private Sub Timer1_Timer()
SomaTempo = SomaTempo + 1
End Sub


Este seu code não funciona porque vc zera a variavel Somatempo e na linha a seguir vai perguntar se ela é maior que 0, o timer só executa quando essa rotina do key_up estiver concluida... mesmo que vc coloque um [Ô]DoEvents[Ô], a linha [Ô]If SomaTempo > 0 Then[Ô] será sempre executada primeiro que o timer mesmo que o timer só tenha 1 de [Ô]interval[Ô].

Outra coisa são os seus 0.02 segundos, se vc escreve mais rapido que isso então vc escreve mais de 50 letras num segundo....


Veja este exemplo:
Option Explicit

Private Declare Function GetTickCount Lib [Ô]kernel32[Ô] () As Long

Dim lTempo As Long

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
lTempo = GetTickCount
Me.Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If GetTickCount - lTempo > 300 Then [ô]0,3 segundos
[ô]Sua pesquisa aqui
Debug.Print [Ô]pesquisa[Ô]
Me.Timer1.Enabled = False
End If
End Sub


No interval do timer coloque 50 (0,05 segundos), isto dará 0,35 segundos depois de digitar uma letra.

Veja aí se o ajuda, depois diga qualquer coisa..

Té +
MARCELO.TREZE 29/06/2013 18:40:44
#425374
o timer vai tornar a pesquisa tão lenta quanto o keyup, primeiro que a agilidade vai ser do objeto que exibe os dados da pesquisa, e outra pra que reinventar a roda não é, solução simples e direta ao clicar em enter é feito a pesquisa.

Private Sub TxtConsultaDescricao_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
LblInforma.Caption = [Ô]CONSULTA DO MOVIMENTO GERAL POR DESCRIÇÃO[Ô]
If TxtConsultaDescricao <> Empty Then
CarregaFlexPesquisa
Else
CarregaFlex
End If
End If
End Sub


digite o que quiser pressione ENTER e pronto.

um exemplo que ajuda a preencher o flexgrid muito mais rápido é este.

Sub TesteFlexGrid()
Dim I As Long
MSFlexGrid1.ScrollBars = flexScrollBarNone
For I = 0 To 100000
MSFlexGrid1.AddItem I
Next I
MSFlexGrid1.ScrollBars = flexScrollBarBoth
End Sub


o simples fato de desativar a barra de rolagem no preenchimento já ajuda.

OMAR2011 30/06/2013 09:38:03
#425378
Vou dar o meu pitaco.
Do Marcelo.
[txt-color=#e80000]o timer vai tornar a pesquisa tão lenta quanto o keyup, primeiro que a agilidade vai ser do objeto que exibe os dados da pesquisa, e outra pra que reinventar a roda não é.[/txt-color]
Essa é uma forma de pesquisa excelente usando o LIKE.
Mude,em vez de usar MSFLEXGRID ou MSHFLEXGRID use LISTVIEW,é mais rápido.
Para que voltar ao tempo antes da invenção da roda.
Tópico encerrado , respostas não são mais permitidas