|
Postada em 23/08/2011 23:13 hs
'Estou precisando de um help... Tenho um sistema que acessa a base de dados via 'DAO. Ao ser carregado o form de Cliente, o MSFlexGrid exibe a relação 'dos clientes/telefones em ordem de cliente. 'Preciso entrar com uma textbox (text1.text) onde, no evento <Change>, à medida em 'que 'eu for digitando, o MSFlexGrid vá exibindo os registros que correspondem à digitação '(ex.: na textbox, <Cl> e na FlexGrid <Cláudio; Clemente; Clineu; Clóvis, etc. 'O banco em Access chama-se <Cliente.mdb> e a tabela <Dados>. Na tabela, há dois 'campos '<Nome> e <Telefone>... Já existe um sistema de Procura, onde os dados são mostrados numa msgbox. Estou precisando filtrar os dados, com exibição dos registros no MsFlexGrid. Ou seja, a cada letra digitada na textbox, o Grid iria se reposicionando (como acontecia no DBGrid). Vejam o código abaixo:
Option Explicit Dim DB As Database Dim RS As Recordset
Private Sub Form_Load() Set DB = OpenDatabase("C:LocalCliente.mdb") Set RS = BD.OpenRecordset("Select * From Dados Order by Nome", dbOpenDynaset) 'O recordset é carregado, já ordenado por nome de cliente. MSFlexGrid1.Row = 0 MSFlexGrid1.Col = 0 MSFlexGrid1.Text = "Nome" MSFlexGrid1.Col = 1 MSFlexGrid1.Text = "Telefone" MSFlexGrid1.ColWidth(0) = 2500 MSFlexGrid1.ColWidth(1) = 1000 MSFlexGrid1.Width = 3800 cmdGravar.Enabled = False While Not RS.EOF MSFlexGrid1.AddItem "" & RS.Fields("Nome") & vbTab & RS.Fields("Telefone") RS.MoveNext Wend MSFlexGrid1.RemoveItem MSFlexGrid1.RowSel 'Remove linha em branco antes da relação. End Sub
Private Sub cmdProcurar_Click() Dim Localizar As String, Criterio As String Localizar = InputBox("Nome a localizar: ") Criterio = "Nome Like'" & Localizar & "'" RS.FindMin Criterio If RS.NoMatch = True Then MsgBox "Nome não encontrado...", vbQuestion, "Procura por: " & Localizar Exit Sub Else MsgBox "Cliente " & (UCase(RS.Fields("nome")) & Chr(13) & _ " <localizado no arquivo>.") End If TXBNome.SetFocus End Sub
|
|
|
|
Eduardo
não registrado
|
|
ENUNCIADA !
|
|
|
Postada em 24/08/2011 07:33 hs
Verificar,ai vc coloca do jeito seu.
|
|
|
Treze
|
SÃO VICENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 24/08/2011 08:22 hs
repare que o site troca o findfir_st por findmin veja Private Sub cmdProcurar_Click() Dim Localizar As String, Criterio As String Localizar = InputBox("Nome a localizar: ") Criterio = "Nome Like'" & Localizar & "*'" RS.FindFirs_t Criterio MSFLexgrid1.Rows = 1 While Not RS.EOF MSFlexGrid1.AddItem "" & RS.Fields("Nome") & vbTab & RS.Fields("Telefone") RS.FindNex_t "Nome Like'" & Localizar & "*'" Wend End Sub
lembre-se apenas de retirar, underline das funções findfirs_t e Findnex_t uma vez que o site sempre altera esta palavras.
|
|
|
|
Postada em 24/08/2011 09:51 hs
Treze, tomei a liberdade de alterar umas poucas coisas no código que vc passou, e a coisa funciona da seguinte maneira: ao escolher, por exemplo, um nome como Ricardo, o FlexGrid é posicionado no primeiro registro onde existe o nome Ricardo, mantendo os nomes que vêm posteriormente (como Roberto, Rubens, Salvador, Severino, etc.). E os registros anteriores a Ricardo (como André, Carlos, Junior, Marcos, Nei, Renato) não são mais exibidos no FlexGrid, já que a primeira linha inicia com Ricardo... Eis o código:
Dim Localizar As String, Criterio As String Localizar = InputBox("Nome a localizar: ") Criterio = "Nome Like'" & Localizar & "*'" RS.FindMin Criterio MSFlexGrid1.Rows = 1 While Not RS.EOF MSFlexGrid1.AddItem "" & RS.Fields("Nome") & vbTab & RS.Fields("Telefone") RS.MoveNext Wend
Eu estava pensando num jeito em que, digitando numa textbox (evento Change), o FlexGrid fosse se reposicionando a cada letra digitada. De forma que, clicando no BackSpace na textbox, o FlexGrid fosse voltando à lista anterior (ex.: ao digitar Mar, o FlexGrid exibiria re- gistros de Marcelo, Marcos, Norberto, Otávio, etc... Se clicar no Backspace, a textbox ficaria assim: Ma. E o FlexGrid reposicionaria a lista, mostrando (Manoel, Manuela, Marcelo, Marcos, etc...)... Tem como fazer? Grato.
|
|
|
|
Postada em 24/08/2011 09:56 hs
Treze, uma pequena correção, que o site alterou quando digitei a quarta linha do código ao postar a msg acima: RS.FindMin Criterio, e não <FindMin>.
|
|
|
|
Postada em 24/08/2011 09:58 hs
Credo... é RS-ponto-FindMin, e não RS-ponto-FindMin...
|
|
|
|