APONTAR UMA LINHA NO DBGRID
ESTOU ENFRENTANDO O SEGUINTE PROBLEMA:
TENHO UM FORM, QUE QUANDO O ACESSO, CARREGA O MEU DBGRID COM TODA A TABELA DE PRODUTOS, TENHO UM TEXTBOX AONDE EU DIGITO AS PRIMEIRAS LETRAS DO NOME A SER CONSULTADO E ELE ME SELECIONA OS ITENS DO MEU BANCO DE DADOS E ME MOSTRA NO DBGRID OS ITENS QUE COMEÇAM COM AS LETRAS DIGITADAS, AONDE POSSO NAVEGAR COM O SCROLLBAR.
O QUE PRECISO é QUE AO DIGITAR AS LETRAS NO TEXTBOX, O SCROLLBAR (A BARRINHA DE SELEÇÃO) APONTE PARA O ITEM QUE COMEÇA COM AS LETRAS DIGITADAS NO MEU DBGRID QUE Jà  ESTà  CARREGADO COM TODA A TABELA, E NÃO SELECIONAR OS CAMPOS NOVAMENTE NO BANCO DE DADOS.
AGRADEÇO A ATENÇÃO!!
TENHO UM FORM, QUE QUANDO O ACESSO, CARREGA O MEU DBGRID COM TODA A TABELA DE PRODUTOS, TENHO UM TEXTBOX AONDE EU DIGITO AS PRIMEIRAS LETRAS DO NOME A SER CONSULTADO E ELE ME SELECIONA OS ITENS DO MEU BANCO DE DADOS E ME MOSTRA NO DBGRID OS ITENS QUE COMEÇAM COM AS LETRAS DIGITADAS, AONDE POSSO NAVEGAR COM O SCROLLBAR.
O QUE PRECISO é QUE AO DIGITAR AS LETRAS NO TEXTBOX, O SCROLLBAR (A BARRINHA DE SELEÇÃO) APONTE PARA O ITEM QUE COMEÇA COM AS LETRAS DIGITADAS NO MEU DBGRID QUE Jà  ESTà  CARREGADO COM TODA A TABELA, E NÃO SELECIONAR OS CAMPOS NOVAMENTE NO BANCO DE DADOS.
AGRADEÇO A ATENÇÃO!!
Olá Robertorro tudo, não sei como vc está ultilizando a conexão com o data mais estou mandando de um jeito bem simples qualquer dúvias é só me avisar abraços
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Len(Trim(Text1)) = 0 Then
Form_Load
Exit Sub
End If
If Len(Text1) = 0 Then
Data1.Recordset.MoveFirst
Exit Sub
End If
Data1.RecordSource = "Select * from Tabela where Campo like """ & Text1 & "*""order by Campo"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "Não há cadastro com este nome!", vbCritical, "Erro de Consulta"
Cancelar_Click
Exit Sub
End If
End If
Exit Sub
Corrige:
If Err = 1 Then
MsgBox "Erro: " & Err
Text1 = ""
Text1.SetFocus
Else
MsgBox "Erro: " & Err
Text1 = ""
Text1.SetFocus
End If
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Len(Trim(Text1)) = 0 Then
Form_Load
Exit Sub
End If
If Len(Text1) = 0 Then
Data1.Recordset.MoveFirst
Exit Sub
End If
Data1.RecordSource = "Select * from Tabela where Campo like """ & Text1 & "*""order by Campo"
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "Não há cadastro com este nome!", vbCritical, "Erro de Consulta"
Cancelar_Click
Exit Sub
End If
End If
Exit Sub
Corrige:
If Err = 1 Then
MsgBox "Erro: " & Err
Text1 = ""
Text1.SetFocus
Else
MsgBox "Erro: " & Err
Text1 = ""
Text1.SetFocus
End If
Olá Jack!
Eu agradeço a dica, mas o comando passado faz a mesma rotina que eu já tenho, ele seleciona no BD os nomes que começam com a letra digitada, quando na verdade, o que preciso é que a grid apenas aponte a barrinha de seleção no item que começa com a letra digitada, para que eu possa navegar com as setas do teclado. Quando abro meu form, já carrrego a minha grid com a tabela completa, quando digito alguma letra no meu textbox, por exemplo, digito a letra "C", o meu grid apresenta somente os campos que começam com a letra "C" e joga a barrinha de seleção para o primeiro item.
O que eu preciso é que o meu grid apenas jogue o foco da barrinha no item que começa com a letra "C" e eu possa também navegar na grid nos itens que não começam com a letra "C", como se eu subisse a barrinha e fosse passando para a letra "B" e posteriormente letra "A".
Agradeço desde já
Roberto
Eu agradeço a dica, mas o comando passado faz a mesma rotina que eu já tenho, ele seleciona no BD os nomes que começam com a letra digitada, quando na verdade, o que preciso é que a grid apenas aponte a barrinha de seleção no item que começa com a letra digitada, para que eu possa navegar com as setas do teclado. Quando abro meu form, já carrrego a minha grid com a tabela completa, quando digito alguma letra no meu textbox, por exemplo, digito a letra "C", o meu grid apresenta somente os campos que começam com a letra "C" e joga a barrinha de seleção para o primeiro item.
O que eu preciso é que o meu grid apenas jogue o foco da barrinha no item que começa com a letra "C" e eu possa também navegar na grid nos itens que não começam com a letra "C", como se eu subisse a barrinha e fosse passando para a letra "B" e posteriormente letra "A".
Agradeço desde já
Roberto
Olá Robertorro agora entendi sua pergunta isso é simples de ser resolvido olhe esse código bem simples vai na propriedade Keydown do seu text e cole este código:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If DBGrid1.Enabled = False Then
Exit Sub
End If
If KeyCode = 38 Then
If Data1.Recordset.AbsolutePosition = 0 Then
Else
Data1.Recordset.MovePrevious
End If
End If
If KeyCode = 40 Then
If DBGrid1.ApproxCount = CDbl(Data1.Recordset.AbsolutePosition) + 1 Then
Else
Data1.Recordset.MoveNext
End If
End If
End Sub
acho que isso resolve seu problema pelo que entendi, se não resolver me avise e se resolver não se esqueça de encerrar o tópico...
Abraços
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If DBGrid1.Enabled = False Then
Exit Sub
End If
If KeyCode = 38 Then
If Data1.Recordset.AbsolutePosition = 0 Then
Else
Data1.Recordset.MovePrevious
End If
End If
If KeyCode = 40 Then
If DBGrid1.ApproxCount = CDbl(Data1.Recordset.AbsolutePosition) + 1 Then
Else
Data1.Recordset.MoveNext
End If
End If
End Sub
acho que isso resolve seu problema pelo que entendi, se não resolver me avise e se resolver não se esqueça de encerrar o tópico...
Abraços
Olá Jack
Essa sua dica foi de grande importà ¢ncia para meu projeto, mas ainda não consegui fazer o que eu desejo.
O que preciso é que essa mesma barrinha de seleção aponte para o Ãtem que começa com a letra digitada no meu text box, pois minha tabela tem 17000 Ãtens e estão todos carregados no grid na hora em que abro meu formulário.
O que acontece atualmente é que ele seleciona todos os que começam com a letra digitada em meu BD. Queria saber se há algum comando que conforme eu digito uma letra no textbox, a barrinha de seleção aponte para o Ãtem, mas não jogue para a grid apenas os Ãtens que começam a letra, pois minha grid já está carregada com a tabela completa.
Um abraço
Roberto
Essa sua dica foi de grande importà ¢ncia para meu projeto, mas ainda não consegui fazer o que eu desejo.
O que preciso é que essa mesma barrinha de seleção aponte para o Ãtem que começa com a letra digitada no meu text box, pois minha tabela tem 17000 Ãtens e estão todos carregados no grid na hora em que abro meu formulário.
O que acontece atualmente é que ele seleciona todos os que começam com a letra digitada em meu BD. Queria saber se há algum comando que conforme eu digito uma letra no textbox, a barrinha de seleção aponte para o Ãtem, mas não jogue para a grid apenas os Ãtens que começam a letra, pois minha grid já está carregada com a tabela completa.
Um abraço
Roberto
Já sei o que está acontecendo vc está fazendo errado vou te mandar um exemplo simples que vc pode ver como funciona manda seu email pra mim assim te mando um exemplo.
Abraços
Abraços
descupe mas
se a duvida esta resolvida encerre o tópico!
se a duvida esta resolvida encerre o tópico!
Olá Jack
Meu e-mail é: robertoroliveira@itelefonica.com.br
Meu e-mail é: robertoroliveira@itelefonica.com.br
??????????????????????????????????????????????????????????????????
Olá Jack e meus amigos de VB.
Agradeço toda a atenção voltada para minha questão, mas acabei de desenvolver a rotina e queria demonstrar para vocês:
Private Sub TextProcuraNome_Change()
On Error GoTo ErroAbrir
If Right(TextProcuraNome, 1) = Chr(39) Then
TextProcuraNome = Right(TextProcuraNome, Len(TextProcuraNome) - 1)
End If
Dim vntPosicao As Variant
With DataClientes
'ADO
vntPosicao = DataClientes.Recordset.Bookmark 'Grava a posicao do registro atual
DataClientes.Recordset.MoveFirst
DataClientes.Recordset.FindFirst "ClienteNome like '" & TextProcuraNome.Text & "*'"
If .Recordset.EOF Then 'se não encontrou "ED"
DataClientes.Recordset.Bookmark = vntPosicao
DataClientes.Recordset.MoveNext 'vai para o proximo "EE..."
End If
'DAO
vntPosicao = DataClientes.Recordset.Bookmark
DataClientes.Recordset.FindFirst "ClienteNome like '" & TextProcuraNome.Text & "*'"
If .Recordset.NoMatch Then
DataClientes.Recordset.Bookmark = vntPosicao
DataClientes.Recordset.MoveNext
End If
End With
On Error GoTo 0
Exit Sub
ErroAbrir:
Dim Aviso As Integer
Aviso = MsgBox( _
"Tabela de Dados vazia!", vbExclamation, "Aviso!!")
End Sub
Valeu!!!
Roberto
Agradeço toda a atenção voltada para minha questão, mas acabei de desenvolver a rotina e queria demonstrar para vocês:
Private Sub TextProcuraNome_Change()
On Error GoTo ErroAbrir
If Right(TextProcuraNome, 1) = Chr(39) Then
TextProcuraNome = Right(TextProcuraNome, Len(TextProcuraNome) - 1)
End If
Dim vntPosicao As Variant
With DataClientes
'ADO
vntPosicao = DataClientes.Recordset.Bookmark 'Grava a posicao do registro atual
DataClientes.Recordset.MoveFirst
DataClientes.Recordset.FindFirst "ClienteNome like '" & TextProcuraNome.Text & "*'"
If .Recordset.EOF Then 'se não encontrou "ED"
DataClientes.Recordset.Bookmark = vntPosicao
DataClientes.Recordset.MoveNext 'vai para o proximo "EE..."
End If
'DAO
vntPosicao = DataClientes.Recordset.Bookmark
DataClientes.Recordset.FindFirst "ClienteNome like '" & TextProcuraNome.Text & "*'"
If .Recordset.NoMatch Then
DataClientes.Recordset.Bookmark = vntPosicao
DataClientes.Recordset.MoveNext
End If
End With
On Error GoTo 0
Exit Sub
ErroAbrir:
Dim Aviso As Integer
Aviso = MsgBox( _
"Tabela de Dados vazia!", vbExclamation, "Aviso!!")
End Sub
Valeu!!!
Roberto
Tópico encerrado , respostas não são mais permitidas