Ir para o conteúdo
Luisveiga18

Duvida - VB2010 e Access 2010

Mensagens Recomendadas

Luisveiga18

Estou com um pequeno problema. Tentei usuar os codigos que estao aqui no Portugal a Programar - http://wiki.portugal-a-programar.pt/dev_net:vb.net:access

Mas infelizmente não estou a conseguir faze-los funcionar, pois os dados nem estão a aparecer na datagrid

Imports System.Data.OleDb
Public Class Form3
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Dim ConnectionString As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB" & Application.StartupPath & "BD.accdb")
 Dim query As String = "SELECT * FROM Tabela_Teste"
 Dim DataAdapter As New OleDbDataAdapter(query, ConnectionString)
 Dim MyData As New DataSet
 DataAdapter.Fill(MyData, "Tabela_Teste")
 Me.DataGridView1.DataSource = MyData.Tables("Tabela_Teste") ' Neste caso utilizei uma datagridview para visualizar os dados
End Sub

Não sei se será pk a minha versão do access é 2010 ou então se fiz algo de errado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

A primeira coisa que me "salta à vista" é o facto de estares a usar um provider para MS Access 2003 e não para MS Access 2010 (accdb), quando a base de dados é um ficheiro de Access 2010.

Imports System.Data.OleDb
Public Class Form3
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB" & Application.StartupPath & "BD.accdb") 'estavas a usar o provider para access 2003
        Dim query As String = "SELECT * FROM Tabela_Teste"
        Dim DataAdapter As New OleDbDataAdapter(query, ConnectionString)
        Dim MyData As New DataSet
        DataAdapter.Fill(MyData, "Tabela_Teste")
        Me.DataGridView1.DataSource = MyData.Tables("Tabela_Teste") ' Neste caso utilizei uma datagridview para visualizar os dados
End Sub

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Luisveiga18

Agora esta tudo a funcionar mas estou com outro problema. Quando adiciono um dado a datagrid não "atualiza", so quando fecho e abro o programa de novo é que podemos ver os dados introduzidos anteriormente. O adicionar que eu estou a usar é este:

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB.accdb")
 Dim query As String = "INSERT INTO Tabela_Teste([Nome], [Numero]) VALUES (@Nome, @Numero)"
 Dim command As New OleDbCommand(query, ConnectionString)
 command.Parameters.Add("@Nome", OleDbType.VarChar).Value = TextBox2.Text
 command.Parameters.Add("@Numero", OleDbType.VarChar).Value = TextBox3.Text
 ConnectionString.Open()
 Dim x As Integer = command.ExecuteNonQuery()
 If x < 1 Then
	 MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
 Else
	 MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
 End If
 ConnectionString.Close()
 command = Nothing
End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

Em teoria podes utilizar o metodo Refresh() da DataGirdView. No código que apresentas, apenas tens uma ligação à base de dados e uma instrução de insert, não tens a DatagridView. Assim não faço a mais pequena ideia de como a estás a preencher, se estás a usar Datatables, se estás a usar um ciclo para preencher a DatagridView, se outra forma.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Luisveiga18

Não tinha colocado o código completo.

Imports System.Data.OleDb
Public Class Form3
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB.accdb")
 Dim query As String = "SELECT * FROM Tabela_Teste"
 Dim DataAdapter As New OleDbDataAdapter(query, ConnectionString)
 Dim MyData As New DataSet
 DataAdapter.Fill(MyData, "Tabela_Teste")
 Me.DataGridView1.DataSource = MyData.Tables("Tabela_Teste")
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB.accdb")
 Dim query As String = "INSERT INTO Tabela_Teste([Nome], [Numero]) VALUES (@Nome, @Numero)"
 Dim command As New OleDbCommand(query, ConnectionString)
 command.Parameters.Add("@Nome", OleDbType.VarChar).Value = TextBox2.Text
 command.Parameters.Add("@Numero", OleDbType.VarChar).Value = TextBox3.Text
 ConnectionString.Open()
 Dim x As Integer = command.ExecuteNonQuery()
 If x < 1 Then
	 MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
 Else
	 MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
 End If
 ConnectionString.Close()
 command = Nothing
End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

O que te acontece é que só é feito o refresh quando fazes o load do form. O Refresh() não funciona porque o que tens carregado na datatable corresponde ao resultado do select feito quando carregas o form.


Public Sub actualiza()
	 Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Luís Sebastião\Desktop\PAP 2012-2013\RestauGestãoDB.accdb")
	 Dim query As String = "SELECT * FROM Tabela_Teste"
	 Dim DataAdapter As New OleDbDataAdapter(query, ConnectionString)
	 Dim MyData As New DataSet
	 MyData.clear()
	 DataAdapter.Fill(MyData, "Tabela_Teste")
	 'limpa a DataGridView1
	 DataGridView1.Rows.Clear()
	 'preenche novamente a DataGridView1
	 DataGridView1.DataSource= MyData.Tables("Tabela_Teste")
End Sub

Basta chamares esta sub no fim da insersão dos dados, para te actualizar a datagridview.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.