PESQUISA EM BANCO DE DADOS ACCESS - ACCDB

TON0612 20/08/2013 19:24:19
#427863
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
PEGUDO 26/08/2013 11:11:05
#428113
Resposta escolhida
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:
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.
TON0612 26/08/2013 11:24:58
#428114
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.
TON0612 31/08/2013 18:30:39
#428350
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á.
Tópico encerrado , respostas não são mais permitidas