none
Como ligar há base de dados RRS feed

  • Pergunta

  • Boas

     

    Como defino a base de dados a mostrar no datagrid ?

    Já consegui mostrar os dados no datagrid através da ligação há base de dados que o visual basic permite fazer, mas queria aprender a fazer isso via código. A defenir o camiinho da base a dizer que tabela tem que mostrar, a fazer consultas...

     

    Alguém pode-me passar link (Português se possível) onde ensinem isso?

     

    Cumps

    sexta-feira, 9 de setembro de 2011 13:31

Respostas

  • Flashed,

     

    boa tarde!

     

    Se vc criou o bindingsource em tempo de projeto, vc precisa mudar o código para

     

    Sub CarregaMeuGrid()
            Using con As OleDbConnection = GetConnection()
                Try
    		con.open
                    Dim sSql As String = "Select * from Table1"
                    Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable
    
    
                    da.Fill(dt) 'preenche a tabela temporária DT com os dados de retorno do select
                    BindingSource1.DataSource = dt 'atribui a tabela temporária DT ao Binding Source
                    DataGridView1.DataSource = BindingSource1.datasource 'atribui o binding source a grid
                Catch ex As Exception
                    'Trate aqui os seus erros
                End Try
            End Using
        End Sub
    



    Lembrando que, estamos fazendo isso de forma crua e nua! todas as informações da TABELA1, incluíndo os nomes dos campos, será atribuída a grid. Onde os nomes das colunas serão usados como nome das colunas da grid. Primeiramente aprendemos a colocar os dados lá, depois nos preocupamos com a perfumaria ok?

     

    Att.

    Giovani

     

    PS: Mancada minha flashed!!! Esqueci de abrir a conexão com o banco! Me perdoe o erro! Eu já editei o código deste post, agora é para funcionar. Falha minha, desculpe-me.



    sábado, 10 de setembro de 2011 20:28
  • pq no botão vc chama a função do datagrid

    vc criou uma função que faz conexão beleza

    dai vc criou uma sub que chama a função conecta e conecta com o banco e mostra os dados no datagrid

    e colocou no botão a sub

    não carregada nada porque só executara no evento click

     

    mas se msm assim estiver ruim, vou mostrar como faço

     

    If BD.State = ConnectionState.Closed Then
                BD.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;" & "Data Source=C:\bd\bd.mdb"
                BD.Open()
            End If
            Dim comando As New OleDbCommand
            Dim dts As New DataSet
            Dim adapt As OleDbDataAdapter
            Dim dtr As OleDbDataReader
    
            comando.CommandType = CommandType.Text
            comando.Connection = BDZicomaq
            comando.CommandText = "SELECT * FROM Fornecedores"
           
    
            adapt = New OleDbDataAdapter(comando)
            adapt.Fill(dts, "Fornecedores")
            DataGridView1.DataSource = dts
            DataGridView1.DataMember = "Fornecedores"
        


     

     


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_


    domingo, 11 de setembro de 2011 00:39

