none
Copiar registro entre tabelas RRS feed

  • Pergunta

  • Opa a todos,

     

    Pessoal tenho 2 tabelas identicas, tabela1 e tabela2. preciso alterar o valor de um campo e depois copiar todo o conteudo da tabela2 para a tabela1.

    Melhor explicando eu preciso fazer um update de um valor de um campo na tabela2 e depois inlcuir todos os registro na tabela1. Isto é na tabela um terão nos registro não serao updates.

    Como eu faco isto no LINQ to identity? Estou usando o framework 4.0 com o VB.net.

     

    Obrigado


    • Editado Joao Nivaldo quinta-feira, 2 de fevereiro de 2012 21:36 mais informacao
    quinta-feira, 2 de fevereiro de 2012 21:15

Respostas

  • OLha o endereco é um campo da tabela2.

     

    Consegui resolver assim

    Logo abaixo do for each eu coloquei, item = new item() ai ele reiniciou a lista e deu certinho.

     

    Obrigado a todos.

     

    • Marcado como Resposta Joao Nivaldo sexta-feira, 3 de fevereiro de 2012 13:05
    sexta-feira, 3 de fevereiro de 2012 13:05

Todas as Respostas

  • Olá João,

    Esses dados que vêm da tabela2 para a tabela1 devem manter os mesmos valores da PRIMARY KEY, ou novos valores podem ser gerados?

    Fiquei em dúvida sobre a parte de qual registro deve ser atualizado.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    sexta-feira, 3 de fevereiro de 2012 00:42
    Moderador
  • OPa,

    OLha o campo ID sera novo na tabela 1. Eu quero dar um insert na tabela 1 com todos os demais campos da tabela 2. O unico que vai mudar e o ID da tabela 1 que ja é auto increment e o mesmo sera ignorado na tabela 2.

     

    Obrigado

    sexta-feira, 3 de fevereiro de 2012 10:54
  • Olá João,

    Veja se isto ajuda:

    1 - Primeiro vc terá de criar um método que converta uma classe Tabela2 para Tabela1, provavelmente vai se parecer com algo do tipo:

    public void Tabela1 Parse(Tabela2 tabela)
    {
        Tabela1 returnValue = new Tabela1;
    <br/>    returnValue.Id = 0;
        returnValue.Propriedade1 = tabela.Propriedade1;
        returnValue.Propriedade2 = tabela.Propriedade2;
        returnValue.Propriedade3 = tabela.Propriedade3;
        returnValue.Propriedade4 = tabela.Propriedade4;
    
        return returnValue;
    }
    

    2 - E o método de inclusão ficará assim:

    public void Salvar(IEnumerable<Tabela2> itens)
    {
        DataContext contexto = new DataContext();
    
        foreach (var item in itens)
        {
            Tabela1 novoItem = Parse(item);
    
            contexto.Tabelas1.InsertOnSubmit(novoItem);
        }
    
        contexto.SubmitChanges();
    }
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    sexta-feira, 3 de fevereiro de 2012 11:12
    Moderador
  • OLha como eu fiz e nao da certo.

    Imports Dados
    
    ...
    
    Public Function Grava(codigo as integer) as boolean
    
          dim dados as new EF_dados
    
          dim item as new orcitens
    
         dim itens as new itens
    
         itens = (from tab in dados.itens where tab.codigo = codigo select tab).tolist
    
        for each i in itens
    
            item.nome = i.nome
    
            item.endereco = i.endereco
    
            dados.addtoorcintes(item)
    
            dados.savechanges()
    
        next
    
        return true
    
    end function
    


     

    Fiz assim e da erro quando vai inserir o segundo valor diz que a chave primaria ja existe. Verifique na depuração que o valor que ele pega paraq o ID apos o SAvechanges ele não zera novamente quando vou incluir o segundo registro. Ja tentei colocar o item.ID=0 mas não funcionou.

    Tentei colocar o savechanges() fora fo For each mas ai ele so grava o ultimo.

    Obrigado

    sexta-feira, 3 de fevereiro de 2012 11:20
  • Olá João,

    E se vc fizer assim?

    Public Function Grava(codigo as integer) as boolean
    
          dim dados as new EF_dados
    
          dim item as new orcitens
    
         dim itens as new itens
    
         itens = (from tab in dados.itens where tab.codigo = codigo select tab).tolist
    
        for each i in itens
    
            item.Id = 0
    
            item.nome = i.nome
    
            item.endereco = i.endereco
    
        next
    
       dados.InsertAllOnSummit(itens)
       dados.savechanges()
    
        return true
    
    end function
    
    
    

    Essa propriedade Endereco é uma String ou uma classe?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    sexta-feira, 3 de fevereiro de 2012 11:25
    Moderador
  • OLha o endereco é um campo da tabela2.

     

    Consegui resolver assim

    Logo abaixo do for each eu coloquei, item = new item() ai ele reiniciou a lista e deu certinho.

     

    Obrigado a todos.

     

    • Marcado como Resposta Joao Nivaldo sexta-feira, 3 de fevereiro de 2012 13:05
    sexta-feira, 3 de fevereiro de 2012 13:05