none
Como abrir uma base de dados e uma tabela no VB.NET?? RRS feed

  • Pergunta

  • Pessoal.. seguinte, sou desenvolvedor em VB6 e estou migrando meus conhecimentos para o VB.NET, e no momento minha dificuldade é como ABRIR UM ARQUIVO EM ACCESS, ABRIR A TABELA, GRAVAR UM CAMPO E FECHAR A TABELA E A BASE DE DADOS.. Alguem pode me ajudar?

    EXEMPLO:
     
    Abrindo um banco de dados ACCESS no VB6:
     
    Dim VAL As Variant
    VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
    Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
    Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"
    TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
    TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
    If TAB_DEV.NoMatch Then
    TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
    Else
    TAB_DEV.Edit - AQUI EDITO UM REGISTRO
    End If
    TAB_DEV(0) = DEVE.TEXT
    TAB_DEV(1) = NUCPF.TEXT
    TAB_DEV.UPDATE - AQUI GRAVO NA TABELA
    TAB_DEV.CLOSE - FECHO A TABELA
    MDB_DADOS.CLOSE - FECHO A BASE DE DADOS

    NO VB.NET COMO FICARIA A ROTINA ACIMA???
    Agradeço por enquanto e fico no aguardo.

    Um ABraço
    Roger

    domingo, 31 de maio de 2009 07:22

Respostas

  • Caro Roger,

    No exemplo abaixo demonstra bem como funciona isso no VB.Net

            Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\databases\meuBancoDeDados.mdb"
    
            Dim queryString As String = "INSERT INTO tabela (id, nome), VALUES (@id, @nome)"
    
            Using CN As New System.Data.OleDb.OleDbConnection(connectionString)
                CN.Open()
                Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN)
                CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@id", id))
                CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@nome", nome))
    
                CMD.ExecuteNonQuery()
            End Using
    Maiores informações de como utilizar o acesso a dados do VB.Net com Access, dê uma olhada neste link: http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx

    Att,

    Paulo R. Pereira
    http://sqlfromhell.wordpress.com/ 

    Obs.: Se a resposta for útil não se esqueça de marcar. Obrigado!
    domingo, 31 de maio de 2009 12:26
  • Roger,

    Quanto à duplicidade de posts, sem problema... Não entenda o que falei como uma crítica, mas, é só pra deixarmos o fórum mais organizado...

    Já quanto à sua dúvida acima, eu resolveria +/- assim:

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Using cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb")
                cn.Open()
    
                If (cn.State.Equals(ConnectionState.Open)) Then
                    Dim cm As New OleDb.OleDbCommand()
    
                    cm.CommandText = "SELECT Nome FROM Pessoas WHERE (Nome LIKE @p1)"
                    cm.Parameters.AddWithValue("@p1", tbNome.Text)
                    cm.Parameters.AddWithValue("@p2", tbCPF.Text)
                    cm.Connection = cn
    
                    Try
                        If (cm.ExecuteScalar() Is Nothing) Then
                            cm.CommandText = "INSERT INTO Pessoas (Nome, CPF) VALUES (@p1, @p2)"
                        Else
                            cm.CommandText = "UPDATE Pessoas SET " + _
                                                "CPF = @p2 " + _
                                             "WHERE (Nome LIKE @p1)"
                        End If
    
                        Try
                            cm.ExecuteNonQuery()
                        Catch ex As Exception
                            MessageBox.Show(ex.Message)
                        End Try
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    End Try
                End If
    
                cn.Close()
            End Using
        End Sub
    

    André Alves de Lima - http://andrealveslima.spaces.live.com
    domingo, 7 de junho de 2009 01:18
    Moderador
  • Olá,

    Só uma pequena dica, e embora funcione também desse modo, o Access não usa querys parametrizaveis a o comando T-SQL deve ser alterado para

    "SELECT Nome FROM Pessoas WHERE (Nome LIKE ?)"

    Segue um tutorial sobre acesso a dados em Access que pode ajudar: http://wiki.portugal-a-programar.org/visual_basic_.net:gestao_bases_dados_access


    Espero que ajude!


    Jorge Paulino
    http://vbtuga.blogspot.com/
    domingo, 7 de junho de 2009 23:03

