Jump to content
pa.oliv

Gravar dados accdb

Recommended Posts

pa.oliv

Bom dia

Estou a dar os 1ºs passos em VB e deparei-me com um problema.

Estou a tentar ler os dados de uma tabela e gravar noutra, com umas pequenas alterações.

Consigo visualizar correctamente os dados mas não os consigo gravar na 2ª tabela.

Agradecia uma pequena ajuda.

Aqui vai o código que está a dar comigo em doido.

Public Class Form1

    Private Sub TabelaBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabelaBindingNavigatorSaveItem.Click
        Me.Validate()
        Me.TabelaBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me._bd1___CópiaDataSet)

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the '_bd1___CópiaDataSet.Tabela2' table. You can move, or remove it, as needed.
        Me.Tabela2TableAdapter.Fill(Me._bd1___CópiaDataSet.Tabela2)
        'TODO: This line of code loads data into the '_bd1___CópiaDataSet.Tabela' table. You can move, or remove it, as needed.
        Me.TabelaTableAdapter.Fill(Me._bd1___CópiaDataSet.Tabela)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim conexao As New OleDb.OleDbConnection
        Dim ds As New DataSet
        Dim da As OleDb.OleDbDataAdapter
        Dim sqlstr As String

        Try
            conexao.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\bd1.accdb"
            conexao.Open()

            sqlstr = "INSERT INTO tabela2 (nome,rua,lugar,freguesia,cota,tipo,observações,familia) VALUES (nometextbox.text,ruatextbox.text,lugartextbox.text,freguesiatextbox.text,cotatextbox.text,C,observaçõestextbox.text,familiatextbox.text)"

            da = New OleDb.OleDbDataAdapter(sqlstr, conexao)

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


    End Sub

    Private Sub TabelaDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TabelaDataGridView.CellContentClick
        Dim lines As Integer
        Dim strString As String
        Dim myArray() As String
        strString = Agregado_familiarTextBox.Text
        myArray = Split(strString, vbCrLf)
        lines = myArray.Length
        TextBox5.Text = lines
    End Sub
End Class

Share this post


Link to post
Share on other sites
Caça

Tenta assim

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim conexao As New OleDb.OleDbConnection
        Dim sqlstr As String
        Dim Cm as New OleDb.OleDbCommand

        Try
            conexao.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\bd1.accdb"
            conexao.Open()

            sqlstr = "INSERT INTO tabela2 (nome,rua,lugar,freguesia,cota,tipo,observações,familia) VALUES (nometextbox.text,ruatextbox.text,lugartextbox.text,freguesiatextbox.text,cotatextbox.text,C,observaçõestextbox.text,familiatextbox.text)"

            Cm.CommandText = sqlstr
            Cm.Conection = conexao
            Cm.ExecuteNonQuery

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


    End Sub

EDIT: A tua Query não está correctamente definida


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
pa.oliv

Boas

:thumbsup: funcionou, mas agora tenho outro problema... algo se passa com a declaração "sqlstr", dá o erro que os campos não estão todos preenchidos, mas a verdade é que estão.

Existe um campo com numeração automática, mas não estou a colocar esse...

ja tentei assim

sqlstr = "INSERT INTO tabela2 (familia,tipo,nome,rua,lugar,freguesia,cota,observações) VALUES (numerotextbox.text,tb.text,nometextbox.text,ruatextbox.text,lugartextbox.text,freguesiatextbox.text,cotatextbox.text,observaçõestextbox.text)"

ou assim

sqlstr = "INSERT INTO [tabela2] ([familia],[tipo],[nome],[rua],[lugar],[freguesia],[cota],[observações]) VALUES (numerotextbox.text,tb.text,nometextbox.text,ruatextbox.text,lugartextbox.text,freguesiatextbox.text,cotatextbox.text,observaçõestextbox.text)"

... o erro é o mesmo..

o que será que estou a fazer mal??

gracias....

Share this post


Link to post
Share on other sites
Caça

O que estás a fazer mal é isto:

(numerotextbox.text,tb.text,nometextbox.text,ruatextbox.text,lugartextbox.text,freguesiatextbox.text,cotatextbox.text,observaçõestextbox.text)"

Essas textboxes todas que estás ai a inserir, para o programa é apenas uma string.

Deveria ser antes assim

