Notifications
Clear all

Macro para detectar valores Banco de dados

5 Posts
2 Usuários
0 Reactions
933 Visualizações
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

Pessoal,

eu uso esse código para importar os dados da minha planilha excel para meu banco de dados em access, gostaria de saber se é possível no momento que eu importar.. a macro detectar que existe valores que já exitem no banco de dados. Assim eu evito duplicidade.

Private Sub importa()

'Cria variável que armazena os comandos SQL
   
   Dim ComandoSQL As String
    
   Dim plan As Worksheet
   Set plan = Sheets("Relatório_Blocos")
 
    'looping das colunas
    plan.Range("A6").Select
                                       
                   'Armazena na variável o comando que fará a consulta SQL no BD Access
                   ComandoSQL = "select * from TB_bloco"
                    
                   '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)
                     
                   'laço percorre todos os registros da tabela do BD até o End Of File (final)
                   While Not consulta.EOF
                            
                   linha = ActiveCell.Row
                   
                          With consulta
                                   
                                    plan.Cells(linha, 1) = .Fields("ID")
                                    plan.Cells(linha, 2) = .Fields("Lote")
                                    plan.Cells(linha, 3) = .Fields("Material")
                                    plan.Cells(linha, 4) = .Fields("Descrição")
                                    plan.Cells(linha, 5) = .Fields("QTD M3")
                                    plan.Cells(linha, 6) = .Fields("Altura")
                                    plan.Cells(linha, 7) = .Fields("Comprimento")
                                    plan.Cells(linha, 8) = .Fields("Largura")
                                    plan.Cells(linha, 9) = .Fields("Bloco")
                                    plan.Cells(linha, 10) = .Fields("Endereço")
                                    
                                     
                                     'Se houver erro
                                     On Error Resume Next
                                    
                         End With
                         
                     'move para próximo registro do BD access
                     consulta.MoveNext
                     'move para próxima linha planilha
                     ActiveCell.Offset(1, 0).Select
                     
                     
                    Wend
           
                                         
           'Chama a rotina que desconecta do BD (libera variáveis objeto de BD)
           Call Desconecta
                        
       
       'Exibe mensagem de sucesso na inclusão do registro
        MsgBox "Dados importados com Sucesso! ", vbDefaultButton1, "Importação"
        
                
        'Abandona a subrotina
        Exit Sub
              
 
End Sub

Welington Gonçalves

 
Postado : 17/07/2016 8:14 am
(@mprudencio)
Posts: 2749
Famed Member
 

Vc precisa fazer uma busca no banco de dados antes de gravar cada registro.

Qual seria a item que serve no excel como chave primaria, ou seja, que não se repete de forma alguma, use esse item para pesquisar no acess antes de gravar.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 17/07/2016 9:57 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

MPrudencio

Minha Chave seria o "Lote"

Welington Gonçalves

 
Postado : 17/07/2016 10:05 am
(@mprudencio)
Posts: 2749
Famed Member
 

Entao pesquise pelo lote antes de gravar...

A pesquisa seria mais ou menos assim


Sub Pesquisa ()

Dim lote as string
dim linha as longe

linha = 2
lote = cells(linha,1).value


do while cells(linha,1).value <> ""



if cells(linha,1).value = lote then

linha = linha + 1

else

macro de gravar o registro

end if

loop


end sub

A macro nao esta completa, mas é esse o caminho, ajuste conforme sua necessidade.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 17/07/2016 10:39 am
wfranca
(@wfranca)
Posts: 297
Reputable Member
Topic starter
 

M Prudencio, eu uso banco de dados no Access.... acho q deveria ser uma SQL .

Welington Gonçalves

 
Postado : 19/07/2016 6:35 pm