PDA

Vollständige Version anzeigen : wie stelle ich fest wo Access auf der HD liegt?


MLeefers
20.11.2003, 14:52
Hallo Leute,

ich müßte VBA-Technisch (eigentlich in VB6) herausfinden wo Access installiert ist. Wo der Schlüßel in der Reg liegt weiß ich wohl. Nur kann man den ja nicht so einfach auslesen, oder? Gibt es da was Simples?

Michael

CptChaos
20.11.2003, 15:01
Über Reg.exe (ist im Windows Resource Kit enthalten) kannst Du Registry-Keys an der Command-Line auslesen.

Ob es direkt über VB geht, weiss ich nicht!

myrix
20.11.2003, 15:14
Hiermit bekommt man raus, wo die exe von Access ist:

debug.Print syscmd(acSysCmdAccessDir)
oder
msgbox syscmd(acSysCmdAccessDir)

:D

CptChaos
20.11.2003, 15:20
@myrix
IMHO aber nur unter Access selbst.

Wenn ich Michael richtig verstanden habe, braucht er es aber ausserhalb von Access (VB6)

MLeefers
20.11.2003, 15:29
Also erstmal Danke für die super schnellen Antworten.

@ CptChaos Es funzt unter VB6

@ myrix
Ein Problem tritt auf wenn auf dem Rechner mehrere Accessversionen installiert sind.
Auf meinem HauptPC (WinXP) ist nur AX installiert: Wunderbar funzt prächtig.

Auf TestPc (Win98) mit A97, A2000 und AX: Wenn ich den Befehl aufrufe, kommt der Installer von A2000 hoch (ausser es ist das letzte mal A2000 benutzt worden) und er gibt den Pfad von A2000 aus.

Sehr seltsames Verhalten.

Michael

Sascha Trowitzsch
20.11.2003, 16:37
In diesem Fall muss du die einzelnen Access-Versionen als Objekt erstellen und testen, ob's geht - wenn du nicht die Registry auslesen willst, was ebenfalls ohne Probleme ginge.

Z.B.:

Dim accobj As Object

On Error Resume next
Set accobj = CreateObject("Access.Application.8")
If Err.Number = 0 Then
Msgbox "Pfad Access97: " & accobj.SysCmd(acSysCmdAccessDir)
accobj.Quit
End if
Err.Clear
Set accobj = CreateObject("Access.Application.9")
If Err.Number = 0 Then
Msgbox "Pfad Access2000: " & accobj.SysCmd(acSysCmdAccessDir)
accobj.Quit
End if
Err.Clear
Set accobj = CreateObject("Access.Application.10")
If Err.Number = 0 Then
Msgbox "Pfad AccessXP: " & accobj.SysCmd(acSysCmdAccessDir)
accobj.Quit
End if

Set accObj = Nothing


Ciao, Sascha

MLeefers
21.11.2003, 07:13
Danke Sascha,

funktioniert aber leider nicht ganz. Wenn ich deinen Code auf meinen Testrechner loslasse zeigt er mir einmal den Pfad von A97 an und 2x den von A2000. :(
Um ein wenig präziser zu werden. Ich muß nur den Pfad von AX kennen, die anderen intressieren mich nicht. Evtl. ist der Ansatz über die Registry zu lösen, habe aber keinen Plan wie das geht.

Grüße aus Osnabrück
Michael

CptChaos
21.11.2003, 08:08
Dann lies Dir doch mit dem Code von Sascha den Pfad für AccXP aus und gib den zurück, oder hab ich irgend einen Haken übersehen?

MLeefers
21.11.2003, 08:45
@CptChaos Selbst wenn ich nur den Code-Teil für AX nehme zeigt er mir den Pfad von A2000 an. Achja, der Installer von A2000 kommt dabei auch wieder hoch.

Its not a Bug, its a Feature
Michael

Sascha Trowitzsch
21.11.2003, 10:51
Bei mir funktioniert der Code ohne dass der Installer anspringt.
Das stimmt bei deiner Installation was nicht.

Den Pfad zum "aktuellen" Access (also wohl XP) findest du in der Registry unter
HKEY_CLASSES_ROOT\CLSID\{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}\LocalServer32\(Standard)

Zum Auslesen der Registry gibt es im Forum diverse Code-Beispiele.

Ciao, Sascha

MLeefers
21.11.2003, 12:46
Da bin ich wieder.

Ich habe das Problem mit Hilfe dieses Links (http://www.vbarchiv.net/archiv/tipp_details.php?pid=721) gelöst.
Den Pfad habe ich auf "SOFTWARE\Microsoft\Office\10.0\Access\InstallRoot" geändert.

Danke für eure Unterstützung
Michael