none
Inverter valores no banco de dados. RRS feed

  • Pergunta

  • Estou fazendo um programa, e precisava de linhas de código para inverter linhas em um banco de dados.. Gostaria que a chave primaria continuasse a mesma, mas todos os os dados seriam alterados... Eu tentei esse código, mas não está funcionando:

    Public Class Form1
      Dim Con As New OleDbConnection("Provider = Microsoft.jet.oledb.4.0; Data Source = pcp.mdb")
      Dim Adaptador As New OleDbDataAdapter
      Dim Cmd As New OleDbCommand
      Dim Valores As String() = Nothing
      Dim Codigo1 As Integer
    
    
      Function CarregarPedido(ByVal codigo As Integer)
    
        Dim DReader As OleDbDataReader
        Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo & "", Con)
        Try
          Con.Open()
          DReader = Cmd.ExecuteReader
          DReader.Read()
    
          Valores(0) = DReader("Id_Pedido")
          Valores(1) = DReader("Descricao")
          Valores(2) = DReader("ArquivoPED")
          Valores(3) = DReader("Notafiscal")
          Valores(4) = DReader("Tempo")
          Valores(5) = DReader("QuantidadePecas")
          Valores(6) = DReader("QuantidadeLadosFita")
          Valores(7) = DReader("Status")
          Valores(8) = DReader("PecasCortadas")
          Valores(9) = DReader("FitasColadas")
          Valores(10) = DReader("Expedicao")
          Valores(11) = DReader("TempoParada")
          Valores(12) = DReader("Cliente")
          Valores(13) = DReader("TempoTotal")
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Cmd.Cancel()
          Con.Close()
        End Try
    
        Return Valores
    
      End Function
      Sub Atualizar()
        Try
          Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = ?,ArquivoPED = ?, NotaFiscal = ?,Tempo = ?,QuantidadePecas = ?,QuantidadeLadosFita = ?,Status = ?,PecasCortadas = ?,FitasColadas = ?,Expedicao = ?,TempoParada = ?,Cliente =?, TempoTotal=? where id_pedido = " & Codigo1, Con)
          cmd.Parameters.AddWithValue("Descricao", Valores(1))
          cmd.Parameters.AddWithValue("ArquivoPED", Valores(2))
          cmd.Parameters.AddWithValue("NotaFiscal", Valores(3))
          cmd.Parameters.AddWithValue("Tempo", Valores(4))
          cmd.Parameters.AddWithValue("QuantidadePecas", Valores(5))
          cmd.Parameters.AddWithValue("QuantidadeLadosFita", Valores(6))
          cmd.Parameters.AddWithValue("Status", Valores(7))
          cmd.Parameters.AddWithValue("PecasCortadas", Valores(8))
          cmd.Parameters.AddWithValue("FitasColadas", Valores(9))
          cmd.Parameters.AddWithValue("Expedicao", Valores(10))
          cmd.Parameters.AddWithValue("TempoParada", Valores(11))
          cmd.Parameters.AddWithValue("Cliente", Valores(12))
          cmd.Parameters.AddWithValue("TempoTotal", Valores(13))
          Con.Open()
          cmd.ExecuteNonQuery()
          Con.Close()
          MsgBox("Registro editado/atualizado com sucesso! :DDDD")
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
      End Sub
      Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
        Dim Trocar As String() = Nothing
        Dim Trocar2 As String() = Nothing
        Try
    
          Trocar = CarregarPedido(Pedido1.Text)
          Codigo1 = Pedido2.Text
          Atualizar()
    
    
          Trocar2 = CarregarPedido(Pedido2.Text)
          Codigo1 = Pedido1.Text
          Atualizar()
    
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
    
    
    
      End Sub
    

     

    Me ajudem, estou tentando soluções a laugm tempo e nada funciona... T.T

    quinta-feira, 28 de abril de 2011 17:07