Todas as Respostas

  • vc quer conectar com o banco de dados via codigo e mostrar no datagrid o que tem dentro banco? é isso? ta.

    Primeiro precisamos saber, qual banco que vc vai usar?


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_

    sexta-feira, 9 de setembro de 2011 15:40
  • É isso mesmo. E quero tambem trabalhar a info do datagrid.

    Por exemplo:

    Somar os valores todos de uma coluna.

    Mas acho que são coisas distintas, né?

    Vou usar o access 2007.

    sexta-feira, 9 de setembro de 2011 15:55
  • Encontrei es link que mostar um projecto a ser ligado a uma base de dados.

    Mas como eu mudo o caminho da base de dados? Quero mudar de bd como fazo?

     

    http://www.macoratti.net/07/08/vbn5_acd.htm

    sexta-feira, 9 de setembro de 2011 17:20
  •  usando acess e/ou sql server

    Operações básicas com Banco de dados e VB.NET

    http://www.linhadecodigo.com.br/Artigo.aspx?id=147

     

    somar valores de outras colunas, pode sim

    a unica coisa que tera que fazer é como ira colocá-los em seu datagrid


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_

    sexta-feira, 9 de setembro de 2011 19:10
  • Boas

     

    O link está bom amaigo :)

    Mas ainda não consegui passar da primeira etapa :(

    Na parte em que estou a carregar a conexão e a definir o caminho do ficheiro access tenho que escrever este código, e ele dá erro:

    Imports System.Data.OleDb
    Imports System.Data
    Imports namespaces = System.Data
    Imports namespaces = System.Data.OleDb
    
    
    Public Class Form1
    
        Dim conexao As OleDbConnection
    conexao = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0; DATASource=c:\teste.mdb")
    conexao.Open()
    
    End Class


    Dá-me erro no namespace, diz que ja tenho um declarado por isso não posso declarar outro com o mesmo nome! Mas que nome dou ao outro?

    E dá erro na conexão, diz que não é o esperado:

     

    Error 1 Declaration expected.

     

    Como fazo para resolver, Estou no visual basic 2008

     

    sábado, 10 de setembro de 2011 00:05
  • Flashed,

     

    Seguinte, para eu me conectar ao banco access via código eu faço assim: (Detalhe, eu coloco tudo referente a conexão em um único módulo para tentar organizar o melhor possível os códigos, mas isso é relativo a cada programador)

     

    Importando as referências:

     

    Imports System.Data.OleDb<br/>
    

     


    No ponto acima, eu só importei as referências para trabalhar com banco de dados.

     

    Depois eu crio uma função pública para que todos os forms possam usar:

     

    Public Function GetConnection() As OleDbConnection
            'Obtem a string de conexão
    
            Dim caminhoBD As String = "C:\Minha Pasta\MeuBanco.mdb"
    
            Dim strConexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & caminhoBD & ";Mode=ReadWrite;Persist Security Info=False"
            'Retorna uma conexão.
            Return New OleDbConnection(strConexao)
    
        End Function
    

     

    Essa função está simplificada para tentarmos chegar ao seu objetivo o mais rápido possível.

     

    Agora vou mostrar como você usaria essa função pública. Vamos agora criar uma suba simulando um carregamento qualquer em uma grid:

     

    Sub CarregaMeuGrid()
            Using con As OleDbConnection = GetConnection()
                Try
                    Dim sSql As String = "Select * from MINHA_TABELA"
                    Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable
    
    
                    da.Fill(dt) 'preenche a tabela temporária DT com os dados de retorno do select
    
                    Dim MeuBindingSource As BindingSource = New BindingSource 'cria um binding source em tempo de execução
                    MeuBindingSource.DataSource = dt 'atribui a tabela temporária DT ao Binding Source
                    MeuDataGridView.DataSource = MeuBindingSource 'atribui o binding source a grid
                Catch ex As Exception
                    'Trate aqui os seus erros
                End Try
            End Using
        End Sub
    

    Pronto. Você se conectou ao banco, consultou uma tabela e atribuiu o retorno da consulta ao datagridview.

     

     

    Espero ter ajudado.

     

    PS: referente a msg de erro, você tentou importar duas vezes a mesma coisa. Basicamente você só precisa de um import para trabalhar com o banco. No seu exemplo você chamou o import do data e do dataloledb e depois tentou chamar de novo o import, com um segundo jeito de se importar.  Eu só uso o Imports System.Data.OleDb e funciona bem.

     

     

    Att.

    Giovani

     

     


    sábado, 10 de setembro de 2011 13:31

  • Boas

     

    O link está bom amaigo :)

    Mas ainda não consegui passar da primeira etapa :(

    Na parte em que estou a carregar a conexão e a definir o caminho do ficheiro access tenho que escrever este código, e ele dá erro:

     

    Imports System.Data.OleDb
    Imports System.Data
    Imports namespaces = System.Data
    Imports namespaces = System.Data.OleDb
    
    
    Public Class Form1
    
        Dim conexao As OleDbConnection
    conexao = New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0; DATASource=c:\teste.mdb")
    conexao.Open()
    
    End Class

     


    Dá-me erro no namespace, diz que ja tenho um declarado por isso não posso declarar outro com o mesmo nome! Mas que nome dou ao outro?

    E dá erro na conexão, diz que não é o esperado:

     

     

    Error 1 Declaration expected.

     

    Como fazo para resolver, Estou no visual basic 2008

     

     

     

     

    isso flashed vc ta no caminho o que falta no é o seguinte, geralmente quando coloco o banco coloco dentro de uma pasta e não no C direto, então fica assim,

     

    DATASource=c:\pasta\teste.mdb

     

     


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_

    sábado, 10 de setembro de 2011 14:35
  • Ficou assim:

    Mas não aparece nada no datagrid? Arrastei para o form o  BindingSource1. Mas mesmo assim não aparece os dados da tabela no grid.

    Obrigado pessoal

    Imports System.Data.OleDb
    
    Public Class Form1
        Public Function GetConnection() As OleDbConnection
            'Obtem a string de conexão
    
            Dim caminhoBD As String = "C:\Users\Flashed\Desktop\Novapasta\Database1.mdb"
    
            Dim strConexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & caminhoBD & ";Mode=ReadWrite;Persist Security Info=False"
            'Retorna uma conexão.
            Return New OleDbConnection(strConexao)
    
    
        End Function
    
        Sub CarregaMeuGrid()
            Using con As OleDbConnection = GetConnection()
                Try
                    Dim sSql As String = "Select * from Table1"
                    Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable
    
    
                    da.Fill(dt) 'preenche a tabela temporária DT com os dados de retorno do select
    
                    Dim BindingSource1 As BindingSource = New BindingSource 'cria um binding source em tempo de execução
                    BindingSource1.DataSource = dt 'atribui a tabela temporária DT ao Binding Source
                    DataGridView1.DataSource = BindingSource1 'atribui o binding source a grid
                Catch ex As Exception
                    'Trate aqui os seus erros
                End Try
            End Using
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            CarregaMeuGrid()
        End Sub
    
    End Class


    sábado, 10 de setembro de 2011 15:21
  • Flashed,

     

    boa tarde!

     

    Se vc criou o bindingsource em tempo de projeto, vc precisa mudar o código para

     

    Sub CarregaMeuGrid()
            Using con As OleDbConnection = GetConnection()
                Try
    		con.open
                    Dim sSql As String = "Select * from Table1"
                    Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable
    
    
                    da.Fill(dt) 'preenche a tabela temporária DT com os dados de retorno do select
                    BindingSource1.DataSource = dt 'atribui a tabela temporária DT ao Binding Source
                    DataGridView1.DataSource = BindingSource1.datasource 'atribui o binding source a grid
                Catch ex As Exception
                    'Trate aqui os seus erros
                End Try
            End Using
        End Sub
    



    Lembrando que, estamos fazendo isso de forma crua e nua! todas as informações da TABELA1, incluíndo os nomes dos campos, será atribuída a grid. Onde os nomes das colunas serão usados como nome das colunas da grid. Primeiramente aprendemos a colocar os dados lá, depois nos preocupamos com a perfumaria ok?

     

    Att.

    Giovani

     

    PS: Mancada minha flashed!!! Esqueci de abrir a conexão com o banco! Me perdoe o erro! Eu já editei o código deste post, agora é para funcionar. Falha minha, desculpe-me.



    sábado, 10 de setembro de 2011 20:28
  • Esta-nos a falar alguma passos, porque quando aperto F5 abre o programa mas o datagrid fica preto.

    Na janela Immediate Window aparece a seguinte mensagem sempre que carrego o botão1:

     

    A first chance exception of type 'System.InvalidOperationException' occurred in System.Data.dll

    O que estará a faltar?

    sábado, 10 de setembro de 2011 23:40
  • pq no botão vc chama a função do datagrid

    vc criou uma função que faz conexão beleza

    dai vc criou uma sub que chama a função conecta e conecta com o banco e mostra os dados no datagrid

    e colocou no botão a sub

    não carregada nada porque só executara no evento click

     

    mas se msm assim estiver ruim, vou mostrar como faço

     

    If BD.State = ConnectionState.Closed Then
                BD.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;" & "Data Source=C:\bd\bd.mdb"
                BD.Open()
            End If
            Dim comando As New OleDbCommand
            Dim dts As New DataSet
            Dim adapt As OleDbDataAdapter
            Dim dtr As OleDbDataReader
    
            comando.CommandType = CommandType.Text
            comando.Connection = BDZicomaq
            comando.CommandText = "SELECT * FROM Fornecedores"
           
    
            adapt = New OleDbDataAdapter(comando)
            adapt.Fill(dts, "Fornecedores")
            DataGridView1.DataSource = dts
            DataGridView1.DataMember = "Fornecedores"
        


     

     


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_


    domingo, 11 de setembro de 2011 00:39
  • Mas mesmo carregando no botão não aparece nada no datagrid.

     

    Jean voce pode passar os eu código completo para eu testar aqui?

    domingo, 11 de setembro de 2011 00:45
  • Boas

    O que estou a fazer de mal neste código?

    Eu acho que não estou aligar bem o código? Porque no sub carregaMeuGrid eu não fazo ligação com a Public Function GetConnection, que é onde tenho definido o meu caminho para o access? Como ele sabe onde esta o ficheiro? 

    Cumps

     

    Imports System.Data.OleDb
    
    Public Class Form1
        Public Function GetConnection() As OleDbConnection
            'Obtem a string de conexão
    
            Dim caminhoBD As String = "C:\Users\Flashed\Desktop\Novapasta\teste.mdb"
    
            Dim strConexao As String = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" & caminhoBD & ";Mode=ReadWrite;Persist Security Info=False"
            'Retorna uma conexão.
            Return New OleDbConnection(strConexao)
    
    
        End Function
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            CarregaMeuGrid()
        End Sub
        Sub CarregaMeuGrid()
            Using con As OleDbConnection = GetConnection()
                Try
                    con.Open()
                    Dim sSql As String = "Select * from teste"
                    Dim cmd As OleDbCommand = New OleDbCommand(sSql, con)
                    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                    Dim dt As DataTable = New DataTable
    
    
                    da.Fill(dt) 'preenche a tabela temporária DT com os dados de retorno do select
                    BindingSource1.DataSource = dt 'atribui a tabela temporária DT ao Binding Source
                    DataGridView1.DataSource = BindingSource1.DataSource 'atribui o binding source a grid
    
                Catch ex As Exception
                    'Trate aqui os seus erros
                End Try
            End Using
        End Sub
    
    End Class


     


    domingo, 11 de setembro de 2011 10:30
  • já consegui aceder há base de dados :)

    Mas só consigo aceder num pc de Win 32bits porque no meu win7 64bits da-me esta mensagem de erro:

    O fornecedor 'Microsoft.Jet.OLEDB.4.0' não está registado no computador local.

    Como resolvo isto?

    Imports System.Data.OleDb
    Public Class Form2
    
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source =C:\teste.mdb")
            Dim da As New OleDbDataAdapter("Select * From teste", con)
            Dim dt As New DataTable
            da.Fill(dt)
            DataGridView1.DataSource = dt
            da.Dispose()
            con.close()
    
        End Sub
    End Class
    Obrigado

    domingo, 11 de setembro de 2011 11:48
  • hmm então beleza, carrega normal em um pc xp 86x pq o VS ja é pra ele, no WIndows 7 vc tem que configurar o VS pra 86x

     

    isso pode ajudar

    http://social.msdn.microsoft.com/Forums/pt/vsvbasicpt/thread/a2e0a61d-acbe-484e-9d66-7e052aa911c8


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_

    domingo, 11 de setembro de 2011 15:25
  • Ajudou e muito :)

     

    Olhe..onde eu sei que provider devo utilizar para o access 2007? Quero abrir ficheiro.accdb e não sei o provider.

    domingo, 11 de setembro de 2011 22:47
  • já descobri :)

    É Provider=Microsoft.ACE.OLEDB.12.0; Data Source =..... :)

    Outro assunto que ando aqui as voltas, na minha base de dados tenho um campo chamado imagem, objecto OLE que faz ligação a uma imagem. Ela é mostrada no grid mas em tamanho muito grande.

    Como fazo para que as imagem sejam mostradas n grid sempre do mesmo tamanho? Tipo, 2 por 2 cm?

     

    Abrcs

    domingo, 11 de setembro de 2011 22:53
  • marque como resposta o que te ajudou

    a imagem é upada para um picture box? ou direto no grid?

    não entendi muito bem


    Jean Felipe
    Email: jeanfelipfiais@hotmail.com
    Twitter: @JeanFelipe_

    segunda-feira, 12 de setembro de 2011 12:03
  • Vai directamente para o grid.

    cumps 

    segunda-feira, 12 de setembro de 2011 16:49