PDA

Vollständige Version anzeigen : A97: Setzen von Verweisen via VBA


ARunow98
27.10.2003, 13:25
Hi!

Ich habe folgendes Problem:
Durch den Austausch einer MS Access 97-Datenbank vom Laptop auf einen "veralteten" WinNT-PC muss ich jedesmal beim Aufruf der DB unter WinNT die Verweise neu setzen, da er natürlich nicht über den Stand der Objektbibliotheken wie mein neuer Laptop mit Office XP verfügt.
Meine Frage: Die Bezeichnungen der Verweise sind mir bekannt, kann ich irgendwie die Verweise via VBA beim Starten der DB setzen, um mir dieses lästige manuelle Setzen zu ersparen?

Danke für Eure Hilfe!
Alex

Kevin
27.10.2003, 13:43
Hi,

ich weiß nicht ob es mit dem setzen auch klappt, aber zum auslesen benutze ich es so

Dim r As Reference
for each r in Application.References
xxx=r.Name
xxx=r.FullPath
xxx= r.IsBroken
next r

denke mal Du musst es so machen

Set r = References.AddFromFile(strDateiname)


Schreib mal bitte rein ob klappt.
Gruß Kevin

TommyK
27.10.2003, 13:48
Hallo Alex,

von meiner HP kannst Du Dir eine DB laden, die vorhandene Verweise ermittelt, Verweise löscht bzw. neu setzt.

Download hier: http://tommyk.bei.t-online.de/AccDL/tk_Verweise_extern_97.zip

ARunow98
27.10.2003, 14:12
Das hilft mir leider noch nicht so wirklich weiter, da ich bei Deiner Fassung das Setzen neuer Referenzen nur über Dateien realisieren kann, ich aber doch keine Ahnung habe, welcher Verweis sich in welcher lokalen Datei befindet!?! :-(

Fällt Dir noch eine andere Lösung ein?

Danke,
Alex

Kevin
27.10.2003, 14:15
Schau Dir doch einfach mal den orginal Verweis an, da steht welche Datei das ist.

Sascha Trowitzsch
27.10.2003, 16:49
Um das Problem mit den Dateinamen von Verweisen zu umgehen gibt es ja auch noch die Funktion References.AddFromGUID , die sowieso dem AddFromFile vorzuziehen ist.
Hier mal ein kompletter Code, wie man die Verweise in eine Datei speichern kann, die man der DB mitgibt (gleiches Verzeichnis!) und mittels derer man dann beim Start die Verweise wieder setzen kann:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Compare</span> <span class="TOKEN">Database</span>
<span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
&nbsp;
<span class="REM">'Verweise in INI-Datei speichern</span>
<span class="TOKEN">Sub</span> SaveReferences()
<span class="TOKEN">Dim</span> ref <span class="TOKEN">As</span> Reference, sPath <span class="TOKEN">As</span> String, sFile
&nbsp;
<span class="TOKEN">On Error GoTo</span> Fehler
&nbsp;
sPath = CurrentDb.Name
sFile = Dir(sPath)
sFile = Left(sPath, Len(sPath) - Len(sFile))
sFile = sFile &amp; Left(Dir(sPath), Len(Dir(sPath)) - 4) &amp; &quot;_references.ini&quot;
<span class="TOKEN">Open</span> sFile <span class="TOKEN">For</span> <span class="TOKEN">Output</span> <span class="TOKEN">As</span> #1
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> ref <span class="TOKEN">In</span> Application.References
<span class="TOKEN">Write</span> #1, ref.Name, ref.FullPath, ref.Guid, ref.Major, ref.Minor
<span class="TOKEN">Next</span> ref
<span class="TOKEN">Close</span> #1
&nbsp;
Ende:
Reset
<span class="TOKEN">Exit Sub</span>
&nbsp;
Fehler:
MsgBox Err.Description
<span class="TOKEN">Resume</span> Ende
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span><hr>&nbsp;
<span class="REM">'Verweise aus INI-Datei lesen und setzen</span>
<span class="TOKEN">Sub</span> ReadAndSetReferences()
<span class="TOKEN">Dim</span> sPath <span class="TOKEN">As</span> String, strFile
<span class="TOKEN">Dim</span> sName <span class="TOKEN">As</span> String, sFile <span class="TOKEN">As</span> String, sGUID <span class="TOKEN">As</span> String, lMajor <span class="TOKEN">As</span> Long, lMinor <span class="TOKEN">As</span> <span class="TOKEN">Long</span>
&nbsp;
<span class="TOKEN">On Error GoTo</span> Fehler
&nbsp;
sPath = CurrentDb.Name
strFile = Dir(sPath)
strFile = Left(sPath, Len(sPath) - Len(strFile))
strFile = strFile &amp; Left(Dir(sPath), Len(Dir(sPath)) - 4) &amp; &quot;_references.ini&quot;
<span class="TOKEN">Open</span> strFile <span class="TOKEN">For</span> <span class="TOKEN">Input</span> <span class="TOKEN">As</span> #1
<span class="TOKEN">Do</span> <span class="TOKEN">While</span> <span class="TOKEN">Not</span> EOF(1)
<span class="TOKEN">Input</span> #1, sName, sFile, sGUID, lMajor, lMinor
Select Case sName
Case &quot;Access&quot;, &quot;VBA&quot;, &quot;stdole&quot;
<span class="TOKEN">Case Else</span>
<span class="TOKEN">If</span> sGUID = &quot;&quot; <span class="TOKEN">Then</span>
References.AddFromFile sFile
<span class="TOKEN">Else</span>
References.AddFromGuid sGUID, lMajor, lMinor
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> Select
<span class="TOKEN">Loop</span>
<span class="TOKEN">Close</span> #1
&nbsp;
Ende:
Reset
<span class="TOKEN">Exit Sub</span>
&nbsp;
Fehler:
<span class="TOKEN">If</span> Err.Number = 32813 <span class="TOKEN">Then</span> <span class="TOKEN">Resume</span> <span class="TOKEN">Next</span> <span class="REM">'Reference existiert bereits</span>
MsgBox Err.Description
<span class="TOKEN">Resume</span> Ende
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span><hr>&nbsp;
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Evtl. kann man an den Schluss des ReadAndSetReferences noch folgenden Code setzen:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre> <span class="TOKEN">If</span> <span class="TOKEN">Not</span> SysCmd(acSysCmdRuntime) <span class="TOKEN">Then</span>
DoCmd.RunCommand acCmdCompileAndSaveAllModules
<span class="TOKEN">End</span> <span class="TOKEN">If</span></pre></div>


Ciao, Sascha

ARunow98
29.10.2003, 16:14
Danke für die Tipps!
Das mit dem Exportieren in ein .ini-File klappt leider nur eingeschränkt:
bei den Bibliotheken für Excel, Office und DAO gelingt der Import, bei "Word" bekomme ich die Fehlermeldung: "Objektbibliothek nicht registriert!". Hat jemand eine Ahnung, woran das liegen könnte? Muss der Import vielleicht in einer bestimmten Reihenfolge erfolgen? oder muss "Word" separat nach den anderen Bibliotheken gesetzt werden?

Danke für Eure Hilfe!
Alex