Inquiridor
Acessando (consulta) linha especifica num banco dados access usando visual basic 2005

Pergunta
-
Colegas,
Sou novato em programação visual basic 2005 e estou tentando escrever o codigo para acessar dados num "banco access v2003" utilizando vb 2005. Depois de navegar em varios sites na internet inclusive do jose carlos macoratti e outros foruns de discusão como linha de codigo, baboo enfim estou fazendo o dever de casa mas nao encontrei ainda a solução e decidi postar aqui para ver se alguem me ajuda:
é o seguinte: Estou usando o vb2005 test que esta para vencer em 30 dias ... 29 agora contagem regressiva:
1 - escrevi o algoritmo para validar um numero do processo ( como se fosse o CPF unico para qualquer pessoa );
2 - Com este numero correto quero fazer uma busca ( consulta logo apos a caixa texto perder o foco ) no banco de dados e buscar todas as informações desta linha por exemplo nome pessoa, cpf, endereço, estado civil. Além de consultar tem que habilitar também para atualizar e incluir novas informações e excluir alguns dados.
3 - Alguma coisa ja fiz vejam, se for possivel descrever as informações no proprio codigo. Nao gostaria de usar o assistente para criar o dataset.
Imports
System.Data.OleDbDim
conexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\VB2005\bd2008.mdb" Dim sql1 As String = "select * from processo" Dim da1 As New OleDbDataAdapter(sql1, conexao) Dim ds As New DataSet??????
grato
Todas as Respostas
-
Thedill,
Crie uma classe de acesso a dados e então crie métodos para Criar, Buscar, Excluir e Alterar a pessoa. Abaixo segue um exemplo do método Buscar.
Code SnippetPublic
Function Buscar(ByVal numeroProcesso As String) As DataRow' cria conexão
Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\VB2005\bd2008.mdb")
' cria data adapter
Dim adapter As New OleDbDataAdapter()
adapter.SelectCommand.Connection = conn
adapter.SelectCommand.CommandText = "SELECT * FROM Processo WHERE NumeroProcesso = @NumProcesso"
' parâmetros
adapter.SelectCommand.Parameters.AddWithValue("@NumProcesso", numeroProcesso)
' cria DataSet
Dim dataSet As New DataSet()
' preenche DataSet
adapter.Fill(dataSet)
' verifica se o processo foi encontrado
If dataSet.Tables(0).Rows.Count = 0 Then
Throw New Exception("Número de processo não encontrado !")
End If
Return dataSet.Tables(0).Rows(0)
End Function
O método acima, se pertence a uma classe chamada por exemplo PessoaDalc, poderia ser utilizado da seguinte maneira (em um ambiente console):
Code SnippetSub Main()
Dim pessoaDalc As New PessoaDalc()
Dim dataRow As DataRow
' busca pessoa
dataRow = pessoaDalc.Buscar("885/98")
' mostra dados da pessoa
Console.WriteLine(dataRow("Nome").ToString())
Console.WriteLine(dataRow("CPF").ToString())
End Sub
Obs.: Os códigos não realizam nenhum tratamento de exceptions porque servem somente para demonstração.
Espero ter ajudado.
Ari
-
Ari,
Ajudou muito, agradeço lhe pelas suas informações que pude pesquisar mais e finalmente encontrei uma solução. Mas para quem esta começando ( tudo é novo ) pesquisa e estudo sao essenciais.
As suas explicações no codigo sao bastante didaticas com isto consegui achar no site do http://www.matioli.sengi.com.br/ Prof. Matioli detalhes de como conseguir acessar ao "banco de dados".
Eu fiz de outra forma ( utilizando um botão para pesquisa ) e usei um outro banco de dados ficando o codigo da forma abaixo: se puder me ajudar em outras questao abaixo faço novo questionamento.
Private
Sub consulta (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnload.Click Dim con As New OleDb.OleDbConnectioncon.ConnectionString =
"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = C:\VBSIX\BASEDADOS.mdb"con.Open()
MsgBox(
"Agora um Conexão com o Banco de Dados está aberta!")Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
sql =
"SELECT * FROM Processos "da =
New OleDb.OleDbDataAdapter(sql, con)da.Fill(ds,
"CONSULTA")CPFCNPJ_02.Text = ds.Tables("CONSULTA").Rows(0).Item(4)
TextBox67.Text = ds.Tables("CONSULTA").Rows(0).Item(6)
mutuario.Text = ds.Tables("consulta").Rows(0).Item(3)
End Sub
1 - como acessar uma linha especifica ( por exemplo digito CPF valido ) na tabela do BANCO DE DADOS quando valido por exemplo o numero do cpf da pessoal ? veja que a linha que estou buscando é ROW(0). Teria que ser algo como consultar a linha do CPF digitado, ou seja, ROW ( cpf ) ???
2 - Tem como fazer igual ao VB6 que apos digitar um cpf valido ( o algoritimo cpf esta ok ) fazer a consulta e buscar as informações desta pessoal, ou seja quando sair do foco do text CPF ?
grato,
-
Thedill,
Segue abaixo as respostas:
1 - Sim, é possível e a maneira é tal como eu havia explicado. No seu código, todo o conteúdo da tabela Processos é enviado ao DataSet e então é realizado um acesso à primera linha da tabela CONSULTA, que foi mapeada para receber os dados da tabela Processos.
Existem 2 maneiras:
a) (Pior) Utilize o método Select da classe DataTable e coloque a consulta pelo CPF. Por exemplo:
Code SnippetDim rows() as DataRow
rows = ds.Tables("CONSULTA").Select("CPF = '00679199947'")
Link de ajuda:
http://msdn.microsoft.com/en-us/library/det4aw50.aspx
b) (Melhor) Modifique sua variável sql para receber um parâmetro (o CPF), tal como...
sql = "SELECT * FROM Processos WHERE CPF = @CPF"
e então adicione o parâmetro ao SelectCommand, tal como o meu post inicial.
2 - Para fazer a consulta após perder o foco do TextBox do CPF, use o evento Leave ou implemente o evento KeyDown (por exemplo, quando o usuário digita o CPF e tecla Enter).
Links de ajuda:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.leave.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown(VS.80).aspx
Att.
Ari
-
Ari,
Agradeço- lhe novamente sobre os comentarios principalmente na ajuda da consulta apos perder o foco do textbox, voce acertou em cheio.
Mas após conseguir acessar o banco access ainda estou com problemas em exibir as informações do usuario, ou seja, Consultar pelo cpf do usuario e exibir as informações deste cidadão.
Para isto estou transcrevendo novamente o codigo com as criticas do VB 2005 se puder comentar as minhas possiveis falhas ( muitas acredito ) e tentar esclarecer onde estao os erros ou ate mesmo transcrever o codigo ( se nao for abusar de seus conhecimentos ) ... para eu prosseguir nesta luta por que sei que ainda estamos no começo !!!
Ja estou a procura de livros inclusive estive na livraria leitura mas nao encontrei nada que pudesse auxiliar existem muitos livros com muita tecnica e pouco resultado pratico, vc sabe onde encontrar algum que nao seja tao basico mas que seja pratico na medida certo e tecnico sem exajeros ???
valeu !!!
Public Function teste(ByVal cpf As String)
' cria conexão e abre o banco access
Dim con As New OleDb.OleDbConnection
con.ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = C:\VBSIX\BASEDADOS.mdb"
con.Open()
' cria dataset
Dim ds As New DataSet
'cria data adpater e a query
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
'aqui estou selecionando todos os dados da tabela processos, no campo ( coluna ) cpf o numero que chamei de v_cont ( o numero de cpf após validado )
sql = "SELECT * FROM Processos WHERE cpf = @v_cont"
' aqui executo a sql na conexao con do access
da = New OleDb.OleDbDataAdapter(sql, con)
' preenche dataset
da.Fill(ds, "CONSULTA")
neste momento o VB2005 ( debug ) exibe a janela de critica com a seguinte informação:
oledbexception was unhandled
Nenhum valor foi fornecido para um ou mais parâmetros necessários.
Consultando Troubleshooting Exceptions: System.Data.OleDb.OleDbException
Nao chego a lugar algum !!!
' fecha o banco de dados com ele aberto o fechado tanto faz o erro continua o mesmo
con.Close()
' aqui uma tentativa de exibir os dados na row ( ) item ( ou coluna 4)
CPFCNPJ_02.Text = ds.Tables("CONSULTA").Rows(0).Item(4)
Seguindo a depuração desprezando a exception acima, neste momento nova critica conforme abaixo:
Nullreferenceexception was unhandled
Referência de objeto não definida para uma instância de um objeto.
Consultando troubleshooting do vb chego a lugar nenhum !!!
Neste momento estou “sem noção” querendo consultar a linha 0 ( rows(0) campo 4) mas na verdade o objeto da consulta e buscar a linha que apresente o cpf digitado e validado ??? Como fazer ???
TextBox67.Text = ds.Tables("CONSULTA").Rows(0).Item(3)
mutuario.Text = ds.Tables("CONSULTA").Rows(0).Item(10)
Return ds.Tables(0).Rows(0)
End Function
-
Thedill,
A única coisa que falta no seu código é incluir o parâmetro no comando. Tal como eu escrevi no post: "e então adicione o parâmetro ao SelectCommand, tal como o meu post inicial".
Logo, a única coisa que falta é o parâmetro após a criação do DataAdapter:
Code Snippetda.SelectCommand.Parameters.AddWithValue("@v_cont", cpf);Quanto aos livros, sugiro que você primeiro aprenda a trabalhar com a linguagem VB.NET (particularmente gosto mais de C#) e então comece a estudar ADO.NET com Windows Forms. Infelizmente não tenho nenhuma dica porque os livros que conheço (tanto Windows Forms quanto ADO.NET) tratam de C#. Existem livros ótimos da Microsoft Press na Amazon, talvez seja interessante procurar por lá.
Na minha opinião é imprescindível que você leia os livros antes de tentar utilizar essas tecnologias, não sugiro a ninguém que fique na base da "tentativa e erro" e nos tutoriais online. A leitura nos dá uma ampla visão sobre o que a tecnologia oferece.
Espero ter ajudado.
Ari
-
Ari,
Voce esta completamente certo coloquei a linha acima e funcionou perfeitamente, sem esta ajuda sua nao conseguiria mesmo fazer.
Agradeço-lhe muito por vc colaborar com seus conhecimentos, parabéns.
Sobre os livros concordo com vc vou pesquisar o M Press na amazon. Espero encontrar um livro que aborde esta tecnologia de forma clara e objetiva.
E a coisa da tentativa e erro vc esta completamente certo... o maximo que consegui foi criar os forms, propriedades, etc, ou seja desenvolver o lay out do aplicativo com cara de windos WP... mas na hora de escrever os codigos ( sem muita pratica ) corri atras do GOOGLE/ ALTAVISTA/ tutorial on line e realmente é muito basico.
Ainda bem que existem pessoas como vc que possam contribuir voluntariamente seus conhecimentos adquiridos depois de muito estudo, valeu mesmo ...
Vou estudar e caminhar no aplicativo ... espero ainda contar com sua ajuda neste forum ...
valeu mesmo !!!