Todas as Respostas

  • Caro Roger,

    No exemplo abaixo demonstra bem como funciona isso no VB.Net

            Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\databases\meuBancoDeDados.mdb"
    
            Dim queryString As String = "INSERT INTO tabela (id, nome), VALUES (@id, @nome)"
    
            Using CN As New System.Data.OleDb.OleDbConnection(connectionString)
                CN.Open()
                Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN)
                CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@id", id))
                CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@nome", nome))
    
                CMD.ExecuteNonQuery()
            End Using
    Maiores informações de como utilizar o acesso a dados do VB.Net com Access, dê uma olhada neste link: http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx

    Att,

    Paulo R. Pereira
    http://sqlfromhell.wordpress.com/ 

    Obs.: Se a resposta for útil não se esqueça de marcar. Obrigado!
    domingo, 31 de maio de 2009 12:26
  • Ola Paulo..

    Antecipadamente , agradeço a iniciativa e retorno com as dicas para o meu problema.
    Hoje a noite vou aplicar o que vc postou em resposta e lhe retorno se deu certo ok?

    Grande abraço
    Roger - Curitiba-Pr
    segunda-feira, 1 de junho de 2009 16:22
  • Pessoal.. seguinte, sou desenvolvedor em VB6 e estou migrando meus conhecimentos para o VB.NET, e no momento minha dificuldade é como ABRIR UM ARQUIVO EM ACCESS, ABRIR A TABELA, GRAVAR UM CAMPO E FECHAR A TABELA E A BASE DE DADOS.. Alguem pode me ajudar?

    EXEMPLO:
     
    Abrindo um banco de dados ACCESS no VB6:
     
    Dim VAL As Variant
    VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
    Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
    Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"
    TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
    TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
    If TAB_DEV.NoMatch Then
    TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
    Else
    TAB_DEV.Edit - AQUI EDITO UM REGISTRO
    End If
    TAB_DEV(0) = DEVE.TEXT
    TAB_DEV(1) = NUCPF.TEXT
    TAB_DEV.UPDATE - AQUI GRAVO NA TABELA
    TAB_DEV.CLOSE - FECHO A TABELA
    MDB_DADOS.CLOSE - FECHO A BASE DE DADOS

    NO VB.NET COMO FICARIA A ROTINA ACIMA???
    Agradeço por enquanto e fico no aguardo.

    Um ABraço
    Roger
    sexta-feira, 5 de junho de 2009 23:10
  • sábado, 6 de junho de 2009 03:12
  • È, MAS A SOLUÇÃO APRESENTADA NAO RODA.. DA UM ERRO E NADA...
    sábado, 6 de junho de 2009 07:11
  • Então.. tentei usar as suas dicas, mas nao dá.. ao rodar, dá um erro e nao roda...
    Ja verifiquei os códigos.. estão corretos, mas na hora de rodar as linhas abaixo ele da erro:

    linha q da o erro:
                CN.Open()
    Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN)
    sábado, 6 de junho de 2009 07:15
  • Posta o erro aqui irmão para podermos ajudar...

    segue novamente como fazer a conexão e executar um comando:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb")
            Dim cmd As New OleDb.OleDbCommand("INSERT INTO pessoas(Nome,CPF)VALUES(@p1,@p2)", cn)
            cmd.Parameters.AddWithValue("@p1", Nome.Text)
            cmd.Parameters.AddWithValue("@p2", cpf.Text)
            cmd.Connection.Open()
            Try
                cmd.ExecuteNonQuery()
                cmd.Connection.Close()
                MessageBox.Show("Incluido")
            Catch ex As OleDb.OleDbException
                MessageBox.Show(ex.Message)
                cmd.Connection.Close()
            End Try
          
    
    
    
    
        End Sub
    Abraços.
    Edilson Moura
    sábado, 6 de junho de 2009 12:09
  • Roger,

    Por favor, continue o post que nosso amigo Edilson indicou para evitarmos duplicidade de posts no fórum.

    Obrigado.

    Continuação em:
    http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/1f232637-4cca-4922-b8f5-82ce8d94f88d


    André Alves de Lima - http://andrealveslima.spaces.live.com
    sábado, 6 de junho de 2009 14:29
    Moderador
  • Roger,

    Você disse que a solução não funcionou (http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/561dd448-9e0f-407b-b5a6-733e060d58ef/), então, por favor, vamos continuar a discussão neste post aqui...

     


    André Alves de Lima - http://andrealveslima.spaces.live.com
    sábado, 6 de junho de 2009 14:29
    Moderador
  • Opa! Agora sim deu certo. Apliquei o código exemplo acima, alterei de acordo com os campos do meu FORM e PA!! Deu certo!
    Thanks pela força.

    ABraxxxxx
    sábado, 6 de junho de 2009 15:47
  • Resolvido o problema com a solução do amigo Edilson Moura. Agradeço também a ajuda do amigo Paulo.
    Sorry pela duplicidade do POST, pois entendi q POST mais recentes são visualizados na primeira página do FORUM, e assim, consequentemente teria chance de ser visualizado rapidamente pelos visitantes. Como sou usuario NOVO aqui do fórum, cometi tal GAFE, que nao mais se repetirá. E com certeza, nos esbarraremos + vezes por aki.

    Um abraço a todos os colaboradores!!
    Roger

    Querem saber + sobre o amigo aqui? Add meu ORKUT : DJ ROGER CWB

    Abraxxxxxxxxxxxx
    sábado, 6 de junho de 2009 15:50
  • Entao brother... consegui fazer gravar na base com a sua dica acima, entretanto, continuo com o problema... pois preciso localizar o REGISTRO na tabela, se ele EXISTIR na BASE, EDITA, senao ADD um novo registro na tabela.

    No VB6 eu fazia assim:

    Dim VAL As Variant
    VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
    Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
    Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"


    --------------------------------------------- AQUI EU DEFINIA O INDEX DO ARQUIVO, FAZIA A PESQUISA,SE EXITE , EDITA, SENAO ADD ------------------

    TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
    TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
    If TAB_DEV.NoMatch Then
    TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
    Else
    TAB_DEV.Edit - AQUI EDITO UM REGISTRO
    End If
    '-------------------------------------------------------------------------------- FIM DA ROTINA DE PESQUISA --------------------------------------------------------------------------------------
    TAB_DEV(0) = DEVE.TEXT
    TAB_DEV(1) = NUCPF.TEXT
    TAB_DEV.UPDATE - AQUI GRAVO NA TABELA
    TAB_DEV.CLOSE - FECHO A TABELA
    MDB_DADOS.CLOSE - FECHO A BASE DE DADOS




    NO CASO DA SUA ROTINA ACIMA APRESENTADA, COMO FICARIA ESSA SITUAÇÃO?
    Abraxxxxxx







    sábado, 6 de junho de 2009 21:46
  • Roger,

    Quanto à duplicidade de posts, sem problema... Não entenda o que falei como uma crítica, mas, é só pra deixarmos o fórum mais organizado...

    Já quanto à sua dúvida acima, eu resolveria +/- assim:

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Using cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb")
                cn.Open()
    
                If (cn.State.Equals(ConnectionState.Open)) Then
                    Dim cm As New OleDb.OleDbCommand()
    
                    cm.CommandText = "SELECT Nome FROM Pessoas WHERE (Nome LIKE @p1)"
                    cm.Parameters.AddWithValue("@p1", tbNome.Text)
                    cm.Parameters.AddWithValue("@p2", tbCPF.Text)
                    cm.Connection = cn
    
                    Try
                        If (cm.ExecuteScalar() Is Nothing) Then
                            cm.CommandText = "INSERT INTO Pessoas (Nome, CPF) VALUES (@p1, @p2)"
                        Else
                            cm.CommandText = "UPDATE Pessoas SET " + _
                                                "CPF = @p2 " + _
                                             "WHERE (Nome LIKE @p1)"
                        End If
    
                        Try
                            cm.ExecuteNonQuery()
                        Catch ex As Exception
                            MessageBox.Show(ex.Message)
                        End Try
                    Catch ex As Exception
                        MessageBox.Show(ex.Message)
                    End Try
                End If
    
                cn.Close()
            End Using
        End Sub
    

    André Alves de Lima - http://andrealveslima.spaces.live.com
    domingo, 7 de junho de 2009 01:18
    Moderador
  • Caracas.. mudou tudo no VB.. quer dizer q tudo q aprendi na programação pra VB foi pras cucuias????
    Enfim.. vou aplicar a sua rotina acima e verificar se roda... valeu!!

    Grande abraço!
    domingo, 7 de junho de 2009 14:23
  • Olá,

    Só uma pequena dica, e embora funcione também desse modo, o Access não usa querys parametrizaveis a o comando T-SQL deve ser alterado para

    "SELECT Nome FROM Pessoas WHERE (Nome LIKE ?)"

    Segue um tutorial sobre acesso a dados em Access que pode ajudar: http://wiki.portugal-a-programar.org/visual_basic_.net:gestao_bases_dados_access


    Espero que ajude!


    Jorge Paulino
    http://vbtuga.blogspot.com/
    domingo, 7 de junho de 2009 23:03
  • Ao amigo Edilson, estou fazendo uma resalva na solução que ele apresentou acima.

    1- A solução foi aplicada e funcionou.. mas com um porém :

    Ao digitar os dados no FORMULARIO, TODOS os campos do formulário devem ser preenchidos.
    Caso deixe um dos campos sem prencher, o sistema nao aceita GRAVAR os dados na tabela.

    Observei que para campos com FORMATO MEMO (text multi-line) a rotina acima nao aceita que
    o campo fique em branco, bem como para campos formato DATA, que  também devem ser preenchidos, senao o sistema
    nao aceita gravar, exibindo uma mensagem de erro.

    Isto, no meu modo de ver, eh uma coisa ruim , já que em uma tela com muitos campos, se o operador nao tiver um
    dado pra iserir no campo, deverá preencher com um caracter qualquer para poder gravar os dados na tabela.

    Deste modo, vou verificar se consigo driblar o problema e qualquer coisa, posto aqui.
    Apenas frisando, que os campos na tabela estao todos parametrizados como NULL = true  

    Abraxxx a todos  e boa semana!
    segunda-feira, 8 de junho de 2009 09:05
  • opa.. agradeço o amigo Jorge.. vou testar a sugestao e comento posteriormente.
    Abraço e boa semana
    segunda-feira, 8 de junho de 2009 09:07
  • Bem observado Jorge.
    André Alves de Lima - http://andrealveslima.spaces.live.com
    terça-feira, 9 de junho de 2009 01:15
    Moderador
  • Ola pessoal.. seguinte, como faço pra abrir a base de dados (ACCESS), localizar um registro pelo primary key e mostrar os dados no form?

    sexta-feira, 12 de junho de 2009 10:04