Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Consultar registros no Access e se não encontrar, adicioná-los

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
leocesar@gmail.com
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Qui Set 12, 2019 9:03 am

Consultar registros no Access e se não encontrar, adicioná-los

Mensagem por leocesar@gmail.com »

Olá amigos,

Preciso de um apoio para resolver o meu problema.

Tenho um projeto em Excel (com um sistema de PDV) que usa banco de dados Access.
Já está todo pronto, com exceção de um detalhe:

Criei uma tabela a parte em Excel APENAS para atualizar preço de custo e venda das mercadorias.
Agora o que quero é:

1) Toda vez que eu atualizar um preço na planilha do Excel, este mesmo seja atualizado na tabela do Access (isso já consegui através da função SQL UPDATE)

2) No mesmo sub, caso a consulta identifique que tem algum produto na planilha do Excel que não está cadastrado na tabela do Access, ele insira um novo registro e salve os dados dos campos buscando os dados nas células da planilha do Excel (*** esta é a parte que estou quebrando a cabeça***).

Já tentei muita coisa, porém nada deu certo até aqui.

Era pra ser apenas uma consulta simples com a seguinte estrutura:

*Na planilha do excel:
Nome do produto = Arroz
Rotina faz a procura da palavra arroz no campo DESCRICAO na tabela do Access
Caso Arroz não esteja cadastrado na tabela do Access, então...

*No Access:
Inserir Arroz no campo DESCRIÇÃO
Inserir valor no campo VLR_VENDA
Inserir custo no campo VLR_CUSTO
Inserir categoria no campo CATEGORIA

E por aí vai...

Podem me auxiliar?

Sobre o banco de dados estou trabalhando com Access (arquivo mdb)
E a conexão com o banco de dados estou fazendo com ADO (não entendo muito de DAO)

Conto com o apoio dos senhores.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Consultar registros no Access e se não encontrar, adicioná-los

Mensagem por Raygsson »

Neste outro tópico dei um exemplo de como fazer uma conexão Excel/Access e um comando SELECT bem simples. Veja o que pode aproveitar no seu código.
viewtopic.php?f=22&t=7646


leocesar@gmail.com
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Qui Set 12, 2019 9:03 am

Re: Consultar registros no Access e se não encontrar, adicioná-los

Mensagem por leocesar@gmail.com »

Raygsson escreveu: Qui Set 03, 2020 6:08 pm Neste outro tópico dei um exemplo de como fazer uma conexão Excel/Access e um comando SELECT bem simples. Veja o que pode aproveitar no seu código.
viewtopic.php?f=22&t=7646

Olá Raygsson, obrigado meu amigo, mas infelizmente não consegui utilizar as informações deste outro tópico.

Explicando um pouco melhor, o que preciso, seria:

--> Toda vez que eu atualizar o preço de compra de um produto na planilha do Excel:

*Na planilha do excel:
Nome do produto = Arroz
Rotina faz a procura da palavra arroz no campo DESCRICAO na tabela do Access

1) Caso Arroz não esteja cadastrado na tabela do Access, então...

*No Access:
Inserir Arroz no campo DESCRIÇÃO
Inserir valor no campo VLR_VENDA
Inserir custo no campo VLR_CUSTO
Inserir categoria no campo CATEGORIA

2) Caso Arroz esteja cadastrado na tabela do Access, então...

* No Access:
Buscar o registro ARROZ no campo DESCRICAO da tabela produtos
Atualizar o valor no campo VLR_VENDA
Atualizar custo no campo VLR_CUSTO
Atualizar categoria no campo CATEGORIA

E por aí vai...

3) O código deverá continuar verificando todas as linha da minha planilha, exemplo:
De A2 até ultimalinha

E em seguida pesquisar todos os recordsets na tabela produtos do meu banco de dados e ir fazendo os INSERTS ou UPDATES conforme condições.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Consultar registros no Access e se não encontrar, adicioná-los

Mensagem por Raygsson »

Anexe os seus arquivos Excel/Access, pode retirar parte sensíveis se não puder compartilhar. Vou analisar o que tem. Posso lhe mostrar o caminho , você terá que codificar.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


leocesar@gmail.com
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Qui Set 12, 2019 9:03 am

Re: Consultar registros no Access e se não encontrar, adicioná-los

Mensagem por leocesar@gmail.com »

