none
Como alterar uma linha especificando o número da linha que desejo alterar, e não ao conteúdo que uma linha da coluna "x" contem? RRS feed

  • Pergunta

  • Boa tarde,

    Queria saber se tem como alterar um valor de uma tabela especificando o número da linha que desejo alterar. Nos artigos que encontrei pela internet, todos demonstram como alterar uma linha (utilizando a string sql = "UPLOAD tabela Set ....") especificando o conteúdo que uma linha na coluna "x" contém. Por exemplo: sql = " ... WHERE x = "conteúdo". A máquina irá buscar a coluna "x" e irá buscar qual linha da coluna "x" contém a palavra "conteúdo", e qualquer alteração das colunas será realizada apenas nessa linha. Eu queria saber se tem como especificar o número da linha que desejo alterar, como quando quero um dado de uma tabela, e para conseguir esse dado especifico o número da linha e da coluna (ValorQueQueroDaTabela = tabela.Rows(1)(3).ToString() -> o valor que quero da tabela "tabela" encontra-se na linha 1 da coluna 3). Eu quero alterar um valor sem ter que me basear nos valores das linhas da coluna "x" (ou coluna "y", ou coluna "z" ou qualquer outra coluna da tabela). 

    Como faço isso?

    Estou utilizando o Visual Studio, utilizando a linguagem VB e utilizando um banco de dados SQL Server.

    quinta-feira, 25 de janeiro de 2018 14:35

Respostas

  • Voce pode fazer simplesmente:

    dataset.tabela.Rows(1)(3)="Novo Valor"
    dataset.AcceptChanges()
    
    

    fonte: https://msdn.microsoft.com/en-us/library/system.data.dataset.acceptchanges(v=vs.110).aspx

    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 25 de janeiro de 2018 14:52
    Moderador
  • No caso, voce tem que fazer:

    ds.Table("MinhaTabela").Rows(1)(3)="Novo Valor"
    ds.AcceptChanges()
    

    poste seu codigo... fica mais facil criar um exemplo funcional.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 26 de janeiro de 2018 14:18
    Moderador

