Notifications
Clear all

Sobreposição de tabela no Access via VBA

6 Posts
4 Usuários
0 Reactions
2,389 Visualizações
(@heliofaria)
Posts: 50
Trusted Member
Topic starter
 

Pessoal, tudo bem?

Estou com um problema aparentemente fácil de se resolver, porém me falta as habilidades...rsrsr

O que se passa é que tenho um banco de dados no Access que recebe atualizações de tabelas oriundas de diversas bases em Excel.

A grande questão é que a tentar atualizar a tabela no Access, os valores não são importados pois o banco reconhece que ja existem essas informações na tabela e por isso nao atualiza. A intenção é que os resultados sejam exportados do Excel para o Access mas que nao sejam adicionadas novas linhas, ou seja, apenas as linhas originais ta base. O que eu preciso é que seja feita sempre uma sobrescrição em vez de adição no banco de dados.

O codigo que fiz é este:

Sub transfere()

'Cria variável que armazena os comandos SQL
    Dim ComandoSQL As String
  Sheets("consolidado").Select
 ActiveWorkbook.RefreshAll
    
    'looping das colunas
    Sheets("consolidado").Range("A2").Select
                       
                       
                   'lopping das linhas
                   Do While ActiveCell <> ""
                    
                    linha = ActiveCell.Row
                    
                    'Armazena na variável o comando que fará a consulta SQL no BD Access
                    ComandoSQL = "select * from Exatidao_Trato"
                    
                    'Chama a rotina que faz a conexão com o BD
                    Call Conecta
                    
                    'Atribui a variável de Objeto de BD a execução dos comandos SQL
                    Set consulta = banco.OpenRecordset(ComandoSQL)
                     
                          With consulta
                                    'Abre o Recordset do BD para inserção
                                    .AddNew
                                
                                    .Fields("Fazenda") = Sheets("consolidado").Cells(linha, 1) 'fazenda
                                    .Fields("Periodo") = Sheets("consolidado").Cells(linha, 2) 'Periodo
                                    .Fields("Meta") = Sheets("consolidado").Cells(linha, 3) 'Meta
                                    .Fields("Resultado") = Sheets("consolidado").Cells(linha, 4) 'resultado
                                    .Fields("Acumulado") = Sheets("consolidado").Cells(linha, 5) 'Acumulado
                                    
                                    
                                     'Se houver erro
                                     On Error Resume Next
                                    
                                    'Efetiva a atualização do BD
                                    .Update
                                    
                                     'Fecha o Recorset e a conexão com o BD
                                     consulta.Close
                                     banco.Close
                                
                                'Chama a rotina que desconecta do BD (libera variáveis objeto de BD)
                                Call Desconecta
                                    
                                ActiveCell.Offset(1, 0).Select
                                
                                    
                         End With
                        
                Loop
       
       
       'Exibe mensagem de sucesso na inclusão do registro
        MsgBox "Dados registrados na base central! ", vbDefaultButton1, "Fabrica Virtual"
                    
        'Abandona a subrotina
        Exit Sub
                
End Sub

Poderiam me ajudar com isso!!???

Obrigado.

 
Postado : 21/10/2015 7:01 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

HelioFaria,

Bom dia!

Veja se essa solução pode te ajudar.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 22/10/2015 7:26 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Acredito que a Tabela no Access tenha um campo chave com duplicação não autorizada, nessa condição a rotina AddNew (utilizada para inclusão de novos registros) irá gerar erro.
Para "atualizar" um registro existente, deve utilizar com as instrução Update into...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 22/10/2015 11:02 am
(@heliofaria)
Posts: 50
Trusted Member
Topic starter
 

Wagner Morel, muito obrigado pela ajuda, mas infelizmente preciso do código que faça o inverso do que este seu código fez.

Sendo mais específico, preciso que estes 4 registros sejam sempre substituídos na tabela do Access. Da forma como está escrito, sempre serão adicionadas novas faturas e clientes nas linhas abaixo, e no entanto preciso que sejam sempre 4 clientes apenas. Se fosse uma base no Excel, eu faria um "copiar" e "colar" nas células A2:D5, sendo este um intervalo fixo.

Pode me ajudar com isso??

Muito obrigado Wagner.

 
Postado : 22/10/2015 12:16 pm
(@nelson-s)
Posts: 96
Trusted Member
 

Poste um arquivo contendo a planilha "consolidado" indicando quais são os registros que precisam ser atualizados no Acess que fica bem mais fácil de entender o que você quer se seja feito.

Ficar tentando "imaginar" como os dados têm que ser atualizados é complicado.

O problema parece ser simples mas sem um modelo fica complicado.

 
Postado : 30/10/2015 7:17 pm
(@heliofaria)
Posts: 50
Trusted Member
Topic starter
 

So para dar um feedback....resolvi do jeito mais simples possível: Vou la no banco, apago os dados das tabelas e adiciono novamente!

 
Postado : 07/09/2016 6:43 am