Raygsson escreveu: Sex Set 04, 2020 5:34 pm Anexe os seus arquivos Excel/Access, pode retirar parte sensíveis se não puder compartilhar. Vou analisar o que tem. Posso lhe mostrar o caminho , você terá que codificar.

Olá Raygsson, boa tarde!
Obrigado pelo apoio. Após incontáveis horas consegui encontrar uma solução (tinha compreendido incorretamente seu artigo, no fim deu um apoio sim).

Segue parte do código que eu estava em dúvida, para auxiliar outros que possam passar pela mesma situação.

Testei com um grupo pequeno de registros no banco de dados Access e na planilha Excel e funcionou perfeitamente, em breve já vou testar no banco de dados real que possui mais de 800 registros até o momento.

Caso alguém tenha alguma ideia de como melhorar o desempenho do código ou encontre possíveis erros, fique à vontade para sugerir edições/alterações.

Obs. Não consegui marcar o tópico como resolvido, caso algum moderador possa fazê-lo por mim ou indicar como fazê-lo, agradeço.

Código: Selecionar todos

Private Sub AtualizarValores_Click()

Application.ScreenUpdating = False
Application.EnableEvents = False

'Variaveis usadas

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQL As String

Dim W As Worksheet
Dim vBusca As String

Dim ulinha As Range

Dim vlrvenda As String
Dim vlrcompra As String
Dim vlrpromocao As String
Dim dataalteracao As String
Dim categoria As String
Dim ln As Long

Set cn = New ADODB.Connection

Set W = Sheets("Custos")


'Abrir a conexão com o banco
cn.Open ConectDB


    'Atualizar o banco de dados do Access
    '------------------------------------
           
    W.Range("B5").Select
    Set ulinha = W.Cells(W.Rows.Count, 1).End(xlUp)
    
    Do While ActiveCell.Row <= ulinha.Row
    
            
        'Adiciona valores às variáveis e busca no banco de dados
        '-------------------------------------------------------
        
        vBusca = W.Cells(ActiveCell.Row, 1).Value
        ln = ActiveCell.Row
        
        Set rs = New ADODB.Recordset
        rs.Open "SELECT * from [PRODUTOS] where DESCRICAO='" & vBusca & "'", cn, 3, 3
        
        vlrvenda = W.Cells(ln, 2).Value
        vlrcompra = W.Cells(ln, 3).Value
        vlrpromocao = W.Cells(ln, 4).Value
        categoria = W.Cells(ln, 5).Value
        dataalteracao = Date
            
        
        If vBusca <> rs!DESCRICAO Or rs.EOF = True Then
        rs.Close
        rs.Open "SELECT * from [PRODUTOS]", cn, 3, 3
        
        vBusca = W.Cells(ActiveCell.Row, 1).Value
        ln = ActiveCell.Row
        
        vlrvenda = W.Cells(ln, 2).Value
        vlrcompra = W.Cells(ln, 3).Value
        vlrpromocao = W.Cells(ln, 4).Value
        categoria = W.Cells(ln, 5).Value
        dataalteracao = Date

    
        With rs
        .AddNew
        .Fields("DESCRICAO") = vBusca
        .Fields("VLR_COMPRA") = vlrcompra
        .Fields("VLR_VENDA") = vlrvenda
        .Fields("VLR_PROMOCAO") = vlrpromocao
        .Fields("CATEGORIA") = categoria
        .Fields("DATA_ULT_COMPRA") = Date
        .Update
        End With
        
        ActiveCell.Offset(1, 0).Select
        rs.MoveNext
    
        ElseIf rs.EOF = False And vBusca = rs!DESCRICAO Then
    
   
        SQL = "UPDATE produtos set [VLR_VENDA]= '" & vlrvenda & "', [VLR_COMPRA]= '" & vlrcompra & "',[VLR_PROMOCAO]='" & vlrpromocao & "',  [Categoria]='" & categoria & "', [DATA_ULT_COMPRA] = '" & dataalteracao & "' where DESCRICAO='" & vBusca & "'"
        cn.Execute SQL
        
        ActiveCell.Offset(1, 0).Select
        
        rs.MoveNext
        
        
        Else
        End If
        
    Loop
    
    rs.Close
    cn.Close

Set W = Nothing
Set ulinha = Nothing

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder