none
Acessando (consulta) linha especifica num banco dados access usando visual basic 2005 RRS feed

  • 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.OleDb

     

    Dim 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

     

     

     

     

    sábado, 22 de novembro de 2008 13:00

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 Snippet

    Public 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 Snippet

    Sub 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

     

    sábado, 22 de novembro de 2008 13:50
  • 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.OleDbConnection

    con.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,

    terça-feira, 25 de novembro de 2008 02:56
  • 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 Snippet

    Dim 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

    quarta-feira, 26 de novembro de 2008 00:35
  • 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

     

    quarta-feira, 26 de novembro de 2008 14:09
  • 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 Snippet
    da.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

    quarta-feira, 26 de novembro de 2008 18:21
  •  

    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 !!!

     

    quinta-feira, 27 de novembro de 2008 13:44