Salvar base de dados do excel no access - Microsoft Office - Clube do Hardware
Por Fernando.Igor, 1 de junho de 2016 em Microsoft Office
Estou querendo saber como salvar uma base de dados (uma aba simples com X colunas e Y linhas) em um arquivo access com uma macro.
A ideia é que a partir de um start qualquer, a macro pegue os dados no excel e "cole" no access.
Um colega já me ajudou a fazer algo parecido, mas salvando apenas uma linha. O código é:
Rst.Open "Delete * FROM Chave", Conexao, adOpenKeyset, adLockOptimistic, adCmdText
Rst.Open "SELECT * FROM Chave", Conexao, adOpenKeyset, adLockOptimistic, adCmdText
.Fields("Aberto/Fechado") = "1"
.Fields("Usuário") = Plan9.Range("as5")
.Fields("Horário de Abertura") = Plan9.Range("as7")
.Fields("Versão") = Plan9.Range("av3")
Mas agora queria fazer com uma quantidade maior de dados (mais linhas) de uma só vez.
Ainda tem o detalhe que o número de linhas é variável e tende a aumentar. Além disso, o arquivo vai sempre "colar por cima" no access.
Sou até mais ou menos com programação no excel, mas essa integração com o access estou começando agora.
Desde já, agradeço! Abs!!!
Posso dizer q se você fizer isso a partir do access será mais fácil e possivelmente sem necessidade de macro.
Como assim, @DJunqueira ? Não entendi.
Preciso que terceiros insiram dados em um excel e a partir de um start (acho que quando fechar o excel ou algum botão) os dados sejam salvos no access.
Como fazer isso "a partir do access"?
você poderia fazer com q os terceiros entrassem com os dados direto no Access, no final das contas foi p/ isso q ele foi projetado. No Excel você deveria apenas analisar as informações produzidas pelos dados inseridos no Access.
O Access é muito melhor p/ projetar telas de entradas de dados e pode trabalhar em multitarefa, ou seja várias pessoas entrando dados ao mesmo tempo. A muito tempo atrás eu programei em Access, agora estou enferrujado, mas qq bom programador em Access faz o q você quer com um pé nas costas.
Entendi. Nunca tinha pensado nisso. Vou analisar a viabilidade dessa alteração.
O problema que o arquivo (excel) em questão já é usado há um bom tempo para lançamento de informações. E, quando o arquivo é fechado, ele já salva a base em txt. O que queria alterar era isso, ao invés de salvar em txt, salvar em um arquivo do access.
Mas de qualquer forma, obrigado pela dica. Será bastante útil em outras situações. Abs!
Se você optar pela solução Access e os pc estiverem em rede você estaria sempre inserindo os dados direto na base de dados do Access, não haveria preocupação em salvar nada.
Uma só base em tempo real.
Um vídeo interessante s/ como você pode conectar uma planilha Excel com um banco de dados Access.
Mas no caso de inserção direto no Access seria necessário que todos os usuários tivessem access, né?
porque no caso que citei na primeira pergunta, mesmo usuários sem access conseguem conectar no arquivo e fazer a alteração.
Aqui nem todos possuem access e eu nem sei se faz parte do pacote simples do office. E o arquivo também não ficará na rede, mas esse nem seria um problema nesse caso.
Outra pergunta: No caso de um formulário do access, ele executa cálculos? Por exemplo, campo A com valores, outro campo B com valores e um campo C que seria a "soma do total"? Ou seria necessário inserir somente os valores e realizar o cálculo à parte?
A muitos anos atrás, quando eu programava em Access...
Eu montava um pequeno executável q servia p/ entrada de dados e conectava em rede com a base de dados central, isto só pode ter melhorado.
Os formulários do Access são o q há de melhor p/ entrada de dados, você pode fazer qq coisa com eles. 1000 a 0 no Excel.
O ideal é você entregar suas planilhas p/ um bom programador em Access e pedir p/ ele automatizar tudo pelo Access. Obviamente retire qq informação sensível.
Esse executável era tipo pequenas janelas que se abriam só com formulário? Sem os painéis de ferramentas do access?
beleza! Vou formatar depois um arquivo e ver se consigo ajuda... valeu!
@Fernando.Igor
Baixe o este exemplo e veja se consegue adaptar.
Enviar Dado Access.zip
@Basole , dei uma olhada aqui. A ideia é bem essa mesmo.
O código deu um erro na hora de abrir a conexão (cn.Open strCon). Tentei alguns ajustes, mas nada. No entanto não tem problema. Posso solucionar isso depois.
Fiquei interessado mesmo nada parte que insere os dados. Vi que os códigos são parecidos com o que eu mostrei na minha primeira pergunta. Mas o seu sempre adiciona em uma linha abaixo no access, né?
E vi também que você usa um Loop. No arquivo exemplo que você mandou deve ser rápido. Mas se tiver umas 10 mil linhas você acha que vai demorar muito?
2 horas atrás, Fernando.Igor disse:
O código deu um erro na hora de abrir a conexão (cn.Open strCon). Tentei alguns ajustes, mas nada
- Qual erro que a presentou ?
- Depende muito do equipamento e da conexao(* se o BD na rede), mas 10 mil, demorará em torno de 10 segundos. é vapt-vupt.
Era um "Erro inesperado". Tinha um código, mas eu não anotei. Mas agora cedo rodou de boa. Deu super certo, era isso mesmo!
Entendi. Rodei aqui com 10 mil linhas e demorou um pouco mais, mas ainda é um tempo aceitável. Estava com medo de ser minutos.
Agora que eu terei a base no Access, você saberia me dizer como eu executo uma consulta. Estou pensando em deixar o critérios definidos, mas preciso executar sempre que a base for atualizada. Na verdade se fosse possível inclusive alterar os critérios por macro seria melhor ainda!
Outra coisa, @Basole : Como alternativa para o problema inicial, eu vi que tem como deixar uma tabela no access vinculada a uma planilha de excel. Isso aparentemente resolveria meu problema tb, mas eu precisaria a partir do excel sempre atualizar essa tabela do access. Você sabe como eu poderia fazer isso? Quais dessas duas alternativas você acha melhor?
@Fernando.Igor nao sei se reparou, na aba Plan1, tem um botao chamado Consulta que é um exemplo de consulta pelo nome e tambem uma consulta pela cidade que é feito em uma outra tabela do access. Este é so um exemplo, mas pode-se incrementar com outros criterios incluindo outros campos e etc.
Eu nunca utilizei a vinculacao do access com o excel, então nao posso disser sobre o desempenho e funcionamento. Sempre procuro fazer este vinculo atraves de uma conexao ado ou dao (vba.)
O que pode-se fazer na sua planilha é deixar a atualizacao automatica, ou seja, ao alterar um dado em um intervalo determinado no excel, atualiza os dados na respectiva tabela, automatico no access.
19 minutos atrás, Basole disse:
É vdd, @Basole tinha reparado por alto somente. Vou dar uma olhada aqui. Mas esse sentido de "consulta" é mais tipo "resgatar a informação que está no access", "fazer o caminho inverso", né? Esse tipo de conhecimento também me interessa e vou dar uma pesquisada.
Mas quando disse "executar uma consulta" estava me referindo àquelas Consultas que aparecem no painel à esquerda no access, embaixo das Tabelas. Pelo que eu entendi, aquilo são Consultas já pré-configuradas, certo? Que eu preencho com os critérios e campos desejado e executo. Pelo que eu entendi então é tipo uma rotina de filtrar uma base (ou excluir, add etc). Era executar essas Consultas que eu estava me referindo... queria saber se existe algum código simples que as execute.
Não sei se eu estou viajando e no fundo são as mesmas coisas, mas tenho impressão que com essas Consultas configuradas eu não precisaria escrever os parâmetros no código. No entanto seria uma Consulta "fixa" e caso se quisesse mudar talvez daria a mesma coisa...
30 minutos atrás, Basole disse:
Entendi... estava realmente pensando em deixar essa vinculação. O problema que é uma pasta compartilhada na nuvem, então acho que o vínculo vai dar problema, porque quando eu fizer, o path do arquivo vai ser [...]\Fernando\[...] e depois que outro usuário atualizar o path já vai ser outro e penso que pode dar problema por causa disso.
Mas vou analisando aqui.. fazia muito tempo que não mexia com access (e quando mexia tb não fazia qse nada). É uma ferramenta muito completa, mas também muito complexa no início.
Tem um tutorial interessante sobre consulta (query em inglês) no vídeo abaixo. Ainda q o vídeo seja em inglês as imagens falam por si só.