FAZER UMA BUSCA CERTA
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
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
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...
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...
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
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.
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
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
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
Fica assim de o filtro for o nome
sqlFiltrar = "SELECT codigo,nome,cpf,CNPJ FROM ENTIDADES where nome like '" & textbox & "%'"
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 & "%'"
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 & "%'"
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
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
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