Respostas

  • O resultado saiu como o experado...

    Mas o código ficou duplicado...para um projeto pequeno isso não irá fazer muita diferença, mas quanto maior for o prjeto mais pesado ficará...

    Tente fazer assim para ver o que acontece:

    Imports System.Data.OleDb
    Imports System.IO
    Imports System.Windows.Forms
    
    Public Class Form1
     Dim Con As New OleDbConnection("Provider = Microsoft.jet.oledb.4.0; Data Source = pcp.mdb")
     Dim Adaptador As New OleDbDataAdapter
     Dim Cmd As New OleDbCommand
     Dim Valores As String() = New String(12) {}
    
     Function CarregarPedido(ByVal codigo As Integer)
      Dim DReader As OleDbDataReader
      Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo & "", Con)
      Try
       Con.Open()
       DReader = Cmd.ExecuteReader
       DReader.Read()
    
       Valores(0) = DReader("Descricao")
       Valores(1) = DReader("ArquivoPED")
       Valores(2) = DReader("Notafiscal")
       Valores(3) = DReader("Tempo")
       Valores(4) = DReader("QuantidadePecas")
       Valores(5) = DReader("QuantidadeLadosFita")
       Valores(6) = DReader("Status")
       Valores(7) = DReader("PecasCortadas")
       Valores(8) = DReader("FitasColadas")
       Valores(9) = DReader("Expedicao")
       Valores(10) = DReader("TempoParada")
       Valores(11) = DReader("Cliente")
       Valores(12) = DReader("TempoTotal")
    
       Cmd.Cancel()
       Con.Close()
    
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    
      Return Valores
     End Function
    
     Sub Atualizar(ByVal codigo1 As Integer, ByVal VetorDadosAs String())
      Try
       Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = @descricao , ArquivoPED = @ArquivoPED, NotaFiscal = @NotaFiscal, Tempo = @tempo, QuantidadePecas = @quantidadepecas, QuantidadeLadosFita = @quantidadeladosfita,Status = @status, PecasCortadas = @pecascortadas, FitasColadas = @fitascoladas, Expedicao = @expedicao, TempoParada = @tempoparada, Cliente = @cliente, TempoTotal = @tempototal where id_pedido = " & codigo1 & "", Con)
       cmd.Parameters.AddWithValue("Descricao", VetorDados(0))
       cmd.Parameters.AddWithValue("ArquivoPED", VetorDados(1))
       cmd.Parameters.AddWithValue("NotaFiscal", VetorDados(2))
       cmd.Parameters.AddWithValue("Tempo", VetorDados(3))
       cmd.Parameters.AddWithValue("QuantidadePecas", VetorDados(4))
       cmd.Parameters.AddWithValue("QuantidadeLadosFita", VetorDados(5))
       cmd.Parameters.AddWithValue("Status", VetorDados(6))
       cmd.Parameters.AddWithValue("PecasCortadas", VetorDados(7))
       cmd.Parameters.AddWithValue("FitasColadas", VetorDados(8))
       cmd.Parameters.AddWithValue("Expedicao", VetorDados(9))
       cmd.Parameters.AddWithValue("TempoParada", VetorDados(10))
       cmd.Parameters.AddWithValue("Cliente", VetorDados(11))
       cmd.Parameters.AddWithValue("TempoTotal", VetorDados(12))
       Con.Open()
       cmd.ExecuteNonQuery()
       Con.Close()
    
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    
     End Sub
     
     Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
      Try
    
       Dim string1 As String() = CarregarPedido(Pedido2.Text)
       Dim string2 As String() = CarregarPedido(Pedido1.Text)
    
       Atualizar(Pedido1.Text, string1)
       Atualizar(Pedido2.Text, string2)
       Con.Close()
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
     End Sub
    
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
     End Sub
    End Class
    
    

    Em teoria isso deveria funcionar

    Mas teste ai...

     

     


    Att. Osni
    • Marcado como Resposta nickolasleal quarta-feira, 4 de maio de 2011 13:30
    segunda-feira, 2 de maio de 2011 13:39

