[access/vba] linkinformatie tabellen runtime bijwerken*

Pagina: 1
Acties:

  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 15:09

hufkes

nee, daar staat niet hufter!

Topicstarter
Beetje onduidelijke titel, maar ik heb een simpel access programma-tje gemaakt dat foolproof moet worden. Keurig gesplitse tabellen met verwijzingen die naar een BE op de server verwijzen. Nou moeten er meerdere gebruikers via het netwerk bij dezelfde gegevens komen, maar het probleem is dat de url naar de gesharede map voor de gebruikers verschillend is.

Vraag me niet waarom, maar sommige gebruikers krijgen de p-schijf toegedeeld drie directories dieper gelinkt dan andere gebruiker.

Dus de één heeft als link

p:\public\dir1\dir2\dir3\administratie\dbasenaam.mdb

en de volgende heeft

p:\dir3\administratie\dbasenaam.mdb

en een derde heeft het weer anders.

Ze gebruiker wel allemaal dezelfde frontend die in die map staat, maar deze kan dus bij de een wel de gelinkte tabellen vinden en bij de volgende niet omdat de link naar de tabellen hard gecodeerd worden.

Hoe kan ik ze nu in godsnaam dynamisch laten bijwerken?

Ik weet dat ik met tdf.RefreshLink de boel opnieuw kan instellen, en als ik dan een geen error krijg dat het dan goed is.
Krijg ik wel een error kan ik die afvangen en weet je dat de boel dus niet goed gelinkt is, maar dan wil ik dus een schermpje laten openen waarmee ze naar de juiste database kunnen bladeren.

Rara hoe krijg ik dat laatste stuk voor elkaar?

Verder heb ik nu dus die tdf.refreshlink in een module gezet die ik middels een macro genaamd AutoExec aanroep. Hij roept hem ook wel aan, maar helaas geeft hij ook vóór die aanroep de gebruiker een foutmelding. Iemand ook nog enig idee hoe ik die kan afvangen?

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:19
Zoek eens op file dialog. Dat is een VBA property waarmee je de authentieke office "open file", "open dir" etc. oproept en de gekozen bestandsnamen terugkrijgt. Wel even help doorlezen, zit enigszins contraintiutief in elkaar.

  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 15:09

hufkes

nee, daar staat niet hufter!

Topicstarter
Heb nu een stuk met GetOpenFileNameA, daarmee lukt het wel een bestand aan te wijzen.
Blijven er drie vragen over:
1. Hoe kan ik er voor zorgen dat niet eerst een foutmelding gegevevn wordt maar mijn eigen functie wordt aangeroepen.
2. Hoe zorg ik dat de links nadat de gebruiker het bestand heeft aangegeven ook daadwerkelijk met dat bestand worden gekoppeld, het lijkt er op dat hij nu steeds maar met de oude waarden loopt te klooien en niet de nieuwe bestandsnaam overneemt.
3. Hoe zorg ik er voor dat ik de directorynaam van de huidige locatie van de FE, oftewel daar waarvan de gebruiker hem heeft opgestart uit kan lezen, dan kan ik die namelijk als begindirectory voor de filedialoog gebruiken.

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 23:19
1:
Visual Basic:
1
2
3
4
5
6
7
8
9
Sub vanjou()
On Error Goto foutje
weerterug:
je code die fout kan gaan
exit sub
foutje:
aanroep van je functie
goto weerterug 'optioneel
end sub

[ Voor 4% gewijzigd door onkl op 12-02-2006 20:41 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 22:38

Boss

+1 Overgewaardeerd

Bij het openen van de database eerst met code laten controleren of de links van de tabellen (je hoeft er maar 1 te controleren natuurlijk) kloppen. Zo nee: met file-dialog een nieuwe laten zoeken.

Links uitlezen / schrijven?
CurrentDB.Tables("tabelnaam).connect of connection, weet ik even niet uit mijn hoofd. Dat is een standaard connectionstring die je maar even een keer moet uitlezen bij een goed gekoppelde tabel en daarna naar wens aanpassen.

Even heel kort en niet volledig, als je er nog niet uitkomt kan ik morgen of dinsdag wel even verder kijken, dan heb ik wat meer tijd.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

hufkes schreef op zondag 12 februari 2006 @ 19:16:
[...]
Ze gebruiker wel allemaal dezelfde frontend die in die map staat, maar deze kan dus bij de een wel de gelinkte tabellen vinden en bij de volgende niet omdat de link naar de tabellen hard gecodeerd worden.
[...]
Begrijp ik goed dat je één frontend hebt die ook op een netwerkshare staat? In dat geval is dit een recept voor rampen, als de ene gebruiker de linkinformatie gaat wijzigen terwijl een andere gebruiker de database al open heeft. Zet de frontends lokaal.

Afaik staat er in een van de voorbeelddatabases 'noordenwind'/'antwoorden voor ontwikkelaars' een uitgewerkt voorbeeld om de connectiestring run-time aan te passen. De link wordt daarin gecontroleerd door domweg een gekoppelde tabel proberen te openen. Als dat een fout oplevert, nieuwe connectionstring toewijzen en refresh toepassen.

Als Access al begint met foutmeldingen wordt er blijkbaar direct een formulier geopend gebaseerd op een tabel. Dat kun je ondervangen door een onafhankelijk opstartforumlier te maken dat eerst de tabellen controleert, de linkinformatie hersteld en vervolgens je hoofdformulier opent. Heb je ook die lelijke autoexec macro niet nodig ;)


offtopic:
je titel paste niet helemaal :)

[ Voor 6% gewijzigd door Lustucru op 12-02-2006 21:42 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • hufkes
  • Registratie: Maart 2000
  • Laatst online: 15:09

hufkes

nee, daar staat niet hufter!

Topicstarter
Niesje schreef op zondag 12 februari 2006 @ 21:39:
[...]

Begrijp ik goed dat je één frontend hebt die ook op een netwerkshare staat? In dat geval is dit een recept voor rampen, als de ene gebruiker de linkinformatie gaat wijzigen terwijl een andere gebruiker de database al open heeft. Zet de frontends lokaal.
Goeie tip, in eerste gedachte zou er niets mis mee zijn, maar wanneer je de links zelf gaat zitten aanpassen natuurlijk wel.. Dat wordt een dus werken met een batchbestandje dat de FE naar lokaal of userdir kopieert.
Afaik staat er in een van de voorbeelddatabases 'noordenwind'/'antwoorden voor ontwikkelaars' een uitgewerkt voorbeeld om de connectiestring run-time aan te passen. De link wordt daarin gecontroleerd door domweg een gekoppelde tabel proberen te openen. Als dat een fout oplevert, nieuwe connectionstring toewijzen en refresh toepassen.
aha, had wel op msdn gezocht en uiteraard hier, maar de northwind niet bij mijn zoekacties betrokken... 8)7
Als Access al begint met foutmeldingen wordt er blijkbaar direct een formulier geopend gebaseerd op een tabel. Dat kun je ondervangen door een onafhankelijk opstartforumlier te maken dat eerst de tabellen controleert, de linkinformatie hersteld en vervolgens je hoofdformulier opent. Heb je ook die lelijke autoexec macro niet nodig ;)
En weer een goeie tip (als hij werkt in ieder geval, zat me al zeer zwaar af te vragen waarom de autoexec niet éérst uitgevoerd werd...
Maar dat wordt dus een mooi welkomst-opstart-copyrightschermpje :)
offtopic:
je titel paste niet helemaal :)
offtopic:
ik had het gezien na het posten, maar het was nog wel te begrijpen dus ik had er geen report van gemaakt... Overigens wel fijn dat je hem hebt veranderd, want ik heb ook een hekel aan mensen die hun zinnen niet af

Onderstaande signature is al >20jr oud ***hoe dan***
---
Het internet is een veelbelovend medium
....dat maar heel weinig van zijn beloftes nakomt.
Wat weg is... raak je nooit meer kwijt :P

Pagina: 1