FAZER UMA BUSCA CERTA

USUARIO.EXCLUIDOS 25/08/2007 09:15:11
#232648
Galera ja to com mais de 4 meses em uma unica busca ou seja resposta que sejam veridicas... e eu baixei um projeto e tinha o que ue queria ou seja uma busca certa do jeito que eu quero o problem é que o projeto usa um DataGrid e o meu e um MSFlexgrid já postei muito essa pergunta e tive muitas resposta mais quando vou fazer nao dar certo agora vou passar para voces como eu uso meu projeto na pratica. Mais em primeiro lugar vou passar para voces o projeto que baixei que dar certo com um DataGrid


Private Sub TxtPesq_Change()

On Error GoTo fim
If (DataGrid1.SelBookmarks.Count <> 0) Then
DataGrid1.SelBookmarks.Remove 0
End If
vResp = Trim(TxtPesq.Text)
RstDatagrid.MoveFirst
If vResp <> "" Then
If CmbPara.Text = "Iniciando com :" Then
RstDatagrid.Find "NomeCont LIKE '" & vResp & "*'", , adSearchForward
Else
RstDatagrid.Find "NomeCont LIKE '*" & vResp & "*'", , adSearchForward
End If
Else
Exit Sub
End If


DataGrid1.SelBookmarks.Add RstDatagrid.Bookmark
fim:
End Sub



dessa forma saiu tudo certo ou seja uma busca que quando a pessoa fosse digitando fosse selecionando no grid o nome de acordo com o que agente fosse digitando. Lembrando que eu quero usar o componente MSFlexgrid.

agora vou passar para voces como uso meu form e os componentes

no Load do form para carregar o MSFlexgrid faço da seguinte forma

Private Sub Form_Load()
Dim sqlFiltrar As String

sqlFiltrar = "SELECT codigo,nome,cpf,CNPJ FROM ENTIDADES"
TblConsultaEntidades.Open sqlFiltrar, conexao, adOpenKeyset, adLockOptimistic

CarregarGrid
AjustarGrid
TblConsultaEntidades.Close

End Sub




Private Sub AbrirTabela()
'--------sql que busca os dados no banco por ordem alfabetica-------

SqlBuscarDados = "Select * From ENTIDADES"

TblConsultaEntidades.Open SqlBuscarDados, conexao, adOpenKeyset, adLockOptimistic
'-------------------------------------------------------------------
End Sub



Private Sub CarregarGrid()
'--------------Funcao para buscar os dados no banco-----------------

Set DataGridEntidades.DataSource = TblConsultaEntidades

'-------------------------------------------------------------------
End Sub


Private Sub AjustarGrid()
'---------Funcao para ajustar o grid conforme os daos---------------

DataGridEntidades.TextMatrix(0, 0) = "CODIGO" 'X
DataGridEntidades.TextMatrix(0, 1) = "CODIGO" 'X
DataGridEntidades.TextMatrix(0, 2) = "NOME" 'X
DataGridEntidades.ColWidth(0) = 0 'X
DataGridEntidades.ColWidth(1) = 1000 'X
DataGridEntidades.ColWidth(2) = 5500
DataGridEntidades.ColWidth(3) = 2000
DataGridEntidades.ColWidth(4) = 2000


'-------------------------------------------------------------------
End Sub


Private Sub BuscarDadosEntidades()
frmEntidades.txtcodigo = TblEntidade!codigo
frmEntidades.txtnome = TblEntidade!nome
frmEntidades.txtcpf= TblEntidade!cpf
frmEntidades.txtcnpj = TblEntidade!cnpj
End Sub




entao galera no meu form tenho os seguinte componentes:
1 MSFlexgrid
1 caixa de texto

e o que eu queria é que voces em cima do meu projeto e dos meus componentes me ajudasse de uma vez por toda sair dessa duvida que pertuba ha muito tempo

fizesse que quando eu digitasse na caixa de texto fosse selecioanando de acordo com o criterio. Lembrando que a busca fosse filtrando do inicio para o fim e nao filtrasse a letra ou a palavra que existesse no nome exemplo:

se existir 3 nomes
nildglan
nildo
nilmar

e quando eu digitasse nil selecionasse o primeiro mais se eu continuasse a digitar exemplo nildo ai selecionasse apenas nildo


agradeço...

RXGOMES 25/08/2007 11:01:43
#232655
Resposta escolhida
bom se eu entendi certo você quer fazer uma busca dinâmico em um grid a medida que há mudança em um textbox, se for isso mesmo o código abaixo funciona

