PDA

Vollständige Version anzeigen : DoCmd.TransferDatabase mittels VBS


freitag_
07.01.2008, 12:57
Hallo zusammen,

ich hab hier ein Problem mit dem Export von Tabellen mittels DoCmd.TransferDatabase.

Mein Problem ist folgendes:
Ich habe eine Access-Datenbank, aus der 3 Tabellen in eine andere (existierende) Access-Datenbank exportiert werden sollen. Das soll automatisch ablaufen.
Wenn ich den Befehl DoCmd.TransferDatabase acExport, "Microsoft Access", PfadExportDB, acTable, "tbl_Quelle", "tbl_Ziel", False (PfadExportDB=Pfader der DB, in die exportiert werden soll) direkt in Access aufrufe, dann funktioniert der Export ohne Probleme.
Aber es funktioniert nicht, wenn ich es automatisch mit einer VBS-Datei ablaufen lasse. Das läuft ohne Probleme durch, aber es ist nix geschehen, keine Daten wurden exportiert. :(
Was mache ich falsch? Was muss ich ändern?

Vielen Dank schon mal für eure Hilfe!

Gruß,
Alex

Anne Berg
08.01.2008, 00:39
Hallo Alex.

Ich würde mal davon ausgehen, dass diese Methode nur in Access verfügbar ist. ;)

Wie kommst du auf die Idee, das in einem Script einsetzen zu können? :confused:

freitag_
08.01.2008, 07:15
Hallo Anne,

ich dachte in VBScript könnte ich ebenso mit den Befehlen aus Access arbeiten.
Im Script wollte ich auf den Befehl folgendermaßen zugreifen:
strDB=mypath & TrafoDB
Set acApp = NEW Access.Application
acApp.OpenCurrentDatabase(strDB)
acApp.DoCmd.TransferDatabase acExport, "Microsoft Access", PfadExportDB, acTable, "tbl_Quelle", "tbl_Ziel", False
Oder steh ich da vollkommen auf dem Schlauch :confused: und tu damit nicht gerade was für meinen guten Ruf? ;)


Gruß,
Alex

freitag_
09.01.2008, 13:01
Hallo,

habe das Problem jetzt wie folgt gelöst. Ist zwar nicht so ganz wie ich es erst wollte aber es funktioniert auch und erfüllt seinen Zweck.

In der VBS-Datei (die ich dann in einer BAT-Datei aufrufe):
strMDBDatei = myDBpath & TrafoDB ' ergibt den Pfad der DB, aus der exportiert werden soll
Set objAccApp = CreateObject("Access.Application")
objAccApp.OpenCurrentDatabase strMDBDatei
objAccApp.Run MacroName ' MacroName = Name des Makros, dass ich in der Access-DB (=strMDBDatei) geschrieben hab
objAccApp.CloseCurrentDatabase
Set objAccApp = Nothing

Beim Aufruf des Makro übergebe ich noch einige Sachen, aber das spielt hier jetzt keine Rolle.
Im Makro selber führe ich dann die TransferDatabase-Methode aus und exportiere mir damit die Tabelle aus der Datenbank in die andere.

Vielleicht gibt es noch eine weniger umständliche Lösung (aber auch über Script). Wäre daran dann auch mal interessiert. Schließlich lernt man nie aus ;)

Gruß,
Alex

Anne Berg
09.01.2008, 22:08
Hi, du hast mich da auf eine Idee gebracht, so etwas kann ich gut gebrauchen! ;)

Der Fehler war, dass man die Access-Konstanten nicht einfach so benutzen kann. Man muss die Konstanten deklarieren oder durch Direktwerte ersetzen.

Also:
strDB=mypath & TrafoDB
acExport = 1
acTable = 0
Set objAccApp= CreateObject("Access.Application")
objAccApp.OpenCurrentDatabase(strDB)
objAccApp.DoCmd.TransferDatabase acExport , "Microsoft Access", PfadExportDB, acTable, "tbl_Quelle", "tbl_Ziel", False
objAccApp.CloseCurrentDatabase
Set objAccApp = Nothing
Nun habe ich nur das Problem, dass ich die Sicherheitsstufe so eingestellt habe, dass die DB sich erst nach Bestätigung öffnet. Hast du / hat jemand eine Idee dazu?

freitag_
10.01.2008, 08:59
Hallo Anne,

vielleicht hilft dir ja der Befehl

DoCmd.SetWarnings False -> zum Ausschalten der Warnungen
DoCmd.SetWarnings True -> zum Einschalten der Warnungen

weiter.
Ist nur so ne Idee.

Gruß,
Alex

Anne Berg
10.01.2008, 09:30
Danke, das ist es nicht. Ich muss ja aktiv werden und das Öffnen per Mausklick bestätigen. Die Default-Aktion wäre Abbrechen.

freitag_
10.01.2008, 10:33
Hab da mal was gefunden. Weiß aber nicht, ob dir das wirklich weiterhilft.

Hier der Link dahin: http://www.ms-office-forum.net/forum/showpost.php?p=815481&postcount=3

Gruß,
Alex

Anne Berg
10.01.2008, 12:51
Vielen Dank, das hängt schon damit zusammen.
Aber es geht mir ja nicht darum, dieses Verhalten zu ändern und z.B. die Sicherheitsstufe niedriger zu setzen, damit die Rückfrage nicht mehr kommt, sondern ich möchte das in dem Script "irgendwie" berücksichtigen.

freitag_
10.01.2008, 14:08
Sorry, da muss ich leider passen. Da hab ich keine Ahnung wie das geht oder wie man das "ansprechen" könnte. :(
Wenn man dazu was findet, dann heißt es immer eigenes Zertifikat erstellen oder digitale Signatur erstellen.

Aber sollte jemand die Lösung dafür haben, wäre es schön, wenn er/sie das dann hier posten könnte. Würd mich nämlich auch interessieren.

Gruß,
Alex