Joca Posted March 8, 2009 at 09:23 PM Report Share #249254 Posted March 8, 2009 at 09:23 PM 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 Link to comment Share on other sites More sharing options...
jpaulino Posted March 8, 2009 at 09:46 PM Report Share #249265 Posted March 8, 2009 at 09:46 PM Já viste este exemplo ? VB.NET: Utilizando o controlo DataGridView Link to comment Share on other sites More sharing options...
Joca Posted March 8, 2009 at 10:03 PM Author Report Share #249273 Posted March 8, 2009 at 10:03 PM 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)) Link to comment Share on other sites More sharing options...
jpaulino Posted March 8, 2009 at 10:08 PM Report Share #249274 Posted March 8, 2009 at 10:08 PM 'NomeDoMeuFicheiro.txt' Estás a usar um ficheiro de texto ? Nunca tentei mas acho difícil que funcione dessa maneira. Link to comment Share on other sites More sharing options...
Joca Posted March 8, 2009 at 10:46 PM Author Report Share #249283 Posted March 8, 2009 at 10:46 PM 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? Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now