Private Sub txtSearch_Change()  'procura dados na 1ê coluna do grid

Dim intRow As Integer
Dim blnSearch As Boolean

blnSearch = False
grdData.Row = 0
For intRow = 1 To grdData.Rows - 1
If Left(grdData.TextMatrix(intRow, 0), Len(txtSearch.Text)) = txtSearch.Text Then
grdData.Row = intRow
grdData.TopRow = intRow
blnSearch = True
Exit For
End If
Next

If blnSearch = False Then MsgBox "Nenhum valor localizado"
End Sub

RXGOMES 25/08/2007 11:05:57
#232656
Bom agora se você quiser que fazer um filtro eu uso faço uma consulta no banco e repopulo o grid ou listbox a cada alterção no textbox, eu uso aqui e não fica lento. é só fazer uma select usando a claúsula like no where.
USUARIO.EXCLUIDOS 25/08/2007 11:14:49
#232658
XGOMES vou dar exemplo do que eu quero

vamos dizer que eu tenha 1000 registro de clientes cadastrados e ai eu vou buscar um cadastro de um cliente qualquer, digamos que eu esteja na janela cadastro de cliente entao eu fiz uma outra janela onde eu vou pesquisar o cliente nessa janela terá os seguinte componentes:
um MSFlexgrid e uma caixa de texto onde vou digitar o nome do cliente entao a medida que vou digitando tenhe que selecionar o nome de acordo com o que to digitando isso é claro que do inicio para fim do nome


RXGOMES 25/08/2007 11:21:49
#232659
Então é como eu postei no 2º post a cada alteração paz um select e repopula o grid no e se o textbox for vazio traga dos os registro.

Fica assim de o filtro for o nome

sqlFiltrar = "SELECT codigo,nome,cpf,CNPJ  FROM ENTIDADES where nome like '" & textbox & "%'"




USUARIO.EXCLUIDOS 25/08/2007 13:58:10
#232672
Para que ele traga em ordem alfabetica do que for digitando ex:

digamos que tem os nomes no registro:

joseval
jose
joao
juvenal
joaquim

quando digitar "J" aparecer:

joao
joaquim
jose
joseval
juvenal

digamos que na mesma digitação vc acrescenta ao "J" "OS" ficando "JOS" então aparecerá:

jose
joseval

para isto ponha antes do código que nosso amigo RXGOMES postou logo acima

rs_recordset.sort = "nome" 'sendo nome o campo da tabela

ficando:

rs_recordset.sort = "nome"
sqlfiltrar = "SELECT codigo,nome,cpf,CNPJ FROM ENTIDADES where nome like '" & textbox & "%'"





USUARIO.EXCLUIDOS 30/08/2007 15:10:57
#233435
RXGOMES TESTEI DA FORMA QUE VC COLOCOU NO PRIMEIRO POSTE E NAO DEU CERTO DA SEGUNDA FORMA QUE VC FEZ


RXGOMES
Bom agora se você quiser que fazer um filtro eu uso faço uma consulta no banco e repopulo o grid ou listbox a cada alterção no textbox, eu uso aqui e não fica lento. é só fazer uma select usando a claúsula like no where.


EU NAO ENTEDIR PORQUE EU SEI FAZER COM UMA SQL DA FORMA QUE VC CITOU ABAIXO


sqlFiltrar = "SELECT codigo,nome,cpf,CNPJ FROM ENTIDADES where nome like '" & textbox & "%'"


SÓ QUE DESSA FORMA A CONSULTA é FEITA EM CIMA DA PALAVRA E NAO EM CIMA DA LETRA QUE TÔ DIGITANDO EXEMPLO

SE EU DIGITO "ADMINISTRADOR" ENTAO TODOS OS NOMES QUE CONTER AS LETRAS "DOR" VAO APARECER NA LISTA, AGORA EU GOSTARIA COMO VC FAZ PARA repopulo O GRID CARA VC TINHA COMO MANDAR PARA MIM UM MODELO... SE VC PUDER LEMBRANDO QUE SO SERVER SE FOR COM O COMPONENTE MSFlexgrid
USUARIO.EXCLUIDOS 10/09/2007 08:43:27
#234833
Dessa forma que eu fiz se tiver um nome Maria Silva de Sousa, entao quando eu digitar Sousa ela tambem vai ser exibida e não gostaria dessa forma da forma que eu quero é quando eu digitasse no inicio da palavra e não se conter na palavra, resumindo um busca correta do inicio para o fim do nome
Tópico encerrado , respostas não são mais permitidas