Jump to content
Sign in to follow this  
Chamuanza

Alterar Valor em Datagridview e gravar

Recommended Posts

Chamuanza

Olá Pessoal Bem Aja

Estou com dificuldade em resolver esta questão

Tenho um select feito para uma datagridview (criada via wizard) e quero alterar o valor de uma celula, quando gravo da-me este erro  "ExecuteReader: CommandText property has not been initialized"

Nas propriedades da datagridview está Enable-Adding; Enable-Editing; Enable-Deleting

Não era suposto aceitar a alteração da celula?

O que me falta?

Tambem já coloquei este código num botão e não deu resultado

    Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click

        ' Texto de ligação à base de dados
        Dim myConnectionString As String = _
        "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\ProjectoTotoMilhoes\TotoMilhões\GuardarResultados.mdf';" & _
          ";Integrated Security=True;User Instance=True"


        ' Comando que irá actualizar os dados na tabela "MyTable" em que os campos 
        ' "username" e "date" são passados através de parâmetros (o ID é um exemplo de um identificador único) 
        Dim SQL As String = "UPDATE NumJogadosEuromilhoes SET [N1] = @N1,[N2] = @N2,[N3] = @N3,[N4] = @N4,[N5] = @N5,[E1] = @E1,[E2] = @E2 "
        'WHERE [id] = @id"

        ' Cria uma nova ligação à base de dados 
        Dim connection As New SqlConnection(myConnectionString)

        ' Criação do comando indicando a instrução e a ligação 
        Dim command As New SqlCommand(SQL, connection)

        ' Indicação dos parâmetros que serão actualizados 
        'command.Parameters.Add("@id", SqlDbType.Int).Value = "@id"
        command.Parameters.Add("@N1", SqlDbType.VarChar).Value = "@N1"
        command.Parameters.Add("@N2", SqlDbType.VarChar).Value = "@N2"
        command.Parameters.Add("@N3", SqlDbType.VarChar).Value = "@N3"
        command.Parameters.Add("@N4", SqlDbType.VarChar).Value = "@N4"
        command.Parameters.Add("@N5", SqlDbType.VarChar).Value = "@N5"
        command.Parameters.Add("@E1", SqlDbType.VarChar).Value = "@E1"
        command.Parameters.Add("@E2", SqlDbType.VarChar).Value = "@E2"




        ' Abre a ligação, executa o comando e guarda em "x" o número de registos actualizados 
        connection.Open()

        Dim x As Integer = command.ExecuteNonQuery()
        If x < 1 Then
            MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
        End If

        ' Fecha a ligação e limpa as variáveis 
        connection.Close()
        connection = Nothing
        command = Nothing




    End Sub

Share this post


Link to post
Share on other sites
bioshock

Tens vários erros nesse código, o principal está na query, isto já para não falar nos parâmetros. Aprende neste artigo como proceder para operações de gestão.

Share this post


Link to post
Share on other sites
Chamuanza

Oi bioshock

Pelo que entendo o erro mais evidente será em colocar o valor = "@N1" no command.parameters, correcto?

command.Parameters.Add("@N1", SqlDbType.VarChar).Value = "@N1"

mas se eu altero o valor da celula na Datagrid o que é que coloco como valor=? no

command.Parameters.Add("@N1", SqlDbType.VarChar).Value =??????????

Share this post


Link to post
Share on other sites
bioshock

Pensei já te ter respondido, ou alguém eliminou a minha mensagem ou então fechei a página sem intenção.

mas se eu altero o valor da celula na Datagrid o que é que coloco como valor=? no

command.Parameters.Add("@N1", SqlDbType.VarChar).Value =??????????

A resposta está na tua pergunta.

(...) o valor da celula (...)

Share this post


Link to post
Share on other sites
Chamuanza

Alterei o codigo no que achava que estava mal  :wallbash: mas não acerto

