Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Consultar registros no Access e se não encontrar, adicioná-los
-
- 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
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.
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.
Re: Consultar registros no Access e se não encontrar, adicioná-los
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
viewtopic.php?f=22&t=7646
-
- 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
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.
Re: Consultar registros no Access e se não encontrar, adicioná-los
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.
-
- 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
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