Vincular uma tabela para cada destino com VBA
Registrado : 30/12/2019
bondan 30/12/2019, 21:57
Vi muitos posts e exemplos de vinculação de tabelas ao iniciar, para dois bancos etc, mas nada encaixou no que eu necessito eu que eu consiga fazer ou adaptar.
Aqui tenho um sistema que busca dados de 4 computadores diferentes e mais um servidor com back-end, e ainda algumas estações possuem um banco na própria máquina, com informações específicas locais dela.
Costumo ao atualizar o sistema, trocar o Front em todas e em cada uma, em cada vez "vincular as tabelas individualmente conforme a necessidade daquela estação", é muito chato.
Pensei em fazer algo que necessito dos experientes, pois não faço idéia de como fazer...
Um arquivo.ini chamado "vinculos.ini" onde deixo setado todos vínculos das tabelas, de cada tabela daquela estação, e ao abrir o sistema ele busque este arquivo local. Se surgir uma nova tabela à vincular, só adiciono no .ini
Desta forma eu atualizaria normalmente trocando o Front-end e independente de como funcione aquela estação, ela sairia vinculando as tabelas conforme o arquivo "vinculos.ini" fixo da estação.
Pensei anteriormente em fixar campos, criar uma tabela, mas não dá, sempre teria que fazer algo mais ao atualizar o front-end. Tem que ser um outro arquivo externo fixo com a configuração daquela estação.
- Estação 01 à 04 buscam informações entre si num sistema terceiro também access, mas vinculam dados lançados no back-end no servidor.
- Estação 05 e 06 buscam as mesmas informações anteriores, mais algumas em um banco local delas, e também vinculam o back-end.
- Demais estações trabalham somente no back-end.
Tem solução isso ou vou ter de criar tabelas diferentes dentro do mesmo banco e mudar toda programação?
Re: Vincular uma tabela para cada destino com VBA
ahteixeira 31/12/2019, 10:59
Olá Jalmar, seja bem-vindo ao fórum.
Apesar de ter várias máquinas os dados (Back end) deveriam estar todos num servidor com partilha.
Assim fica fácil ligar (vincular) a qualquer Back end e trabalhar conforme pretendido, pois pode estar vinculado a todas as origens mesmo que tenha o mesmo nome da tabela e no vínculo dá o nome a identificar.
Em tempo fiz um exemplo , veja se ajuda nesta situação como outra solução:
https://www.maximoaccess.com/t27608-exemplo-de-sistema-multi-empresa
bondan 31/12/2019, 11:31
Obrigado ahteixeira, mas vejo que o caso é um pouco diferente.
Necessito que o mesmo front faça tabelas vinculadas com até 6 locais diferentes, dependendo da estação, tabelas apontando para bancos diferentes, e neste seu exemplo mudamos o banco de um vínculo apenas, onde todas tabelas apontariam para o mesmo banco.
O Cenário é assim para duas estações, por exemplo:
Tabela 1 --> Banco 1 (Sistema terceiro - \\est01\sistema-terceiro\banco.mdb)
Tabela 2 --> Banco 2 (Sistema terceiro - \\est02\sistema-terceiro\banco.mdb)
Tabela 3 --> Banco 3 (Sistema terceiro - \\est03\sistema-terceiro\banco.mdb)
Tabela 4 --> Banco 4 (Sistema terceiro - \\est04\sistema-terceiro\banco.mdb)
Tabela 5 --> Banco Back-end (Registros Gerais)
Tabela 6 --> Banco Local (Banco com registros que se aplicam somente àquela estação)
Obs: Estes sistemas terceiros funcionam em máquinas separadas pois são leitores de portas seriais, não tem como unificar e sem suporte.
Então quando atualizo o sistema, tenho que trocar o Front e vincular as tabelas conforme o uso daquela estação, em cada uma das 12 estações, todas vezes...
Por isso melhor seria setar um arquivo externo com as informações de vínculos por tabela, onde o front pegaria o caminho da tabela específica e vincularias as tabelas individualmente ao abrir, só isso.
Só isso no resultado final, mas a programação...
Por exemplo no arquivo .ini:
Caminho="\\est01\sistema-terceiro\banco.mdb"
Caminho="\\est02\sistema-terceiro\banco.mdb"
Caminho="\\est03\sistema-terceiro\banco.mdb"
Caminho="\\est04\sistema-terceiro\banco.mdb"
[Tabela 5]
Caminho="\\servidor\sistema\banco.mdb"
[Tabela 6]
Caminho="C:\sistema\banco.mdb"
ahteixeira 31/12/2019, 14:13
Olá Jalmar,
Compreendo o que explicou, agora se cada posto tiver a pasta das base de dados partilhadas na rede, pode ter uma base de dados no seu posto que ligue as tabelas necessárias a cada PC da rede.
Se não estiver em rede, a questão passa a ser outra.
Creio que faz essas ligacões para exportar dados ou sincronizar.
Já pensou em ter um modulo no aplicativo (ate pode ser automatizado) que efetue a exportacao dos dados para uma tabela em BackEnd se tiver rede ou caso não tenha envie por email ou FTP.
Se tiver todos os PC em rede , não percebi onde está a dificuldade.
bondan 2/1/2020, 12:42
Obrigado amigo, mas não creio que unificar ajude, assim como automatizar importação que não vem ao caso.
A dificuldade é que tem a tabela com o mesmo nome "Tabela1" na estação 01, 02, 03, 04... Com dados diferentes.
As "tabelas" tem de ser vinculadas ao banco em rede ou local correto, de acordo com a utilização daquela estação, pois à pesar de ter a "mesma programação e tabelas", busca informações em locais diferentes conforme estação através de "tabela vinculada".
Então ao atualizar um front-end, que possui a "mesma programação e tabelas em todos", tenho que vincular manualmente o apontamento das tabelas para o local correto, em cada estação, em cada tabela, pois cada estação tem e busca dados diferentes.
Por isso abri o tópico, para ver se alcançamos algo externo como um arquivo .ini com a configuração de caminhos fixo daquela estação, para trocar normalmente o front-end independente da sua função, pois o front-end buscaria sempre os vínculos de um arquivo externo fixo daquela estação, não necessitando vincular tabelas individualmente todas as vezes.
Outra solução seria vincular ao usuário logado os caminhos de vínculo de tabela, também é solução, mas tem de vincular cada tabela existente conforme a necessidade daquele usuário, e não buscar tudo de um ou outro banco, mas sim cada tabela individualmente.
Consegue ajudar desta forma ou alguém mais?
ahteixeira 3/1/2020, 22:30
Para ler .ini veja este topico.
https://www.maximoaccess.com/t24042-resolvidoaplicativo-procura-local-do-db-em-arquivo-ini
Para ler um .txt não falta exemplos no forum, veja como fazer uma "Busca":
Não respondeu se os computadores estão todos na mesma rede, caso afirmativo, tambem pode ter uma tabela na rede com os caminhos de cada posto.
bondan 4/1/2020, 11:54
Obrigado ahteixeira, foi útil a informação... Vou trabalhar ela e ver o que consigo.
DamascenoJr. 3/6/2020, 21:39
bondan, algum avanço?
tauron 4/6/2020, 00:37
Lembre-se de alterar o caminho no modulo.
LocaisBE.zip
(841 Kb) Baixado 8 vez(es)
tauron 16/6/2020, 16:49
Aproveitando a oportunidade, surgiu-me uma duvida:
Com este código consigo vincular um formulário, seja no vba do formulário (Private) ou em um modulo geral (Public) a uma tabela.
strSql = "SELECT campo1, campo2, campo3 FROM tblminha ORDER BY campo;"
Set bd = OpenDatabase("local do back End", False, False, ";PWD=senha")
Set rs = bd.OpenRecordset(strSql, dbOpenSnapshot)
Forms!frmMeuFormulario!camponoformulario.AddItem rs!campo1 & ";" & rs!campo2 & ";" & rs!campo3
Como ficaria o código acima, caso eu necessite de vincular vários formulários a uma única Tabela, através de um módulo geral.