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

zephirus

Gravar dados para base de dados Access

28 mensagens neste tópico

Olá a todos,

Tenho uma base de dados com alguns dados lá dentro mas quero no meu programa adicionar uma coluna e preencher com valores e depois ao carregar num botão, que a base de dados seja actualizada. Como faço isto?

Até agora, para abrir a base de dados e mostrar os dados numa DataGridView, tenho o seguinte código:

Sub MainFormLoad(sender As Object, e As EventArgs)
Dim conexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\database.mdb"
Dim sql As String = "Select [iD], [data], [número1], [número2] from basededados"

Dim da As New data.OleDb.OleDbDataAdapter(sql,conexao)
Dim ds As New Data.DataSet
    
da.Fill(ds, "basededados")
DataGridView1.DataSource = ds
DataGridView1.DataMember = "basededados"
End Sub

Depois para acrescentar uma coluna tenho isto:

Sub Button1Click(sender As Object, e As EventArgs)

Dim ColumnSum As New DataGridViewColumn

DataGridView1.Columns.Add("soma","Soma de números")

Dim sum As Integer
For i1 As Integer = 0 To Datagridview1.RowCount - 2
soma = 0
For i2 As Integer = 1 To 2
	sum = sum + Datagridview1.Rows(i1).Cells(i2 + 1).Value
Next
Datagridview1.Rows(i1).Cells(10).Value = sum
Next

End Sub

O que eu pretendia agora era que ao clicar num botão, o ficheiro database.mdb fosse actualizado. Como faço isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Então vamos lá ver se percebi! Carregas a datagridview de uma base de dados, adicionar uma coluna e depois queres voltar a gravar os dados para o access, certo ?

E a coluna que inseriste ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Então vamos lá ver se percebi! Carregas a datagridview de uma base de dados, adicionar uma coluna e depois queres voltar a gravar os dados para o access, certo ?

E a coluna que inseriste ?

Sim, com a coluna que adicionei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E a tabela já está preparada para isso ... certo ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E a tabela já está preparada para isso ... certo ?

Como assim? O ficheiro access só tem as colunas originais. A nova é adicionado no programa e o datagridview não tem nada de especial... Não sei se estou a perceber a tua pergunta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que estou a perguntar é o que vais fazer com a coluna que adicionas. É só para calculo, etc ? Não vai para a base de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que estou a perguntar é o que vais fazer com a coluna que adicionas. É só para calculo, etc ? Não vai para a base de dados.

Vai para a base de dados, sim :P

Imagina:

BD original:

col1  col2  col3

1      5        8

2      6        9

3      7        0

e eu depois adiciono a coluna "col3" ficando com isto no programa:

col1  col2  col3  col4

1      5        8      a

2      6        9      b

3      7        0      c

Eu quero ficar com a base de dados com estas quatro colunas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok daí a minha pergunta: e a base de dados já tem e quatro colunas ou tens de criar uma coluna à base de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok daí a minha pergunta: e a base de dados já tem e quatro colunas ou tens de criar uma coluna à base de dados.

Ops, enganei-me na última resposta. Onde está "adiciono a coluna "col3"", devia estar "adiciono a coluna "col4"". A base de dados NÃO TEM a coluna 4 originalmente :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, embora não entenda muito bem ... vamos fazer por fazer.

1º Executar um ExecuteNonQuery para alterar a base de dados (adicionar uma nova coluna)

       Dim conexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\database.mdb"

        Dim query As String = "ALTER TABLE NomeDaTabela ADD COLUMN [NovaColuna] TEXT(20)"

        Using conn As New OleDbConnection(conexao)

            conn.Open()

            Dim cmd As OleDbCommand = New OleDbCommand(query, conn)

            Dim x As Integer = cmd.ExecuteNonQuery()

        End Using

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Depois quanto tiveres isso a funcionar diz ... vamos para a segunda parte.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá jpaulino.

A linha "Using conn As New OleDbConnection(conexao)" dá-me erro: Diz o seguinte: Type 'OleDbConnection' is not defined. (BC30002)"

Qual é o problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou colocas System.Data.OleDb.OleDbDataAdapter ou fazer o Import System.Data.OleDb

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Continua a não dar. Eu de facto não percebo absolutamente nada de bases de dados por isso nem sei por onde começar.

Acrescentei isto ao meu código:

Imports System.Data.OleDb

Imports System.Data.OleDb.OleDbDataAdapter

Mas agora obtenho este erro:

14399517zw7.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que vejo utilizas o Sharo Develop ... pensava que podias vazer tudo como o vb.net!

Tenta antes assim:

        Dim conexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\database.mdb"

        Dim query As String = "ALTER TABLE NomeDaTabela ADD COLUMN [NovaColuna] TEXT(20)"

        Dim conn As New OleDbConnection(conexao)

        conn.Open()

        Dim cmd As OleDbCommand = New OleDbCommand(query, conn)

        Dim x As Integer = cmd.ExecuteNonQuery()

        conn.Close()

        conn = Nothing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, eu bem digo que não percebo nada de bases de dados. O código inicial que me deste afinal funciona. Agora quando me enviaste este olhei com mais atenção e reparei na parte que diz "NomeDaTabela". Aí tenho de por o nome da tabela, como é óbvio. Nem tinha reparado.

Conclusão, isto agora já deu e criou a coluna.

Só uma coisa. O nome da coluna tem de ficar entre os parentesis rectos, certo? E o que significa o TEXT(20)? É o formato dos dados dessa coluna?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, fico mais descansado ...

Bem o nome entre parentesis rectos deve ser utilizado sempre. Serve para evitar erros como nomes de campos com espaços ou a utilização de palavras reservadas do access/SQL. Por segurança deve-se usar.

O TEXT(20) é a definição do campo. Neste caso adicionas um novo campo do tipo texto com 20 caracteres. Deves adequar ao que precisas.

Agora a segunda parte ....

Tens a datagridview a funcionar e adicionas a um coluna. Queres passar toda essa informação "de volta" para a base de dados é correcto ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, fico mais descansado ...

Bem o nome entre parentesis rectos deve ser utilizado sempre. Serve para evitar erros como nomes de campos com espaços ou a utilização de palavras reservadas do access/SQL. Por segurança deve-se usar.

O TEXT(20) é a definição do campo. Neste caso adicionas um novo campo do tipo texto com 20 caracteres. Deves adequar ao que precisas.

Agora a segunda parte ....

Tens a datagridview a funcionar e adicionas a um coluna. Queres passar toda essa informação "de volta" para a base de dados é correcto ?

Com o código que me deste, a coluna fica já gravada na base de dados. Não tenho é dados na coluna. O procedimento para adicionar valores sei fazer, gravá-los é que se calhar não...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, primeiro sem adicionares a coluna faz o seguinte.

Defines o DataAdapter e o DataSet fora do Sub, os seja:

Private da As OleDbDataAdapter

Private ds As DataSet

Depois colocas isto para gravar (num botão):

Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(Me.da)

cb.QuotePrefix = "["

cb.QuoteSuffix = "]"

da.Update(ds)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, primeiro sem adicionares a coluna faz o seguinte.

Defines o DataAdapter e o DataSet fora do Sub, os seja:

Private da As OleDbDataAdapter

Private ds As DataSet

Depois colocas isto para gravar (num botão):

Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(Me.da)

cb.QuotePrefix = "["

cb.QuoteSuffix = "]"

da.Update(ds)

Dá erro no DataSet (diz que não está definido...)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado jpaulino. Não te quero empatar também. Eu depois digo qq coisa.

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