(" & numerotextbox.text & ", " & tb.text & " 'Etc.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
bioshock

Usa antes parâmetros que fica mais organizado.

Btw, faltam aí umas plicas Caça.

Share this post


Link to post
Share on other sites
pa.oliv

desde já, muito obrigado pelo tempo que me estão a dispensar, mas continuo a não conseguir.

já tentei assim:

sqlstr = "INSERT INTO [tabela2] (familia, tipo, nome, rua, lugar, freguesia, cota, observações) VALUES ('" & NumeroTextBox.Text & "','" & TB.Text & "','" & NomeTextBox.Text & "','" & RuaTextBox.Text & "','" & LugarTextBox.Text & "','" & FreguesiaTextBox.Text & "','" & CotaTextBox.Text & "','" & ObservaçõesTextBox.Text & "')"

já tentei como o bioshock disse

            Cm.Parameters.Add("familia", OleDb.OleDbType.Integer).Value = NumeroTextBox.Text
            Cm.Parameters.Add("tipo", OleDb.OleDbType.Char).Value = TB.Text
            Cm.Parameters.Add("nome", OleDb.OleDbType.VarChar).Value = NomeTextBox.Text
            Cm.Parameters.Add("rua", OleDb.OleDbType.VarChar).Value = RuaTextBox.Text
            Cm.Parameters.Add("lugar", OleDb.OleDbType.VarChar).Value = LugarTextBox.Text
            Cm.Parameters.Add("freguesia", OleDb.OleDbType.VarChar).Value = FreguesiaTextBox.Text
            Cm.Parameters.Add("Cota", OleDb.OleDbType.Integer).Value = CotaTextBox.Text
            Cm.Parameters.Add("observações", OleDb.OleDbType.VarChar).Value = ObservaçõesTextBox.Text

e nada.... agora não dá nenhum erro, mas também não coloca valores na tabela

agradecia mais uma dica  :)

Share this post


Link to post
Share on other sites
pa.oliv

Palermice. :wallbash:

Eu sabia que tinha que ser uma coisa parva ... aos exemplos que li....

Conclusão:

Ao criar o projecto, foi criado uma copia da BD para outro local. Eu estava a indicar a errada

Desculpem pelo tempo que fiz perder.

Obrigado :)

Share this post


Link to post
Share on other sites
bioshock

Viva!

Duas anotações:

[*]Utiliza o tag-code adequado a cada linguagem;

[*]Os parâmetros de que te falei, são utilizados para evitar o que estavas a fazer, ou seja, tu estás a fazer:

Dim sqlstr As String = "INSERT INTO [tabela2] (familia, tipo) VALUES ('" & NumeroTextBox.Text & "','" & TB.Text & "')"

E eu sugeri que usasses parâmetros para evitar a trabalhada que em cima vai, portanto a tua nova query seria:

Dim sqlstr As String = "INSERT INTO [tabela2] (familia, tipo) VALUES (@familia, @tipo)"

Seguida dos devidos parâmetros:

Dim command As New SqlCommand(sqlstr, connection)
command.Parameters.Add("@familia", SqlDbType.Integer).Value = Textbox1.Text
command.Parameters.Add("@tipo", SqlDbType.Integer).Value = Textbox2.Text


Exemplo simples:

Dim SqlConnection As New SqlConnection("Parâmetros + Path")
Dim SqlQuery As String = "INSERT INTO [Clientes] (Nome, NIF) VALUES (@Nome, @NIF)"
Dim SqlCommand As New SqlCommand(SqlQuery, SqlConnection)

SqlConnection.Open()

SqlCommand.Parameters.Add("@Nome", SqlDbType.VarChar).Value = NomeCliente.Text
SqlCommand.Parameters.Add("@NIF", SqlDbType.VarChar).Value = NIFCliente.Text 

SqlCommand.ExecuteNonQuery()
SqlConnection.Close()

Os exemplos foram demonstrados em base de dados SQL é só adaptares ao Access. :)

Share this post


Link to post
Share on other sites
pa.oliv

Viva bioshock!!

Foi mesmo essa opção que adoptei.

Fiz tantas tentativas que foi que achei mais intuitiva...

Muito obrigado pela ajuda.

Entretanto, sem querer abusar, eu coloquei outro tópico (textbox multiline), se desses umas dicas ......

Já agora, o programa que uso é o VB.NET 2010 e a base de dados é excel.

Até breve, espero eu .... :)

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

×
×
  • Create New...

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.