PESQUISA EM BANCO DE DADOS ACCESS - ACCDB
Boa noite Pessoal.
Sou novo no fórum e no vb.net.
antes de migrar para o vb.net eu trabalhava com códigos em access que tambem tem o vb..pensei, inclusive que fosse igual... mas ja estou me batendo. haha...
Entao eu consegui criar a conexao com o banco de dados e linkar o recordset, mas gostaria de fazer uma comparação, no access eu utilizava o Dlookup([Ô]Campo[Ô],[Ô]tabela[Ô],[Ô]filtro[Ô]), mas no vb.net (no visual studio 2010) não estou conseguindo algo proximo.
o objetivo: ao digitar o valor dentro da textbox [Ô]txtNColetado[Ô], o sistema compara com todas os numeros dentro do bando de dados [Ô]Barcode.accdb[Ô], na tabela [Ô]tblNPermitido[Ô], na coluna [Ô]Numero[Ô] com o numero digitado na textbox.
Por favor alguem me ajuda.
Desde ja agradeço
segue abaixo a minha tentativa:
Module AbrindoConexao
Public BD As New ADODB.Connection
Public RS As New ADODB.Recordset
Public Sub AbrirBD()
If BD.State = 1 Then
BD.Close()
End If
BD.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Barcode\Barcode.accdb;Persist Security Info=False;JET OLEDB[Ô]
BD.Open()
End Sub
End Module
[ô] Adaptado do Macoratti
Private Sub txtNColetado_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNColetado.TextChanged
Call AbrirBD()
With RS
.ActiveConnection = BD
.CursorLocation = ADODB.CursorLocationEnum.adUseServer
.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
.LockType = ADODB.LockTypeEnum.adLockReadOnly
.Open([Ô]tblNPermitido[Ô])
End With
If RS.Supports(ADODB.CursorOptionEnum.adIndex) And RS.Supports(ADODB.CursorOptionEnum.adSeek) Then
RS.Index = [Ô]CódigoSenha[Ô]
RS.MoveFirst()
RS.Seek(Array(CLng(txtNColetado.Text))) - Nesta Linha ele indica que o [Ô]Array é um tipo e nao pode ser usado como uma expressao[Ô]
If RS.EOF Then
MsgBox([Ô]Número não localizado[Ô])
Else
MsgBox(RS([Ô]CódigoSenha[Ô]).Value & [Ô] - [Ô] & RS([Ô]Numero[Ô]).Value & vbCrLf)
End If
Else
MsgBox([Ô] O provedor utilizado não suporta : Index e Seek [Ô])
End If
[ô]Fechamos a conexão e o recordset
RS.Close()
BD.Close()
RS = Nothing
BD = Nothing
End Sub
Sou novo no fórum e no vb.net.
antes de migrar para o vb.net eu trabalhava com códigos em access que tambem tem o vb..pensei, inclusive que fosse igual... mas ja estou me batendo. haha...
Entao eu consegui criar a conexao com o banco de dados e linkar o recordset, mas gostaria de fazer uma comparação, no access eu utilizava o Dlookup([Ô]Campo[Ô],[Ô]tabela[Ô],[Ô]filtro[Ô]), mas no vb.net (no visual studio 2010) não estou conseguindo algo proximo.
o objetivo: ao digitar o valor dentro da textbox [Ô]txtNColetado[Ô], o sistema compara com todas os numeros dentro do bando de dados [Ô]Barcode.accdb[Ô], na tabela [Ô]tblNPermitido[Ô], na coluna [Ô]Numero[Ô] com o numero digitado na textbox.
Por favor alguem me ajuda.
Desde ja agradeço
segue abaixo a minha tentativa:
Module AbrindoConexao
Public BD As New ADODB.Connection
Public RS As New ADODB.Recordset
Public Sub AbrirBD()
If BD.State = 1 Then
BD.Close()
End If
BD.ConnectionString = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Barcode\Barcode.accdb;Persist Security Info=False;JET OLEDB[Ô]
BD.Open()
End Sub
End Module
[ô] Adaptado do Macoratti
Private Sub txtNColetado_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtNColetado.TextChanged
Call AbrirBD()
With RS
.ActiveConnection = BD
.CursorLocation = ADODB.CursorLocationEnum.adUseServer
.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
.LockType = ADODB.LockTypeEnum.adLockReadOnly
.Open([Ô]tblNPermitido[Ô])
End With
If RS.Supports(ADODB.CursorOptionEnum.adIndex) And RS.Supports(ADODB.CursorOptionEnum.adSeek) Then
RS.Index = [Ô]CódigoSenha[Ô]
RS.MoveFirst()
RS.Seek(Array(CLng(txtNColetado.Text))) - Nesta Linha ele indica que o [Ô]Array é um tipo e nao pode ser usado como uma expressao[Ô]
If RS.EOF Then
MsgBox([Ô]Número não localizado[Ô])
Else
MsgBox(RS([Ô]CódigoSenha[Ô]).Value & [Ô] - [Ô] & RS([Ô]Numero[Ô]).Value & vbCrLf)
End If
Else
MsgBox([Ô] O provedor utilizado não suporta : Index e Seek [Ô])
End If
[ô]Fechamos a conexão e o recordset
RS.Close()
BD.Close()
RS = Nothing
BD = Nothing
End Sub
Cara,
Percebi que você está fazendo esta pesquisa no TextChanged do TextBox.
Eu aconselho, neste caso, a você abandonar o [txt-color=#0000f0]ADODB[/txt-color] e utilizar o [txt-color=#0000f0]OLEDB[/txt-color] e utilize um [txt-color=#0000f0]DatSet[/txt-color] para fazer as consultas em modo desconectado, ou seja, você coloca uma cópia da sua tabela, que está no Access, em memória e, ao invés de abrir e fechar a conexão cada vez que o usuário digitar alguma coisa, faz a consulta neste DataSet.
Para melhor entendimento anexei um arquivo de teste para você ver o exemplo.
Te emprestei, também, um BD que eu uso como teste aqui na empresa. Nele, eu disponibilizei dois nomes: [Ô]Ricardo Oliveira[Ô] e [Ô]Marcelo Moura[Ô].
Baixe o arquivo, abra o projeto, rode-o e digite qualquer letra. por exemplo, se você digitar [Ô]a[Ô], vão aparecer os dois nomes, mas se você digitar [Ô]arc[Ô] só vai aparecer [Ô]Marcelo Moura[Ô] pois não existe [Ô]arc[Ô] em [Ô]Ricardo Oliveira[Ô].
Vale lembrar, também, que o exemplo é case sensitive, ou seja, [Ô]ricardo[Ô] não é a mesma coisa que [Ô]Ricardo[Ô] e [Ô]moura[Ô] não é o mesmo que [Ô]Moura[Ô].
Outra coisa:
O comando SQL para o [Ô][txt-color=#0000f0]SELECT[/txt-color][Ô] está gravado dentro do Access com o nome de [Ô][txt-color=#0000f0]consUsuarios[/txt-color][Ô]. Assim a aplicação fica ainda mais rápida pois é o Access que tem todo o trabalho de executar a query. Eu executo a consulta nesta linha:
Espero ter ajudado.
Percebi que você está fazendo esta pesquisa no TextChanged do TextBox.
Eu aconselho, neste caso, a você abandonar o [txt-color=#0000f0]ADODB[/txt-color] e utilizar o [txt-color=#0000f0]OLEDB[/txt-color] e utilize um [txt-color=#0000f0]DatSet[/txt-color] para fazer as consultas em modo desconectado, ou seja, você coloca uma cópia da sua tabela, que está no Access, em memória e, ao invés de abrir e fechar a conexão cada vez que o usuário digitar alguma coisa, faz a consulta neste DataSet.
Para melhor entendimento anexei um arquivo de teste para você ver o exemplo.
Te emprestei, também, um BD que eu uso como teste aqui na empresa. Nele, eu disponibilizei dois nomes: [Ô]Ricardo Oliveira[Ô] e [Ô]Marcelo Moura[Ô].
Baixe o arquivo, abra o projeto, rode-o e digite qualquer letra. por exemplo, se você digitar [Ô]a[Ô], vão aparecer os dois nomes, mas se você digitar [Ô]arc[Ô] só vai aparecer [Ô]Marcelo Moura[Ô] pois não existe [Ô]arc[Ô] em [Ô]Ricardo Oliveira[Ô].
Vale lembrar, também, que o exemplo é case sensitive, ou seja, [Ô]ricardo[Ô] não é a mesma coisa que [Ô]Ricardo[Ô] e [Ô]moura[Ô] não é o mesmo que [Ô]Moura[Ô].
Outra coisa:
O comando SQL para o [Ô][txt-color=#0000f0]SELECT[/txt-color][Ô] está gravado dentro do Access com o nome de [Ô][txt-color=#0000f0]consUsuarios[/txt-color][Ô]. Assim a aplicação fica ainda mais rápida pois é o Access que tem todo o trabalho de executar a query. Eu executo a consulta nesta linha:
Comando = New OleDb.OleDbCommand([txt-color=#e80000][Ô]consUsuarios[Ô][/txt-color], Conec)
que está dentro da propriedade [Ô][txt-color=#0000f0]AbrirBD()[/txt-color][Ô]Espero ter ajudado.
Desde já agradeço a resposta e o trabalho em me ajudar.
Vou testar o seu código e volto a lhe dizer o que ocorreu...
Muito obrigado.
Vou testar o seu código e volto a lhe dizer o que ocorreu...
Muito obrigado.
Perfeito....demorei um pouco para entender... como disse ainda sou novo...kk
mas valeu mesmo... agora estou adaptando ao meu projeto, só mais uma duvida,
teria como tirar o [Ô]case sensitive[Ô], mas que assim quando eu digitar [Ô]m[Ô] ele reconhece [Ô]M[Ô] ou [Ô]m[Ô]??
Obrigado desde já.
mas valeu mesmo... agora estou adaptando ao meu projeto, só mais uma duvida,
teria como tirar o [Ô]case sensitive[Ô], mas que assim quando eu digitar [Ô]m[Ô] ele reconhece [Ô]M[Ô] ou [Ô]m[Ô]??
Obrigado desde já.
Tópico encerrado , respostas não são mais permitidas