PDA

Vollständige Version anzeigen : VBS: MDB-Datei öffnen (aufgeteilte DB)


Winter2
23.10.2005, 15:10
Hallo,

ich habe eine Access-Datenbank, die in Frontend und Backend aufgeteilt ist.
Das Frontend soll bei jedem Starten von einem Original kopiert werden und die Kopie dann gestartet werden (Hintergrund: damit sich das Frontend nicht immer weiter aufbläht und so die automatische Komprimierung umgangen werden kann, die nicht unproblematisch ist bzw. Zeit beansprucht).

Die erste Möglichkeit war eine Batch-Datei. Das geht recht einfach und funktioniert auch tadellos. Allerdings mit dem Schönheitsfehler, daß sich immer ein schwarzes Konsolenfenster öffnet, solange bis das Passwort eingegeben ist (erst dann ist das Öffnen der Datei offenbar abgeschlossen).
@echo off
copy original.mdb frontend.mdb /V/Y
start frontend.mdb

Die zweite Möglichkeit wäre, VBScript zu verwenden. Hier schaffe ich es nicht, die MDB-Datei zu öffnen - auf die internen Kommandos von CMD kann hier ja nicht zurückgegriffen werden. Die .Run-Methode öffnet ja nur ausführbare Dateien.
Access öffnen geht, aber wenn ich als Parameter die Datei übergeben möchte, bräuchte ich die absolute Pfadangabe zum aktuellen Verzeichnis, und ich weiß nicht, wie man diese absolut ermittelt.
Beispielcode:
' Dateien kopieren geht, ohne erste und vierte Zeile
'Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "original.mdb","frontend.mdb",true
'Set objFSO = nothing

' Access öffnen geht nicht, weil falscher Pfad
dim o
set o=createobject ("Access.Application")
o.opencurrentdatabase "frontend.mdb"

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "msaccess frontend.mdb"

Maxus
07.11.2005, 12:32
set wshell = CreateObject("Wscript.shell")
wshell.run "MSACCESS.EXE P:\AccessDB\Datenb~1\Umsatz~2.mdb"
set ws = CreateObject("Wscript.shell")


wscript.sleep 2000
ws.sendkeys("{F11}")
wscript.sleep 100


... so hab ich das gemacht funktioniert auch ganz gut. beim pfad auf die 8er dos konvension achten... also alles was länger als 6 zeichen hatt mit ~1 ausblenden. ich hoffe ich konnte dir helfen cu

n3mesis
07.11.2005, 16:24
wshell.run "MSACCESS.EXE P:\AccessDB\Datenb~1\Umsatz~2.mdb"

Bei dieser Zeile solltest du noch berücksichtigen, ob es sich um ein Netzlaufwerk handelt.

Hier ist die lange Pfadangabe die Sinnvollere.

Bspl:
statt 'P:\AccessDB\Datenb~1\Umsatz~2.mdb'
eher '\\Server10\Personal\AccessDB\Datenb~1\Umsatz~2.mdb'

Hier lag mein Steckenpferd :P

Gruß n3mesis

Maxus
07.11.2005, 17:20
warum sollte es bei deiner variante nicht zu problemen kommen ? nur so ne frage weil ich halt neugierig bin. funktionieren tut's bei mir 50 mal am tag immer wenn ich die Db öffen


p.s achso ja das ist ein netzlaufwerk

Winter2
10.12.2005, 18:10
Hallo,

das funktioniert (solange es keine ähnlich benannte Unterordner gibt), allerdings stört die absolute Pfadangabe - so ist das leider unbrauchbar, weil ich ja nicht weiß, wohin meine Anwender die Datenbank mal kopieren.
Gibt es vielleicht eine Möglichkeit, den aktuellen Pfad zu bestimmen, von dem ein Skript ausgeführt wird?

Welchen Sinn hat bei Dir das sleep und sendkeys?

Sorry, daß ich mich erst jetzt melde, ich hatte einen Systemcrash und mußte alles neu installieren und habe mich erst jetzt wieder mit dem Problem befaßt.

Viele Grüße

winter2

Winter2
11.12.2005, 20:33
Hallo,

ich habe das Problem gelöst.
Prinzipiell: Es ist nicht notwendig, mit den achtstelligen DOS-Namen zu arbeiten, es geht auch mit den langen, wenn man einfach den Dateinamen in Anführungszeichen setzt, so wie in der MS-DOS-Konsole auch. Weil das Anführungszeichen ja auch Stringbegrenzung ist, muß man es zur Entwertung doppelt schreiben, wie in VBA auch.

Noch besser ist es, den aktuellen Pfad der Skriptdatei zu verwenden. Dies geht wie folgt:

SkriptPfad = WScript.ScriptFullName
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName))
wshell.run "MSACCESS.EXE """ & SkriptPfad & "Frontend.mdb"""

Maxus
12.12.2005, 11:02
hier mal noch ne andere variante über Access.application object

Set objAc = CreateObject ("Access.Application")

objAc.OpenCurrentDatabase"PFad 8er Dos Konversion beachten.mdb"
objAc.Visible = true