Jump to content

Recommended Posts

Posted (edited)

boas, estou a fazer um programa no qual necessito alterar os dados que seleciono atravez de um dategridview mas ao fazer o update os dados sao todos alterados e nao so os selecionados. Se alguem me conseguisse ajudar ficaria grato!

 

Private Sub editar _Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim connection As New OleDbConnection
        Dim query As String
        Dim command As New OleDbCommand

        connection = New OleDbConnection(My.Settings.fclinicConnectionString)

        query = "UPDATE paciente SET [Nome Paciente]=@Nome_PacienteTextBox,[Nº Utente]=@Nº_UtenteTextBox,[Genero]=@GeneroComboBox,[Data Nascimento]=@Data_NascimentoDateTimePicker,[Morada]=@morada,[Cidade]=@cidade,[País]=@pais,[Codigo Postal]=@codpostal,[Telefone]=@telefone,=@email,[Tipo de Sangue]=@sangue,[Alergias]=@alergias"

        command = New OleDbCommand(query, connection)


        command.Parameters.Add("@Nome_PacienteTextBox", OleDbType.VarChar).Value = Nome_PacienteTextBox.Text
        command.Parameters.Add("@Nº_UtenteTextBox", OleDbType.VarChar).Value = Nº_UtenteTextBox.Text
        command.Parameters.Add("@GeneroComboBox", OleDbType.VarChar).Value = GeneroComboBox.Text
        command.Parameters.Add("@Data_NascimentoDateTimePicker", OleDbType.VarChar).Value = Data_NascimentoDateTimePicker.Text
        command.Parameters.Add("@morada", OleDbType.VarChar).Value = MoradaTextBox.Text
        command.Parameters.Add("@cidade", OleDbType.VarChar).Value = CidadeTextBox.Text
        command.Parameters.Add("@pais", OleDbType.VarChar).Value = PaísComboBox.Text
        command.Parameters.Add("@codpostal", OleDbType.VarChar).Value = Codigo_PostalTextBox.Text
        command.Parameters.Add("@telefone", OleDbType.VarChar).Value = TelefoneTextBox.Text
        command.Parameters.Add("@email", OleDbType.VarChar).Value = EmailTextBox.Text
        command.Parameters.Add("@sangue", OleDbType.VarChar).Value = Tipo_de_SangueComboBox.Text
        command.Parameters.Add("@alergias", OleDbType.VarChar).Value = AlergiasTextBox.Text


        Dim Olido As Integer
        connection.Open()

        Olido = command.ExecuteNonQuery()

        If (Olido < 1) Then

            MsgBox("Erro ao actualizar", MessageBoxButtons.OK, MessageBoxIcon.Error)

        Else

            MessageBox.Show("Os dados foram alterados com sucesso!")


        End If
        connection.Close()
        connection.Dispose()

    End Sub 
Edited by thoga31
GeSHi
Posted (edited)

O seu problema é realizar correctamente o comando UPDATE. Isto porque, não está a impor uma condição WHERE para o procedimento, o que faz com que a actualização seja de todas as linhas da tabela e não uma especifica.

13 horas atrás, Joao____ disse:

query = "UPDATE paciente SET [Nome Paciente]=@Nome_PacienteTextBox,[Nº Utente]=@Nº_UtenteTextBox,[Genero]=@GeneroComboBox,[Data Nascimento]=@Data_NascimentoDateTimePicker,[Morada]=@morada,[Cidade]=@cidade,[País]=@pais,[Codigo Postal]=@codpostal,[Telefone]=@telefone,=@email,[Tipo de Sangue]=@sangue,[Alergias]=@alergias"

Altere para algo do género

query = "UPDATE paciente SET [Nome Paciente]=@Nome_PacienteTextBox,[Genero]=@GeneroComboBox,[Data Nascimento]=@Data_NascimentoDateTimePicker,[Morada]=@morada,[Cidade]=@cidade,[País]=@pais,[Codigo Postal]=@codpostal,[Telefone]=@telefone,=@email,[Tipo de Sangue]=@sangue,[Alergias]=@alergias WHERE [Nº Utente]=@Nº_UtenteTexBox"

Ver: https://www.w3schools.com/sql/sql_update.asp

Edited by Cerzedelo
Posted
Dim connection As New OleDbConnection
        Dim query As String
        Dim command As New OleDbCommand

        connection = New OleDbConnection(My.Settings.fclinicConnectionString)

        query = " UPDATE paciente SET [Nome Paciente]= @Nome_PacienteTextBox,[Genero]= @GeneroComboBox,[Data Nascimento]= @Data_NascimentoDateTimePicker,[Morada]= @morada,[Cidade]= @cidade,[País]= @pais,[Codigo Postal]= @codpostal,[Telefone]= @telefone,Email =@email,[Tipo de Sangue]=@sangue,[Alergias]=@alergias WHERE [Nº Utente]=@Nº_UtenteTexBox"

        command = New OleDbCommand(query, connection)

        command.Parameters.Add("@Nome_PacienteTextBox", OleDbType.VarChar).Value = Nome_PacienteTextBox.Text
        command.Parameters.Add("@Nº_UtenteTextBox", OleDbType.VarChar).Value = Nº_UtenteTextBox.Text
        command.Parameters.Add("@GeneroComboBox", OleDbType.VarChar).Value = GeneroComboBox.Text
        command.Parameters.Add("@Data_NascimentoDateTimePicker", OleDbType.VarChar).Value = Data_NascimentoDateTimePicker.Text
        command.Parameters.Add("@morada", OleDbType.VarChar).Value = MoradaTextBox.Text
        command.Parameters.Add("@cidade", OleDbType.VarChar).Value = CidadeTextBox.Text
        command.Parameters.Add("@pais", OleDbType.VarChar).Value = PaísComboBox.Text
        command.Parameters.Add("@codpostal", OleDbType.VarChar).Value = Codigo_PostalTextBox.Text
        command.Parameters.Add("@telefone", OleDbType.VarChar).Value = TelefoneTextBox.Text
        command.Parameters.Add("@email", OleDbType.VarChar).Value = EmailTextBox.Text
        command.Parameters.Add("@sangue", OleDbType.VarChar).Value = Tipo_de_SangueComboBox.Text
        command.Parameters.Add("@alergias", OleDbType.VarChar).Value = AlergiasTextBox.Text


        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()

        If x < 1 Then
            MessageBox.Show("Erro ao editar", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Else
            MessageBox.Show("editado com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

        connection.Close()
        command = Nothing

 

Neste momento o codigo esta assim, mas assim que faço o alterar ele nao altera e da um erro

Posted (edited)

Qual é o erro que dá? 

Creio que o Access cria visualmente uma query e mostra o código. Tente fazer o update no Access e compare o código SQL com o da aplicação em VB.

Experimente, na instrução SQL do update, inserir valores em vez das variáveis, e se verificar que faz o update o problema é da atribuição das variáveis e não do SQL.

Recorda-me que com o VB .net em versões anteriores, em desenvolvimento, aparentemente executava o código mas quando se analisava a base de dados as alterações não ocorriam, isto porque, o VB criava uma cópia da base de dados para correr em desenvolvimento, o que fazia, que na base de dados original, não ocorram quaisquer alterações.

Desconheço se as versões mais recentes têm esse comportamento, mas quando se instalava a aplicação em modo de produção, ai já se reflectiam na base de dados as alterações efectuadas.

Edited by Cerzedelo
  • 4 years later...

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.