Todas as Respostas

  • pra voce alterar os valores tens de usar textbox. ai voce escreve o novo valor e passa no teu parametros.

    eu nao vejo onde voce altera o valor. 

    Voce fez uma pesquiza primeiro, esta certo. depois voce passa a informacao num array. esta certo. depois voce usa update pra alterar a informacao. so que voce usa a mesma informacao nu array....

    quando se faz update temos de dizer onde o update vai ser feito com uma condicao where.

    update tabela set nome=@nome, sobrenome=@sobrenome where id=@id

     


    One word frees us of all the weight and pain of life: that word is love.
    quinta-feira, 28 de abril de 2011 17:20
    Moderador
  • Posso estar enganado mas do jeito que você está fazendo está duplicando os dados...(me corriga se estiver errado)

    Tente fazer assim:

    Primeiro crie mais 1 variavel chamada "Codigo2"

    Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
      Dim Trocar As String() = Nothing
      Dim Trocar2 As String() = Nothing
      Try
    
       Trocar = CarregarPedido(Pedido1.Text)
       Trocar2 = CarregarPedido(Pedido2.Text)
    
       Codigo1 = Pedido1.Text   
       Codigo2 = Pedido2.Text
    
       Atualizar(Codigo1, Trocar2)
       Atualizar(Codigo2, Trocar)
    
       Con.Close()
    
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    End Sub
    

    Altere tambem seu método "Atualizar"...Deixe assim:

     Sub Atualizar(Byval Codigo as Integer, Byval Vetor as String())
      Try
       Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = ?,ArquivoPED = ?, NotaFiscal = ?,Tempo = ?,QuantidadePecas = ?,QuantidadeLadosFita = ?,Status = ?,PecasCortadas = ?,FitasColadas = ?,Expedicao = ?,TempoParada = ?,Cliente =?, TempoTotal=? where id_pedido = " & Codigo, Con)
       cmd.Parameters.AddWithValue("Descricao", Vetor(1))
       cmd.Parameters.AddWithValue("ArquivoPED", Vetor(2))
       cmd.Parameters.AddWithValue("NotaFiscal", Vetor(3))
       cmd.Parameters.AddWithValue("Tempo", Vetor(4))
       cmd.Parameters.AddWithValue("QuantidadePecas", Vetor(5))
       cmd.Parameters.AddWithValue("QuantidadeLadosFita", Vetor(6))
       cmd.Parameters.AddWithValue("Status", Vetor(7))
       cmd.Parameters.AddWithValue("PecasCortadas", Vetor(8))
       cmd.Parameters.AddWithValue("FitasColadas", Vetor(9))
       cmd.Parameters.AddWithValue("Expedicao", Vetor(10))
       cmd.Parameters.AddWithValue("TempoParada", Vetor(11))
       cmd.Parameters.AddWithValue("Cliente", Vetor(12))
       cmd.Parameters.AddWithValue("TempoTotal", Vetor(13))
       Con.Open()
       cmd.ExecuteNonQuery()
       Con.Close()
       MsgBox("Registro editado/atualizado com sucesso! :DDDD")
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    
     End Sub
    
    

    Isso deve funcionar...mas não testei...então qualquer coisa é só da um grito...xD


    Att. Osni
    quinta-feira, 28 de abril de 2011 17:22
  • Olá nickolasleal,

    Acho que existe um problema no teu código. Acompanhe meu "teste de mesa":

    Passo1) O programa carrega o Pedido1 para o vetor Valores();

    Passo2) O programa atualiza o Pedido2 com os valores de Valores()   [que são os valores do Pedido1];

    Passo3) O programa carrega o Pedido2 para o vetor Valores()  [que agora possui os valores do Pedido1];

    Passo4) O programa atualiza o Pedido1 com os valores de Valores()   [que são os próprios valores do Pedido1!!]

    Assim, no término do teu programa, Pedido1 e Pedido2 devem estar com os mesmos valores (todos do Pedido1).

    Para corrigir, primeiro deves armazenar os dados do Pedido2 em um outro vetor auxiliar, e gravar esses valores do vetor auxiliar no Pedido1. 

    Sds.,

     


    Daniel Ethur Porto Alegre/RS
    quinta-feira, 28 de abril de 2011 17:27
  • Modificamos o Código mas continua dando o mesmo erro ;s

     

    Imports System.Data.OleDb
    Imports System.IO
    Imports System.Windows.Forms
    
    Public Class Form1
      Dim Con As New OleDbConnection("Provider = Microsoft.jet.oledb.4.0; Data Source = pcp.mdb")
      Dim Adaptador As New OleDbDataAdapter
      Dim Cmd As New OleDbCommand
      Dim Valores As String() = Nothing
      Dim VPedido1 As Integer
      Dim VPedido2 As Integer
    
    
      Function CarregarPedido(ByVal codigo As Integer)
    
        Dim DReader As OleDbDataReader
        Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo & "", Con)
        Try
          Con.Open()
          DReader = Cmd.ExecuteReader
          DReader.Read()
    
    
    
          Valores(0) = DReader("Descricao")
          Valores(1) = DReader("ArquivoPED")
          Valores(2) = DReader("Notafiscal")
          Valores(3) = DReader("Tempo")
          Valores(4) = DReader("QuantidadePecas")
          Valores(5) = DReader("QuantidadeLadosFita")
          Valores(6) = DReader("Status")
          Valores(7) = DReader("PecasCortadas")
          Valores(8) = DReader("FitasColadas")
          Valores(9) = DReader("Expedicao")
          Valores(10) = DReader("TempoParada")
          Valores(11) = DReader("Cliente")
          Valores(12) = DReader("TempoTotal")
    
          Cmd.Cancel()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
        Return Valores
    
      End Function
      Sub Atualizar(ByVal codigo1 As Integer, ByVal Valores As String())
        Try
          Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = ?,ArquivoPED = ?, NotaFiscal = ?,Tempo = ?,QuantidadePecas = ?,QuantidadeLadosFita = ?,Status = ?,PecasCortadas = ?,FitasColadas = ?,Expedicao = ?,TempoParada = ?,Cliente =?, TempoTotal=? where id_pedido = " & codigo1, Con)
          cmd.Parameters.AddWithValue("Descricao", Valores(0))
          cmd.Parameters.AddWithValue("ArquivoPED", Valores(1))
          cmd.Parameters.AddWithValue("NotaFiscal", Valores(2))
          cmd.Parameters.AddWithValue("Tempo", Valores(3))
          cmd.Parameters.AddWithValue("QuantidadePecas", Valores(4))
          cmd.Parameters.AddWithValue("QuantidadeLadosFita", Valores(5))
          cmd.Parameters.AddWithValue("Status", Valores(6))
          cmd.Parameters.AddWithValue("PecasCortadas", Valores(7))
          cmd.Parameters.AddWithValue("FitasColadas", Valores(8))
          cmd.Parameters.AddWithValue("Expedicao", Valores(9))
          cmd.Parameters.AddWithValue("TempoParada", Valores(10))
          cmd.Parameters.AddWithValue("Cliente", Valores(11))
          cmd.Parameters.AddWithValue("TempoTotal", Valores(12))
          Con.Open()
          cmd.ExecuteNonQuery()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
      End Sub
      Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
        Dim Trocar As String() = Nothing
        Dim Trocar2 As String() = Nothing
        VPedido1 = Pedido1.Text
        VPedido2 = Pedido1.Text
        Try
          Trocar = CarregarPedido(VPedido1)
          Trocar2 = CarregarPedido(VPedido2)
    
    
          Atualizar(VPedido1, Trocar2)
          Atualizar(VPedido2, Trocar)
    
    
    
    
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
    
    
    
      End Sub
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
      End Sub
    End Class
    
    

    quinta-feira, 28 de abril de 2011 18:03
  • Ok! Participando um pouco na solução do pessoal, então, observe que ali nas primeiras linhas do BTNInverter_Click(, tu setas as variáveis vPedido1 e vPedido2 com o mesmo textbox (pedido1.text). 

    Sds.,


    Daniel Ethur Porto Alegre/RS
    quinta-feira, 28 de abril de 2011 18:07
  • Obrigada :D

    ... ja mudei e continuou com o erro >.<

    quinta-feira, 28 de abril de 2011 18:14
  • Marcela, é um erro (uma exceção) que está ocorrendo, ou um mal funcionamento do programa? Se for erro (exception), podes postar aqui?

    Outra coisa, observe lá na mensagem do Malange, onde ele informa que deves identificar os parâmetros do UPDATE, nomeando-os com @nomeXX distintos. Em uma conexão ODBC com o MySQL, fui obrigado a utilizar esses ? como parâmetros nos meus updates, mas no OleDB, acho que, conforme a sugestão do Malange, eles devem ser nomeados com @nomeXX, e não utilizados com "?". 

    Sds.,


    Daniel Ethur Porto Alegre/RS
    quinta-feira, 28 de abril de 2011 18:22
  • Bom dia, desculpa a demora para responder >.<

     

    Então no caso dos parametros do Update, estou acostumada a utilizar o "?" não deu erro antes :\ e eu acabei de tentar também e continua aparecendo quatro caixas de mensagens seguidas com o seguinte erro: "Referência de objeto não definida para uma instância de um objeto"

     

    Obrigada :D

     

     

    sexta-feira, 29 de abril de 2011 11:56
  • Tem como debugar o código para ver que linha está gerando o código e se os valores estão sendo passados corretamente?
    Att. Osni
    sexta-feira, 29 de abril de 2011 12:32
  • Coloquei um BreakPoint na declaração das variaveis da function 'CarregarPedido'


    Ele passa pela declaração, entra no try passa pelo data reader mas quando vai atribuir o valor do BD para a String() 'Valores' ele ja passa para o catch e a string() continua com valendo 'nothing'

    sexta-feira, 29 de abril de 2011 12:58
  • Esse erro é pela forma que você está declarando seus vetores...
    Tente fazer assim:
    Dim Valores As String() = New String(12) {}
    
    Dim Trocar As String() = New String(12) {}
    Dim Trocar2 As String() = New String(12) {}
    
    
     
     

    Att. Osni
    • Sugerido como Resposta Marcela Rangel segunda-feira, 2 de maio de 2011 12:50
    sexta-feira, 29 de abril de 2011 13:31
  • @Marcela

    Assim fica dificil te ajudar. O problema esta no codigo. Nao existe nenhum erro. O problema esta na forma em que voce esta a programar. Se voce ler o teu primeiro posto, voce diz que quer fazer update. Se voce quer fazer update voce tem de usar parametros no codigo todo.

     

     

    1- Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = ?,ArquivoPED = ?, NotaFiscal = ?,Tempo = ?,QuantidadePecas = ?,QuantidadeLadosFita = ?,Status = ?,PecasCortadas = ?,FitasColadas = ?,Expedicao = ?,TempoParada = ?,Cliente =?, TempoTotal=? where id_pedido =@Pedido)
      cmd.Parameters.AddWithValue("@Pedido", textbox2.text)

    2---explica-me isto por favor:
     Dim Trocar As String() = Nothing------------------------trocar vai receber o que?
     Dim Trocar2 As String() = Nothing-------------------trocar vai fazer o que?
     Try
    
      Trocar = CarregarPedido(Pedido1.Text) ----Porque trocar vai ser igual a sua funcao?
      Codigo1 = Pedido2.Text -----------------Aqui esta certo. Mas voce nao precisa isto.
      Atualizar()
    
    
      Trocar2 = CarregarPedido(Pedido2.Text)
      Codigo1 = Pedido1.Text
      Atualizar()
    
      Con.Close()-------------------voce fecha o que?
    
     Catch ex As Exception
      MsgBox(ex.Message)
      Con.Close()-----------------Voce fecha o que?
     End Try

     


    One word frees us of all the weight and pain of life: that word is love.
    sexta-feira, 29 de abril de 2011 13:35
    Moderador
  • NetoOo:

     

    Muito obrigado... Agora as strings funcionam perfeitamente. :DD

     

    Malange:

    o Con que é finalizado seria a conexão... Que é finalizado tanto se entrar no try e for bem sucedido ou não...

    Tanto o 'Trocar' quanto o 'Trocar2' estão recebendo os respectivos valores dos registros que desejamos inverter, por isso o trocar recebe a função 'CarregarPedido'

    E prqe a linha que você diz estar certa não é necessária? 'Codigo1=pedido2.text'?

    Com a mudança sugerida pelo NetoOo o problema do trocar está resolvido... agora só há um erro na lógica mesmo, pois esta duplicando o segundo valor :Z estamos analisando o código para ver onde erramos *-*

     

    Obrigado pela ajuda. =D

     

    sexta-feira, 29 de abril de 2011 13:47
  • Conseguimos fazer com que não duplique o segundo, mesmo com um código extenso, enfim... vou postar ele aqui:

     

    Imports System.Data.OleDb
    Imports System.IO
    Imports System.Windows.Forms
    
    Public Class Form1
      Dim Con As New OleDbConnection("Provider = Microsoft.jet.oledb.4.0; Data Source = pcp.mdb")
      Dim Adaptador As New OleDbDataAdapter
      Dim Cmd As New OleDbCommand
      Dim Valores As String() = New String(12) {}
      Dim Valores2 As String() = New String(12) {}
      Dim VPedido1 As Integer
      Dim VPedido2 As Integer
    
    
      Function CarregarPedido(ByVal codigo As Integer)
    
        Dim DReader As OleDbDataReader
        Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo & "", Con)
        Try
          Con.Open()
          DReader = Cmd.ExecuteReader
          DReader.Read()
    
    
    
          Valores(0) = DReader("Descricao")
          Valores(1) = DReader("ArquivoPED")
          Valores(2) = DReader("Notafiscal")
          Valores(3) = DReader("Tempo")
          Valores(4) = DReader("QuantidadePecas")
          Valores(5) = DReader("QuantidadeLadosFita")
          Valores(6) = DReader("Status")
          Valores(7) = DReader("PecasCortadas")
          Valores(8) = DReader("FitasColadas")
          Valores(9) = DReader("Expedicao")
          Valores(10) = DReader("TempoParada")
          Valores(11) = DReader("Cliente")
          Valores(12) = DReader("TempoTotal")
    
          Cmd.Cancel()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
        Return Valores
    
      End Function
      Function CarregarPedido2(ByVal codigo2 As Integer)
    
        Dim DReader As OleDbDataReader
        Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo2 & "", Con)
        Try
          Con.Open()
          DReader = Cmd.ExecuteReader
          DReader.Read()
    
    
    
          Valores2(0) = DReader("Descricao")
          Valores2(1) = DReader("ArquivoPED")
          Valores2(2) = DReader("Notafiscal")
          Valores2(3) = DReader("Tempo")
          Valores2(4) = DReader("QuantidadePecas")
          Valores2(5) = DReader("QuantidadeLadosFita")
          Valores2(6) = DReader("Status")
          Valores2(7) = DReader("PecasCortadas")
          Valores2(8) = DReader("FitasColadas")
          Valores2(9) = DReader("Expedicao")
          Valores2(10) = DReader("TempoParada")
          Valores2(11) = DReader("Cliente")
          Valores2(12) = DReader("TempoTotal")
    
          Cmd.Cancel()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
        Return Valores2
    
      End Function
    
    
      Sub Atualizar(ByVal codigo1 As Integer, ByVal Valores As String())
        Try
          Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = @descricao , ArquivoPED = @ArquivoPED, NotaFiscal = @NotaFiscal, Tempo = @tempo, QuantidadePecas = @quantidadepecas, QuantidadeLadosFita = @quantidadeladosfita,Status = @status, PecasCortadas = @pecascortadas, FitasColadas = @fitascoladas, Expedicao = @expedicao, TempoParada = @tempoparada, Cliente = @cliente, TempoTotal = @tempototal where id_pedido = " & codigo1 & "", Con)
          cmd.Parameters.AddWithValue("Descricao", Valores(0))
          cmd.Parameters.AddWithValue("ArquivoPED", Valores(1))
          cmd.Parameters.AddWithValue("NotaFiscal", Valores(2))
          cmd.Parameters.AddWithValue("Tempo", Valores(3))
          cmd.Parameters.AddWithValue("QuantidadePecas", Valores(4))
          cmd.Parameters.AddWithValue("QuantidadeLadosFita", Valores(5))
          cmd.Parameters.AddWithValue("Status", Valores(6))
          cmd.Parameters.AddWithValue("PecasCortadas", Valores(7))
          cmd.Parameters.AddWithValue("FitasColadas", Valores(8))
          cmd.Parameters.AddWithValue("Expedicao", Valores(9))
          cmd.Parameters.AddWithValue("TempoParada", Valores(10))
          cmd.Parameters.AddWithValue("Cliente", Valores(11))
          cmd.Parameters.AddWithValue("TempoTotal", Valores(12))
          Con.Open()
          cmd.ExecuteNonQuery()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
      End Sub
      Sub Atualizar2(ByVal codigo2 As Integer, ByVal Valores2 As String())
        Try
          Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = @descricao , ArquivoPED = @ArquivoPED, NotaFiscal = @NotaFiscal, Tempo = @tempo, QuantidadePecas = @quantidadepecas, QuantidadeLadosFita = @quantidadeladosfita,Status = @status, PecasCortadas = @pecascortadas, FitasColadas = @fitascoladas, Expedicao = @expedicao, TempoParada = @tempoparada, Cliente = @cliente, TempoTotal = @tempototal where id_pedido = " & codigo2 & "", Con)
          cmd.Parameters.AddWithValue("Descricao", Valores2(0))
          cmd.Parameters.AddWithValue("ArquivoPED", Valores2(1))
          cmd.Parameters.AddWithValue("NotaFiscal", Valores2(2))
          cmd.Parameters.AddWithValue("Tempo", Valores2(3))
          cmd.Parameters.AddWithValue("QuantidadePecas", Valores2(4))
          cmd.Parameters.AddWithValue("QuantidadeLadosFita", Valores2(5))
          cmd.Parameters.AddWithValue("Status", Valores2(6))
          cmd.Parameters.AddWithValue("PecasCortadas", Valores2(7))
          cmd.Parameters.AddWithValue("FitasColadas", Valores2(8))
          cmd.Parameters.AddWithValue("Expedicao", Valores2(9))
          cmd.Parameters.AddWithValue("TempoParada", Valores2(10))
          cmd.Parameters.AddWithValue("Cliente", Valores2(11))
          cmd.Parameters.AddWithValue("TempoTotal", Valores2(12))
          Con.Open()
          cmd.ExecuteNonQuery()
          Con.Close()
    
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
    
      End Sub
     
      Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
        Try
    
          Dim string1 As String()
          Dim string2 As String()
    
          string1 = CarregarPedido(Pedido2.Text)
          string2 = CarregarPedido2(Pedido1.Text)
    
          Atualizar(Pedido1.Text, string1)
          Atualizar2(Pedido2.Text, string2)
          Con.Close()
        Catch ex As Exception
          MsgBox(ex.Message)
          Con.Close()
        End Try
      End Sub
    
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
      End Sub
    End Class
    

     

     

     

    Obrigado :D

    segunda-feira, 2 de maio de 2011 12:50
  • O resultado saiu como o experado...

    Mas o código ficou duplicado...para um projeto pequeno isso não irá fazer muita diferença, mas quanto maior for o prjeto mais pesado ficará...

    Tente fazer assim para ver o que acontece:

    Imports System.Data.OleDb
    Imports System.IO
    Imports System.Windows.Forms
    
    Public Class Form1
     Dim Con As New OleDbConnection("Provider = Microsoft.jet.oledb.4.0; Data Source = pcp.mdb")
     Dim Adaptador As New OleDbDataAdapter
     Dim Cmd As New OleDbCommand
     Dim Valores As String() = New String(12) {}
    
     Function CarregarPedido(ByVal codigo As Integer)
      Dim DReader As OleDbDataReader
      Dim Cmd = New OleDbCommand("Select * from pedidos where Id_Pedido=" & codigo & "", Con)
      Try
       Con.Open()
       DReader = Cmd.ExecuteReader
       DReader.Read()
    
       Valores(0) = DReader("Descricao")
       Valores(1) = DReader("ArquivoPED")
       Valores(2) = DReader("Notafiscal")
       Valores(3) = DReader("Tempo")
       Valores(4) = DReader("QuantidadePecas")
       Valores(5) = DReader("QuantidadeLadosFita")
       Valores(6) = DReader("Status")
       Valores(7) = DReader("PecasCortadas")
       Valores(8) = DReader("FitasColadas")
       Valores(9) = DReader("Expedicao")
       Valores(10) = DReader("TempoParada")
       Valores(11) = DReader("Cliente")
       Valores(12) = DReader("TempoTotal")
    
       Cmd.Cancel()
       Con.Close()
    
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    
      Return Valores
     End Function
    
     Sub Atualizar(ByVal codigo1 As Integer, ByVal VetorDadosAs String())
      Try
       Dim cmd As OleDbCommand = New OleDbCommand("Update pedidos set Descricao = @descricao , ArquivoPED = @ArquivoPED, NotaFiscal = @NotaFiscal, Tempo = @tempo, QuantidadePecas = @quantidadepecas, QuantidadeLadosFita = @quantidadeladosfita,Status = @status, PecasCortadas = @pecascortadas, FitasColadas = @fitascoladas, Expedicao = @expedicao, TempoParada = @tempoparada, Cliente = @cliente, TempoTotal = @tempototal where id_pedido = " & codigo1 & "", Con)
       cmd.Parameters.AddWithValue("Descricao", VetorDados(0))
       cmd.Parameters.AddWithValue("ArquivoPED", VetorDados(1))
       cmd.Parameters.AddWithValue("NotaFiscal", VetorDados(2))
       cmd.Parameters.AddWithValue("Tempo", VetorDados(3))
       cmd.Parameters.AddWithValue("QuantidadePecas", VetorDados(4))
       cmd.Parameters.AddWithValue("QuantidadeLadosFita", VetorDados(5))
       cmd.Parameters.AddWithValue("Status", VetorDados(6))
       cmd.Parameters.AddWithValue("PecasCortadas", VetorDados(7))
       cmd.Parameters.AddWithValue("FitasColadas", VetorDados(8))
       cmd.Parameters.AddWithValue("Expedicao", VetorDados(9))
       cmd.Parameters.AddWithValue("TempoParada", VetorDados(10))
       cmd.Parameters.AddWithValue("Cliente", VetorDados(11))
       cmd.Parameters.AddWithValue("TempoTotal", VetorDados(12))
       Con.Open()
       cmd.ExecuteNonQuery()
       Con.Close()
    
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
    
     End Sub
     
     Private Sub BTNInverter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNInverter.Click
      Try
    
       Dim string1 As String() = CarregarPedido(Pedido2.Text)
       Dim string2 As String() = CarregarPedido(Pedido1.Text)
    
       Atualizar(Pedido1.Text, string1)
       Atualizar(Pedido2.Text, string2)
       Con.Close()
      Catch ex As Exception
       MsgBox(ex.Message)
       Con.Close()
      End Try
     End Sub
    
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
     End Sub
    End Class
    
    

    Em teoria isso deveria funcionar

    Mas teste ai...

     

     


    Att. Osni
    • Marcado como Resposta nickolasleal quarta-feira, 4 de maio de 2011 13:30
    segunda-feira, 2 de maio de 2011 13:39
  • Esta duplicando novamente :\
    segunda-feira, 2 de maio de 2011 14:05
  • Que estranho...

    Debuge o código para acompanhar as variaveis VetorDados, string1, string2 e Valores...

    Desculpa a insistencia mesmo você dizendo que ja deu certo daquela maneira...mas da outra maneira deveria funcionar(apesar de eu não ter testado...)


    Att. Osni
    segunda-feira, 2 de maio de 2011 17:00
  • A string1 recebe o valor conforme o código certinho, porem quando a funçao carregar é executada novamente para o outro código além da string2 receber o valores a string1 é atualizada ><
    segunda-feira, 2 de maio de 2011 17:14
  • lol

    Ultimo teste...dai paro de enche...rsrs

    Crie essas variaveis globais, como  o vetor "Valores"


    Att. Osni
    segunda-feira, 2 de maio de 2011 18:40
  • Bom Dia Neto, tudo bem?

     

    Tentei declarar as variaveis como globais, porém o programa nem executa ><

    Dá erro na criação do formulário, e diz "Referência de objeto não definida para uma instância de um objeto"

    As variaveis estão assumindo valor nulo ;\\

     

    Obrigado pela insistência, nos queremos mesmo que o programa seja 'compacto', não esta enchendo o saco nao :DDD

     

     

     

    terça-feira, 3 de maio de 2011 11:22