Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Joca

Como enviar as alterações feitas na DataGridview para a base de dados?

Recommended Posts

Joca

Boas!

Aqui há uns tempos criei uma aplicaçãozita só para ver o conteúdo dos ficheiros numa DataGridView e, ao mesmo tempo ver as imagens para cada uma das linhas dessa DataGridView.

Porém...gostei tanto que, agora, queria enviar as alterações feitas directamente na DataGridView, para a base de dados em texto.

Ou seja, precisava de fazer exactamente o que o assunto deste tópico refere.

Claro que o ideal seria gravar na base de dados sempre que fizesse TAB ou ENTER... mas se nem do código seguinte consigo sair...

Ainda não consegui entender porque é que é que não guarda TODO o percurso da base de dados mas, apenas o nome do ficheiro...

Como faço isto sem que dê o tal erro ao guardar as alterações?!

Imports System.Data.OleDb

Public Class Form1

    Dim da As OleDbDataAdapter

    Dim ds As DataSet

    Dim SQL As String

    ' Nome do ficheiro aberto com OpenFileDialog
    Dim nomeFicheiro As String

    ' Nome da pasta onde o ficheiro se encontra
    Dim nomePasta As String


    Private Sub btnEscolheFicheiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEscolheFicheiro.Click

        With OpenFileDialog1
            .Filter = "Ficheiros Texto (*.txt)|*.txt"
            .FileName = ""
        End With

        If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then

            ' Guarda o nome do ficheiro acedido
            nomeFicheiro = OpenFileDialog1.FileName

            ' Guarda o nome da pasta onde o ficheiro se encontra
            nomePasta = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)


            ' Indica a informação para a ligação à base de dados
            Dim connectionString As String = _
                    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=C:\;" & _
                    "Extended Properties='text;" & _
                    "HDR=Yes;FMT=Delimited'"

            ' Cria um novo OleDbDataAdapter que servirá de ligação
            ' entre a base de dados e, a DataTable em memória
            SQL = "SELECT * FROM " & CStr(nomeFicheiro)
            da = New OleDbDataAdapter(SQL, connectionString)


            ' Cria um OleDbCommandBuilder para fazer UPDATE automaticamente
            Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)


            '---------------------------------------------------------------------------
            '1.ª HIPÓTESE:
            ' Cria um novo DataSet, ou seja, uma representação em memória da informação
            'ds = New DataSet

            ' Coloca a informação da tabela definida no DataSet
            'da.Fill(ds, CStr(nomeFicheiro))

            ' Define que a fonte de dados da DataGridView é a nossa DataSet
            ' criando automáticamente as colunas e linhas de dados
            'Me.DataGridView1.DataSource = ds.Tables(CStr(nomeFicheiro))
            '--------------------------------------------------------------------------


            '2.ª HIPÓTESE:
            ' DataTable para registar as alterações em memória
            Dim dt As DataTable = New DataTable()

            ' Preenche a DataTable com os dados
            da.Fill(dt)

            ' Envia à DataGridView, os dados na DataTable
            DataGridView1.DataSource = dt


        End If

    End Sub

    Private Sub btnGuardaAlterações_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardaAlterações.Click

        ' Actualizar a base de dados, a partir da fonte à qual
        ' a DataGridView está sujeita (neste caso, é uma DataTable)
        da.Update(DirectCast(DataGridView1.DataSource, DataTable))
        MessageBox.Show("Alterações gravadas com sucesso!", "", MessageBoxButtons.OK)

    End Sub
End Class

Share this post


Link to post
Share on other sites
Joca

Se usar a 1.ª hipótese e, colocar esse código no botão gravar, dá-me o mesmo erro:

System.Data.OleDb.OleDbException was unhandled

        ErrorCode = -2147217865

        Message = "O motor de base de dados Microsoft Jet não conseguiu

        encontrar o objecto 'NomeDoMeuFicheiro.txt'. Verifique se o

        objecto existe e se o nome e o caminho do objecto foram introduzidos correctamente."

        Source = "Microsoft JET Database Engine"

'http://vbtuga.blogspot.com/2008/04/vbnet-utilizando-o-controlo.html
        ' Cria um OleDbCommandBuilder para fazer UPDATE automaticamente
        Dim cb As New OleDbCommandBuilder(da)

        ' Actualiza na DataSet, e por sua vez na tabela, as alterações efectadas
        da.Update(ds, CStr(nomeFicheiro))

     

Share this post


Link to post
Share on other sites
jpaulino

'NomeDoMeuFicheiro.txt'

Estás a usar um ficheiro de texto ? Nunca tentei mas acho difícil que funcione dessa maneira.

Share this post


Link to post
Share on other sites
Joca

Acho que o princípio é o mesmo...

Com uma base de dados acess ou sql, o código acima também não exibiria só o nome do ficheiro, em vez do percurso completo do ficheiro?

É que o erro é esse...só me exibe o nome do ficheiro e, o programa precisa de saber o percurso completo do ficheiro...

Como indicar o percurso completo do ficheiro?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.