O que e que esta mal neste novo código 

 Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click

        For Linhas As Integer = 0 To NumJogadosEuromilhoesDataGridView.RowCount - 1

            For Colunas As Integer = 0 To NumJogadosEuromilhoesDataGridView.ColumnCount - 1

                ' Texto de ligação à base de dados
                Dim myConnectionString As String = _
                "Data Source=.\SQLEXPRESS;AttachDbFilename='D:\ProjectoTotoMilhoes\TotoMilhões\GuardarResultados.mdf';" & _
                  ";Integrated Security=True;User Instance=True"


                ' Comando que irá actualizar os dados na tabela "MyTable" em que os campos 
                ' "username" e "date" são passados através de parâmetros (o ID é um exemplo de um identificador único) 
                Dim SQL As String = "UPDATE NumJogadosEuromilhoes SET [Data] = @Data, [DiaSemana] = @DiaSemana, [Aposta] = @Aposta,[N1] = @N1,[N2] = @N2,[N3] = @N3,[N4] = @N4,[N5] = @N5,[E1] = @E1,[E2] = @E2 WHERE [id] = @id"

               

                ' Cria uma nova ligação à base de dados 
                Dim connection As New SqlConnection(myConnectionString)

                ' Criação do comando indicando a instrução e a ligação 
                Dim command As New SqlCommand(SQL, connection)

                ' Indicação dos parâmetros que serão actualizados 
                  command.Parameters.Add("@Data", SqlDbType.Date).Value = NumJogadosEuromilhoesDataGridView.Item("Data", Linhas).Value
                command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("DiaSemana", Linhas).Value
                command.Parameters.Add("@Aposta", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("Aposta", Linhas).Value
                command.Parameters.Add("@N1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N1", Linhas).Value
                command.Parameters.Add("@N2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N2", Linhas).Value
                command.Parameters.Add("@N3", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N3", Linhas).Value
                command.Parameters.Add("@N4", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N4", Linhas).Value
                command.Parameters.Add("@N5", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N5", Linhas).Value
                command.Parameters.Add("@E1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("E1", Linhas).Value
                command.Parameters.Add("@E2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("E2", Linhas).Value


                ' Abre a ligação, executa o comando e guarda em "x" o número de registos actualizados 
                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()
                If x < 1 Then
                    MessageBox.Show("A operação efectuada não retomou qualquer resultado.")
                End If

                ' Fecha a ligação e limpa as variáveis 
                connection.Close()
                connection = Nothing
                command = Nothing
            Next Colunas
        Next Linhas



    End Sub

da-me este erro "Column named Data cannot be found. Parameter name: columnName"

Share this post


Link to post
Share on other sites
bioshock

A tua query:

           

    Dim SQL As String = "UPDATE NumJogadosEuromilhoes SET " & _ 
                "[Data] = @Data, [DiaSemana] = @DiaSemana, [Aposta] = @Aposta," & _ 
                "[N1] = @N1,[N2] = @N2,[N3] = @N3,[N4] = @N4,[N5] = @N5,[E1] = @E1,[E2] = @E2" 
                & _ "WHERE [id] = @id"

Onde raio, nos parâmetros, especificas qual é o ID que queres actualizar?

command.Parameters.Add("@Data", SqlDbType.Date).Value = NumJogadosEuromilhoesDataGridView.Item("Data", Linhas).Value
                command.Parameters.Add("@DiaSemana", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("DiaSemana", Linhas).Value
                command.Parameters.Add("@Aposta", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("Aposta", Linhas).Value
                command.Parameters.Add("@N1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N1", Linhas).Value
                command.Parameters.Add("@N2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N2", Linhas).Value
                command.Parameters.Add("@N3", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N3", Linhas).Value
                command.Parameters.Add("@N4", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N4", Linhas).Value
                command.Parameters.Add("@N5", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("N5", Linhas).Value
                command.Parameters.Add("@E1", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("E1", Linhas).Value
                command.Parameters.Add("@E2", SqlDbType.VarChar).Value = NumJogadosEuromilhoesDataGridView.Item("E2", Linhas).Value

Falta-te, portanto, acrescentar:

command.Parameters.Add("@id", SqlDbType.Integer).Value = 2

Share this post


Link to post
Share on other sites
Chamuanza

Ok bioshock

No codigo que coloquei não está o parametro que indicas,mas eu já tinha tentado com

 

  'command.Parameters.Add("@Id", SqlDbType.Int).Value = NumJogadosEuromilhoesDataGridView.Item("Id", Linhas).Value

e dava o mesmo erro

Share this post


Link to post
Share on other sites
bioshock

Não é uma questão de tentares. É uma questão de obrigação.

Viste realmente o link que te pus no outro post? ...

Btw, lê o teu erro actualmente: "Column named Data cannot be found." - traduzindo: A coluna denominada por Data não foi encontrada. Isto diz-te algo? 🤔

Share this post


Link to post
Share on other sites
Chamuanza

Não sou grande espingarda em ingles, mas entendi o erro que apresenta, só não sei como resolver

Eu vi o link e entendi que teria que ir igualar o valor do campo com o valor correspondente da datagridview,uma vez que altero o que pretendo dentro da Datagrid

Agora posso e devo estar a racicionar mal. Mas sinceramente não sei como resolver

Share this post


Link to post
Share on other sites
bioshock

Repara no que eu disse:

(...) A coluna denominada por Data não foi encontrada.

Significa que não tens esse campo na base de dados..e, caso tenhas, possui outro nome.

Share this post


Link to post
Share on other sites
bioshock

O erro é bem explícito. Será que a base de dados com que estás a trabalhar (neste caso estás a ir buscar a um caminho específico a mesma) é a que tu realmente queres?

Share this post


Link to post
Share on other sites
tiagom91

Quando tu criaste o data grid adicionas-te as colunas certo?

Voltas lá e vez o nome da coluna que deve ser "Column1"

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
Sign in to follow this  

×
×
  • 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.