Jump to content
PauloFMarques

Update de dados

Recommended Posts

PauloFMarques

Boa tarde.

Estou no 12º ano de um curso de informática, e para o estágio pediram-me que fizesse uma aplicação com uma base de dados que controle os equipamentos informáticos.

Agora o erro surge quando vou alterar os dados:

eu tenho um form com um tabcontrol, e em cada tabpage tem os dados que se pretende alterar, e para seleccionar os diferentes equipamentos tenho uma combobox que vai buscar o id de cada equipamento e que apresenta os respectivos dados. até ai tudo bem, por defeito a combo box aparece com o id 1, e os dados referentes a esse id, quando escolho o id 2, os dados do equipamento 2 aparecem, mas quando volto a carregar na combobox, já não existe id 1, em vez disso aparece dois id's 2. ou seja ele mantém os dados referentes ao id 1, mas o transforma-o em id 2. ficando com 2 id's 2 com diferentes dados.  quando carrego no botão que efectua alteração ele da erro de chave primaria (como é suposto, uma vez que tem duas vezes o mesmo id), mas altera os dados. e só fechando a aplicação e voltando a abrir é que volta ao normal.

Se alguém me conseguir ajudar a corrigir agradeço.

Espero ter sido claro.

Obrigado desde já,

Paulo Marques


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Coloca aqui parte do código para conseguirmos ver o que estás a fazer de mal.

Share this post


Link to post
Share on other sites
PauloFMarques

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'declaracao da variavel que vai servir de "porta" para a base de dados
        Dim db As New SqlConnection(str)
        'abertura da base de dados
        db.Open()
        'declaracao da variavel que ira conter os dados a inserir
        Dim varsql As String = "update computadores set marca='" & MarcaTextBox.Text & "',caracteristicas='" & CaracteristicasTextBox.Text & "',nome='" & NomeTextBox.Text & "',n_serie='" & N_serieTextBox.Text & "',n_func='" & N_funcComboBox.Text & "',uso='" & UsoCheckBox.CheckState & "',data_compra='" & Data_compraTextBox.Text & "',id_so='" & Id_soComboBox.Text & "',id_office='" & Id_officeComboBox.Text & "',n_factura='" & N_facturaTextBox.Text & "',garantia='" & GarantiaTextBox.Text & "',fornecedor='" & FornecedorTextBox.Text & "',valor_s_iva='" & Valor_s_ivaTextBox.Text & "',valor_seguro='" & Valor_seguroTextBox.Text & "',carepaq_inicio='" & Carepaq_inicioTextBox.Text & "',carepaq_fim='" & Carepaq_fimTextBox.Text & "',observacoes='" & ObservacoesTextBox.Text & "' where id_computador='" & Id_computadorComboBox.Text & "'"
        Try
            'declaracao do comando de sql que ira alterar os dados
            Dim cmd As New SqlCommand(varsql, db)
            'execução do comando declarado anteriormente
            cmd.ExecuteScalar()
            'actualizacao da base de dados, ja com os dados alterados
            Me.TableAdapterManager.UpdateAll(Me.Db_gelpeixeDataSet)
            'msgbox de confirmacao de alteracao
            MsgBox("Registo alterar com sucesso", MsgBoxStyle.Information)
            'catch para o caso de haver erros
        Catch ex As SqlException
            'msgbox de erro sobre comunicacao com a base de dados
            MsgBox("Erro ao alterar da base de dados: " + ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
        'encerramento da base de dados
        db.Close()
    End Sub

Ai está, no código aparentemente está tudo bem, pois ele funciona, o problema está apenas nas combobox's.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
PauloFMarques

Neste caso Id_computadorcombobox.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
MSOlhao

Tenta lá mudar o estilo da ComboBox para DropDownList

Id_computadorComboBox.DropDownStyle = ComboBoxStyle.DropDownList

Pelo que estás a descrever essa situação acontece mesmo sem carregares no botão para actualizar os dados.

Coloca lá aqui o código que estás a usar para preencher a ComboBox.

Outra coisa que podes tentar é trocar isto

'execução do comando declarado anteriormente
cmd.ExecuteScalar()

Por isto

'execução do comando declarado anteriormente
cmd.ExecuteNonQuery()

Share this post


Link to post
Share on other sites
PauloFMarques

Ai está, a combobox é preenchida automaticamente, não há codigo pro tras, ela vai buscar os valores ao bindingsource.

E sim, a situação acontece antes de carregar no botao, tanto que quando eu carrego no botao, ele da de chaveprimaria, mas altera os dados, e ficam bem, ou seja, se eu selecionar os dados do id 2, e alterar, por exemplo a data de compra. ao carregar no botao alterar, ele da erro a dizer que não posso ter duas chaves primarias iguais, mas altera o registo 2.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
PauloFMarques

Mudei, e continua igual..


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
MSOlhao

Eu recomendava fazeres todo o acesso à base de dados manualmente e deixares o assistente de lado.

Assim de repente parece-me que tens alguma coisa mal no Binding dos controlos, quanto a esse erro da chave certifica-te que não tens campos definidos como Unique.

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Abre o designer do DataSet e altera a Propriedade ReadOnly de todas as Chaves Primárias para True.

Share this post


Link to post
Share on other sites
PauloFMarques

Bom dia, só hoje é que voltei ao projecto uma vez que ficou na empresa.

Já alterei as propriedades e funciona..

Muito obrigado pela ajuda.


--Sometimes, we do what we want, but we don't want what we have done--

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.