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

Luis Marques

[Resolvido] Alterar dados no SQL

36 mensagens neste tópico

boas,

eu fiz um codigo para alterar dados apartir de um fomulario, mas não está a alterar.

Eu basieime num codigo que tinha feito anteriormente para guardar.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Try

            Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\imovel.mdb;"

            Dim lm As String = "UPDATE `imovel`(`natureza`, `tipologia`, `negocio`, `concelho`, `preco`, `detalhes`, `imagem`, `imagem2`, `imagem3`, `imagem4`, `imagem5`, `nomeproprietario`, `telefone`, `morada`) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

            ' Inicia uma ligação à bse de dados
            Using connection As New OleDbConnection(connString)

                ' Define o comando e os parâmetros
                Dim command As New OleDbCommand(lm, connection)

                'pergunta se quer guardar ou nao
                Dim msg = MsgBox("Pretende guardar o registo? ", MsgBoxStyle.YesNoCancel)
                If msg = MsgBoxResult.Yes Then

                    command.Parameters.Add("natureza", OleDbType.VarChar).Value = NaturezaComboBox.Text
                    command.Parameters.Add("tipologia", OleDbType.VarChar).Value = TipologiaComboBox.Text
                    command.Parameters.Add("negocio", OleDbType.VarChar).Value = NegocioComboBox.Text
                    command.Parameters.Add("concelho", OleDbType.VarChar).Value = ConcelhoComboBox.Text

                    If PrecoTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("preco", OleDbType.Integer).Value = PrecoTextBox.Text
                    Else
                        command.Parameters.Add("preco", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("detalhes", OleDbType.VarChar).Value = DetalhesTextBox.Text
                    command.Parameters.Add("imagem", OleDbType.VarChar).Value = ImagemTextBox.Text
                    command.Parameters.Add("imagem2", OleDbType.VarChar).Value = Imagem2TextBox.Text
                    command.Parameters.Add("imagem3", OleDbType.VarChar).Value = Imagem3TextBox.Text
                    command.Parameters.Add("imagem4", OleDbType.VarChar).Value = Imagem4TextBox.Text
                    command.Parameters.Add("imagem5", OleDbType.VarChar).Value = Imagem5TextBox.Text
                    command.Parameters.Add("nomeproprietario", OleDbType.VarChar).Value = NomeproprietarioTextBox.Text

                    If TelefoneTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = TelefoneTextBox.Text
                    Else
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("morada", OleDbType.VarChar).Value = MoradaTextBox.Text


                ElseIf msg = MsgBoxResult.No Then
                End If

                If msg = MsgBoxResult.Cancel Then
                    Form1.Show()
                    Me.Close()

                End If

                ' Abre a ligação e insere o registo
                connection.Open()
                Dim x As Integer = command.ExecuteNonQuery()
                If x <> 1 Then
                    Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")

                End If

            End Using

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

        End Try
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

O update statement não é assim, é desta forma:

"UPDATE tabela SET campo1=?, campo2=? WHERE ID=?"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim está correcto?

Dim lm As String = "UPDATE imovel SET natureza=?, tipologia=?,concelho=?,preco=?,detalhes=?, imagem=?,imagem2=?,imagem3=?,imagem4=?,imagem5=? WHERE ID=?"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim está correcto?

Dim lm As String = "UPDATE imovel SET natureza=?, tipologia=?,concelho=?,preco=?,detalhes=?, imagem=?,imagem2=?,imagem3=?,imagem4=?,imagem5=? WHERE ID=?"

Sim, parece que sim. No entanto não te esqueças que os parametros têm de ser definidos por essa ordem.

Tenta lá e depois diz qualquer coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não está a fazer nada a mesma :S

E qual é o erro ?

Volta lá a por isto para veres a mensagem de erro:

Catch ex As Exception           

      MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)       

End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

diz que nao foi fornecido nenhum valor para um ou mais parametros necessarios

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

diz que nao foi fornecido nenhum valor para um ou mais parametros necessarios

Isso quer dizer que definiste menos parametros dos que indicaste no comando T-SQL.

Confirma todos se estão correctos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguma coisa me está a escapar.

