Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Luis Marques

[Resolvido] Alterar dados no SQL

Mensagens Recomendadas

Luis Marques    0
Luis Marques

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

Assim está correcto?

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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=?"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques
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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jpaulino    106
jpaulino

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Luis Marques    0
Luis Marques

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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade