Joao____ 0 Posted June 26, 2019 Report Share Posted June 26, 2019 (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 July 21, 2019 by thoga31 GeSHi Link to post Share on other sites
Cerzedelo 41 Posted June 27, 2019 Report Share Posted June 27, 2019 (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 June 27, 2019 by Cerzedelo Link to post Share on other sites
Joao____ 0 Posted June 27, 2019 Author Report Share Posted June 27, 2019 (edited) o codigo esta correto, mas ele continua a nao fazer o update e da o erro pois os dados nao foram alterados Edited June 27, 2019 by Joao____ Link to post Share on other sites
Joao____ 0 Posted June 27, 2019 Author Report Share Posted June 27, 2019 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 Link to post Share on other sites
Chamuanza 3 Posted July 3, 2019 Report Share Posted July 3, 2019 Tenta colocar na mesma ordem os command como estão na query Link to post Share on other sites
Cerzedelo 41 Posted July 3, 2019 Report Share Posted July 3, 2019 (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 July 3, 2019 by Cerzedelo Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now