Tenho o codigo assim:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Try

            Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\imovel.mdb;"

            Dim lm As String = "UPDATE imovel SET natureza=?, tipologia=?, negocio=?, concelho=?, preco=?, detalhes=?, imagem=?, imagem2=?, imagem3=?, imagem4=?, imagem5=?, nomeproprietario=?, telefone=?, morada=? WHERE ID=?"
            ' Inicia uma ligação à bse de dados
            Using connection As New OleDbConnection(connString)

                ' Define o comando e os parâmetros
                Dim command As New OleDbCommand(lm, connection)

                'pergunta se quer guardar ou nao
                Dim msg = MsgBox("Pretende guardar o registo? ", MsgBoxStyle.YesNoCancel)
                If msg = MsgBoxResult.Yes Then

                    command.Parameters.Add("natureza", OleDbType.VarChar).Value = NaturezaComboBox.Text
                    command.Parameters.Add("tipologia", OleDbType.VarChar).Value = TipologiaComboBox.Text
                    command.Parameters.Add("negocio", OleDbType.VarChar).Value = NegocioComboBox.Text
                    command.Parameters.Add("concelho", OleDbType.VarChar).Value = ConcelhoComboBox.Text

                    If PrecoTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("preco", OleDbType.Integer).Value = PrecoTextBox.Text
                    Else
                        command.Parameters.Add("preco", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("detalhes", OleDbType.VarChar).Value = DetalhesTextBox.Text
                    command.Parameters.Add("imagem", OleDbType.VarChar).Value = ImagemTextBox.Text
                    command.Parameters.Add("imagem2", OleDbType.VarChar).Value = Imagem2TextBox.Text
                    command.Parameters.Add("imagem3", OleDbType.VarChar).Value = Imagem3TextBox.Text
                    command.Parameters.Add("imagem4", OleDbType.VarChar).Value = Imagem4TextBox.Text
                    command.Parameters.Add("imagem5", OleDbType.VarChar).Value = Imagem5TextBox.Text
                    command.Parameters.Add("nomeproprietario", OleDbType.VarChar).Value = NomeproprietarioTextBox.Text

                    If TelefoneTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = TelefoneTextBox.Text
                    Else
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("morada", OleDbType.VarChar).Value = MoradaTextBox.Text


                ElseIf msg = MsgBoxResult.No Then
                End If

                If msg = MsgBoxResult.Cancel Then
                    Form1.Show()
                    Me.Close()

                End If

                ' Abre a ligação e insere o registo
                connection.Open()
                Dim x As Integer = command.ExecuteNonQuery()
                If x <> 1 Then
                    Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")

                End If

            End Using

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

        End Try
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguma coisa me está a escapar.

Sim ... o ID. Ou queres actualizar em todos os registos ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu queria actualizar em todos os os dados de cada registo

Exactamente ... mas para isso tens de saber qual é o registo. Como está a fazer, e se não incluires o "WHERE ID = x", actualizas em TODOS os registos.

Deves ter uma chave primária para cada registo (um ID por exemplo), que serve para dizer que vais actualizar o registo X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu tenho é o id_imovel,mas nao o tinha amostrar.

Agora ja o meti a amostrar, mas tipo a esta linha nao pode ficar assim pois nao?

Dim lm As String = "UPDATE imovel SET id_imovel=?, natureza=?, tipologia=?, negocio=?, concelho=?, preco=?, detalhes=?, imagem=?, imagem2=?, imagem3=?, imagem4=?, imagem5=?, nomeproprietario=?, telefone=?, morada=? WHERE id=?"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tens o id_imovel, alteras no fim para:

"WHERE id_imovel = ?"

e defines o id_imovel como parametro, indicando o imovel que pretendes alterar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
If Id_imovelTextBox.Text.Trim <> String.Empty Then
command.Parameters.Add("Id_imovel", OleDbType.Integer).Value = Id_imovelTextBox.Text
Else
command.Parameters.Add("Id_imovel", OleDbType.Integer).Value = DBNull.Value
End If[/code

vela se o parametro esta bem definido?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOL, tu é que tens de ver!

à partida sim, se alteraste o SQL statement, mas não há nada como testar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu pergunteite isso porque testei e fez o mesmo, por isso e que perguntei se estava bem, nao fosse o problemas estar naquilo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Try

            Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\imovel.mdb;"

            Dim lm As String = "UPDATE imovel SET id_imovel=?, natureza=?, tipologia=?, negocio=?, concelho=?, preco=?, detalhes=?, imagem=?, imagem2=?, imagem3=?, imagem4=?, imagem5=?, nomeproprietario=?, telefone=?, morada=? WHERE id_imovel=?"
            ' Inicia uma ligação à bse de dados
            Using connection As New OleDbConnection(connString)

                ' Define o comando e os parâmetros
                Dim command As New OleDbCommand(lm, connection)

                'pergunta se quer guardar ou nao
                Dim msg = MsgBox("Pretende guardar o registo? ", MsgBoxStyle.YesNoCancel)
                If msg = MsgBoxResult.Yes Then

                    If Id_imovelTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("Id_imovel", OleDbType.Integer).Value = Id_imovelTextBox.Text
                    Else
                        command.Parameters.Add("Id_imovel", OleDbType.Integer).Value = DBNull.Value
                    End If


                    command.Parameters.Add("natureza", OleDbType.VarChar).Value = NaturezaComboBox.Text
                    command.Parameters.Add("tipologia", OleDbType.VarChar).Value = TipologiaComboBox.Text
                    command.Parameters.Add("negocio", OleDbType.VarChar).Value = NegocioComboBox.Text
                    command.Parameters.Add("concelho", OleDbType.VarChar).Value = ConcelhoComboBox.Text

                    If PrecoTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("preco", OleDbType.Integer).Value = PrecoTextBox.Text
                    Else
                        command.Parameters.Add("preco", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("detalhes", OleDbType.VarChar).Value = DetalhesTextBox.Text
                    command.Parameters.Add("imagem", OleDbType.VarChar).Value = ImagemTextBox.Text
                    command.Parameters.Add("imagem2", OleDbType.VarChar).Value = Imagem2TextBox.Text
                    command.Parameters.Add("imagem3", OleDbType.VarChar).Value = Imagem3TextBox.Text
                    command.Parameters.Add("imagem4", OleDbType.VarChar).Value = Imagem4TextBox.Text
                    command.Parameters.Add("imagem5", OleDbType.VarChar).Value = Imagem5TextBox.Text
                    command.Parameters.Add("nomeproprietario", OleDbType.VarChar).Value = NomeproprietarioTextBox.Text

                    If TelefoneTextBox.Text.Trim <> String.Empty Then
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = TelefoneTextBox.Text
                    Else
                        command.Parameters.Add("telefone", OleDbType.Integer).Value = DBNull.Value
                    End If

                    command.Parameters.Add("morada", OleDbType.VarChar).Value = MoradaTextBox.Text



                   


                ElseIf msg = MsgBoxResult.No Then
                End If

                If msg = MsgBoxResult.Cancel Then
                    Form1.Show()
                    Me.Close()

                End If

                ' Abre a ligação e insere o registo
                connection.Open()
                Dim x As Integer = command.ExecuteNonQuery()
                If x <> 1 Then
                    Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")

                End If

            End Using

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

        End Try
    End Sub

   
End Class

de tanto andar a mexer nisto, ja ta tudo baralhado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu já te disse que os parâmetros têm de ser definidos pro ordem.

Se o Id_imovel está em último na lista, têm de aparecer em último nos parâmetros.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, tive algum tempo sem mexer nisto.

Ainda está a dar erro, ou seja está a modificarme os registos todos.

Tenho o código assim, com algum com algumas modificações desde a ultima vez, que o meu stor andou a ver isso.

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Try

            Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\imovel.mdb;"

            Dim d = TextBox1.Text

            Dim lm As String = "UPDATE imovel SET  natureza=?, tipologia=?, negocio=?, concelho=?, preco=?, detalhes=?, imagem=?, imagem2=?, imagem3=?, imagem4=?, imagem5=?, nomeproprietario=?, telefone=?, morada=?" + "where id_imovel=" + d

            ' Inicia uma ligação à bse de dados

            Using connection As New OleDbConnection(connString)

                ' Define o comando e os parâmetros

                Dim command As New OleDbCommand(lm, connection)

                'pergunta se quer guardar ou nao

                Dim msg = MsgBox("Pretende guardar o registo? ", MsgBoxStyle.YesNoCancel)

                If msg = MsgBoxResult.Yes Then

                    command.Parameters.Add("natureza", OleDbType.VarChar).Value = NaturezaComboBox.Text

                    command.Parameters.Add("tipologia", OleDbType.VarChar).Value = TipologiaComboBox.Text

                    command.Parameters.Add("negocio", OleDbType.VarChar).Value = NegocioComboBox.Text

                    command.Parameters.Add("concelho", OleDbType.VarChar).Value = ConcelhoComboBox.Text

                    If PrecoTextBox.Text.Trim <> String.Empty Then

                        command.Parameters.Add("preco", OleDbType.Integer).Value = PrecoTextBox.Text

                    Else

                        command.Parameters.Add("preco", OleDbType.Integer).Value = DBNull.Value

                    End If

                    command.Parameters.Add("detalhes", OleDbType.VarChar).Value = DetalhesTextBox.Text

                    command.Parameters.Add("imagem", OleDbType.VarChar).Value = ImagemTextBox.Text

                    command.Parameters.Add("imagem2", OleDbType.VarChar).Value = Imagem2TextBox.Text

                    command.Parameters.Add("imagem3", OleDbType.VarChar).Value = Imagem3TextBox.Text

                    command.Parameters.Add("imagem4", OleDbType.VarChar).Value = Imagem4TextBox.Text

                    command.Parameters.Add("imagem5", OleDbType.VarChar).Value = Imagem5TextBox.Text

                    command.Parameters.Add("nomeproprietario", OleDbType.VarChar).Value = NomeproprietarioTextBox.Text

                    If TelefoneTextBox.Text.Trim <> String.Empty Then

                        command.Parameters.Add("telefone", OleDbType.Integer).Value = TelefoneTextBox.Text

                    Else

                        command.Parameters.Add("telefone", OleDbType.Integer).Value = DBNull.Value

                    End If

                    command.Parameters.Add("morada", OleDbType.VarChar).Value = MoradaTextBox.Text

                    If TextBox1.Text.Trim <> String.Empty Then

                        command.Parameters.Add("id_imovel", OleDbType.Integer).Value = TextBox1.Text

                    Else

                        command.Parameters.Add("id_imovel", OleDbType.Integer).Value = DBNull.Value

                    End If

                ElseIf msg = MsgBoxResult.No Then

                End If

                If msg = MsgBoxResult.Cancel Then

                    Form1.Show()

                    Me.Close()

                End If

                ' Abre a ligação e insere o registo

                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()

                If x <> 1 Then

                    Throw New ArgumentException("Não foi possível inserir o registo na base de dados!")

                End If

            End Using

        Catch ex As Exception

            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas, tive algum tempo sem mexer nisto.

Ainda está a dar erro, ou seja está a modificarme os registos todos.

Tenho o código assim, com algum com algumas modificações desde a ultima vez, que o meu stor andou a ver isso.

E o erro é ? E onde ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro é estar a actualizar os registos todos, e eu só quero que altere o registo que eu seleccionei.

Eu penso que o erro esteje aqui:

Dim lm As String = "UPDATE imovel SET  natureza=?, tipologia=?, negocio=?, concelho=?, preco=?, detalhes=?, imagem=?, imagem2=?, imagem3=?, imagem4=?, imagem5=?, nomeproprietario=?, telefone=?, morada=?" + "where id_imovel=" + d

mas não tenho a certeza, ja alterei tanta vez o código, mas ainda nao consegui.

Precisava de uma ajudinha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro é estar a actualizar os registos todos, e eu só quero que altere o registo que eu seleccionei.

Eu penso que o erro esteje aqui:

mas não tenho a certeza, ja alterei tanta vez o código, mas ainda nao consegui.

Precisava de uma ajudinha.

Não tens a certeza!!!

Quando carregas no botão que mensagem te dá ? Ou onde para o programa ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dame este erro quando vou para guardar as alteraçoes: "Não foi possivel inserir o registo na base de dados"

Apesar de dar este erro. altera os dados, só que é dos registos todos, não só de 1 como eu queria

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