Todas as Respostas

  • Voce pode fazer simplesmente:

    dataset.tabela.Rows(1)(3)="Novo Valor"
    dataset.AcceptChanges()
    
    

    fonte: https://msdn.microsoft.com/en-us/library/system.data.dataset.acceptchanges(v=vs.110).aspx

    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quinta-feira, 25 de janeiro de 2018 14:52
    Moderador
  • William, vou tentar aqui. Depois eu falo se deu certo.


    quinta-feira, 25 de janeiro de 2018 15:43
  • Boa noite William,

    É apenas isso que devo fazer? Eu não estou conseguindo fazer isso. Na verdade eu já tinha tentado antes e não tinha dado certo.

    Se eu tento digitar o meu dataset (DataSet.Tables("tabela").Rows(1)(4) = "valor") sem declarar, diz que o objeto está inacessível. Tentei declarar o meu DataSet e não consegui. Declarei ele da seguinte maneira: Dim ds As DataSet("MeuDataSet").

    Tentei utilizar um datatable: meuDataTable.Rows(1)(4) = "valor". O datatable eu obtive declarando com uma string "SELECT * From tabela", um SqlDataAdapter, um DataSet e a conexão. Não deu certo utilizar o datatable (o código executa sem erros, porém nada acontece na tabela, não ocorre nenhuma alteração da linha).

    Eu tentei utilizar o BeginEdit() e o EndEdit() que encontrei nesse link: < https://msdn.microsoft.com/pt-br/library/ch2aw0w6(v=vs.110).aspx >. Não deu certo utilizar o BeginEdit(), o código executou sem erros, mas nada aconteceu na tabela.

    Eu tentei declarar o meu datatable da seguinte maneira: Dim tabela As DataTable("MinhaTabela"). Não deu certo declarar o DataTable dessa forma.

    Hoje de manhã reparei que você mandou um link. Tentei exatamente da maneira que está no link que mandou, não deu certo. Aparece o seguinte erro: Referência de objeto não definida para uma instância de um objeto. Segue o código.

            Dim tabela As DataTable
            Dim ds As New DataSet()
    
            ds = New DataSet()
    
            tabela = ds.Tables("DadosViga")
            Dim linha As DataRow
            linha = tabela.NewRow()
            linha(0)(5) = "OLÁ"
    
            tabela.Rows.Add(linha)
    
            ds.AcceptChanges()

    Em linha = tabela.NewRow() acontece o erro. Tive que declarar o ds como New DataSet porque o sistema não aceitou que eu declarasse ele As DataSet apenas. No exemplo do link que mandou ele diz apenas a coluna que deseja inserir o valor (ele não especifica a linha como eu fiz), mas o código não chegou até essa parte.

    Vou fazer uma gambiarra aqui mesmo e criar uma coluna com o número das linhas.

    Alguém sabe como excluir a pergunta que criei?



    sexta-feira, 26 de janeiro de 2018 02:13
  • No caso, voce tem que fazer:

    ds.Table("MinhaTabela").Rows(1)(3)="Novo Valor"
    ds.AcceptChanges()
    

    poste seu codigo... fica mais facil criar um exemplo funcional.

    att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 26 de janeiro de 2018 14:18
    Moderador
  • Eu editei a minha resposta é coloquei o código que fiz como  o link  que postou.

    Eu escrevi na minha resposta que tentei inserir os dados utilizando um datatable obtido através de um data adaptar, mas hoje li no link que mandou que o AcceptChanges não aceita tabelas obtidas com um DataAdapter.

    sexta-feira, 26 de janeiro de 2018 15:42
  • MAs seu dataset nao esta ligado a nenhum banco de dados. O new row falha porque voce nao tem definiçao da tabela. Em um post anterior voce disse:

    "O datatable eu obtive declarando com uma string "SELECT * From tabela", um SqlDataAdapter, um DataSet e a conexão. Não deu certo utilizar o datatable (o código executa sem erros, porém nada acontece na tabela, não ocorre nenhuma alteração da linha)."

    Onde esta esse código?

    Att


    William John Adam Trindade
    Analyste-programmeur


    Sogi Informatique ltée
    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    sexta-feira, 26 de janeiro de 2018 16:00
    Moderador
  • Esse código está funcionando. Estou conseguindo resgatar os valores da tabela normalmente. Esse código está dividido em duas classes, uma chamada SQLHelper e outra VigasBLL. A classe SQLHelper contém uma função que realiza a conexão, e a classe VigasBLL contém a string de conexão. No form eu apenas declaro um DataTable e obtenho os valores através das funções. Como disse, estou conseguindo obter os valores normalmente, mas segue o código.

    Public Class SQLHelper
        Private conexao As SqlConnection
        Private dap As SqlDataAdapter
        Private cmd As SqlCommand
    
        Public Sub New()
            Dim strConexao As String = ConfigurationManager.ConnectionStrings("VigasSQLServer").ConnectionString
            conexao = New SqlConnection(strConexao)
        End Sub
    
        '"<summary>
        '"Carrega todos os registros do banco de dados
        '"</summary>
        '"<returns></returns>
    
        Public Function GetDados(ByVal sql As String) As DataTable
    
            dap = New SqlDataAdapter(sql, conexao)
            dap.SelectCommand.CommandType = CommandType.Text
            Dim ds As New DataSet()
    
            Try
                dap.Fill(ds, "DadosViga")
                Return ds.Tables("DadosViga")
    
            Catch
                Throw
            Finally
                ds.Dispose()
                dap.Dispose()
                conexao.Close()
                conexao.Dispose()
    
            End Try
    
        End Function

     Public Function GetDadosViga() As DataTable
            _dal = New SQLHelper
    
            Try
                Dim sql As String = "Select * From DadosViga"
                dtv = _dal.GetDados(sql)
                Return dtv
    
            Catch ex As Exception
                Throw ex
    
            End Try
        End Function

    O DataTable dtv está declarado fora da função.

    Bom, eu não tentei utilizar o NewRow() com o DataTable obtido acima. Vou tentar agora a tarde.

    sábado, 27 de janeiro de 2018 16:30
  • Boa tarde, Leonardo Amaral Scudellari. Tudo bem?

    Conseguiu o que precisava? Se ainda não, o que precisa?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 29 de janeiro de 2018 11:59
    Moderador
  • Bom dia Filipe, tudo bem e você?

    Consegui e não consegui. O William me apresentou uma maneira para fazer o que eu precisava fazer. Porém, eu não consegui aplicar o que ele me passou. Mesmo assim vou marcar o William como resposta porque ele me apresentou o que eu queria, eu é que não consegui aplicar aqui.

    Filipe, sabe me dizer como faço para excluir alguma pergunta que criei?


    terça-feira, 30 de janeiro de 2018 13:30