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

Joca

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

5 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

     

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

'NomeDoMeuFicheiro.txt'

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora