Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Access CMD Batch datei

Begonnen von m0w, Dezember 24, 2016, 12:06:29

⏪ vorheriges - nächstes ⏩

m0w

Hallo,
ich wollte wissen, ob sich eine Access 2010 Datenbank über die CMD starten lässt und sich die Abfragen über die CMD verändern / ausführen lassen.
Mein Plan ist es mir eine Batchdatei zu erstellen die immer an Tag x eine bestimmte Routine ausführt.


Beste Grüße

m0w

MzKlMu

Hallo,
ist kein Problem. Du musst nur die Datenbankdatei per Batch starten (Taskplaner).
In der Accessdb kann man ein Autoexec Makro anlegen das die Routine ausführt.
Eventuell kann es sinnvoll sein eine DB zu erstellen die nur diese ein Funktionalität bietet.
Die notwendige(n) Tabelle(n) kann/können dann in dieser DB verknüpft werden.
Gruß Klaus

m0w

Danke für die Antwort!

Lassen sich denn auch die Abfragen über die CMD verändern oder muss ich das über Makro / VBA klären? (Heute - 7 Tage zB)

Kennst du vllt. ein Tutorial oder ähnliches wo ich mich belesen kann? Eine Access Datei bekomme ich auch noch über die CMD gestartet, dann hört es aber leider schon auf bei mir.  ;D

crystal

Hallo,
das könnte man vielleicht über die Autostart-Funktion hinkriegen.
Du kannst ja ich Access ein Formular definieren, dass automatisch beim Start aufgerufen wird. Darin müsstest du nur noch unterscheiden können zwischen interaktivem und Batch-Aufruf...

Oder schau dir die Aufruf-Parameter unter
https://support.office.com/en-us/article/Command-line-switches-for-Access-558cfe1d-3c98-4292-bee8-1f5df9702bf1
an.

lg und frohe Weihnachten
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

m0w

#4
Das hat mir schon mal sehr weitergeholfen!
Wenn ich:

start C:\Pfad\db1.accdb /x test

eingebe, dann sagt er mir "Objekt 'test' wurde von Microsoft Access nicht gefunden".

____

Edit: Fehler selber gefunden.  ;D

m0w

#5
Ich denke ich habe es so weit hinbekommen. Zumindest mit meiner Testdatenbank.

Jetzt kam mir die Idee, alles in eine Batch Datei zu schreiben (sind mehrere DB's), jedoch öffnet er immer für jeden "start" ein extra CMD Fenster, obwohl "@echo off" enthalten ist.

Habt ihr da vllt. einen Tipp für mich?

Edit:

Kurz noch mal zur Erklärung.
Wenn ich es so schreibe, funktioniert es super:
@echo off
start C:\Pfad\db1.accdb /x Makro1
::gespeichert als batch_db1

oder
@echo off
start C:\Pfad\db2.accdb /x Makro1
::gespeichert als batch_db2


Wenn ich es so schreibe, führt er nur den ersten Befehl aus:
@echo off
start C:\Pfad\db1.accdb /x Makro1
start C:\Pfad\db2.accdb /x Makro1


Wenn ich es so schreibe, öffnet er für jeden "start" ein extra CMD Fenster:
@echo off
start C:\Pfad\db_batch1
start C:\Pfad\db_batch2

DF6GL

Hallo,


gib an der Eingabeaufforderung "start /?"  ein,  dann bekommst Du die möglichen cmd-line Parameter für den Start-Befehl angezeigt...

m0w

Hallo,

danke schon mal für die Antwort.
Ich versteh die Antwort nicht ganz und wie sie mir bei meinen Problem helfen soll.
Die Parameter habe ich mir schon angeschaut, aber keinen gefunden der mir bei der Problemlösung hilft.

Die Lösung für mein Problem:
ping 127.0.0.1 -n 5 >nul
exit

crystal

Hallo,
wenn du in einer Batchdatei mehrere Befehle hintereinander schreibst, wir doch der zweite erst ausgeführt, wenn der erste beendet ist, oder?

Also müsstest du Access jeweils automatisch beenden, oder liege ich da falsch?

Weihnachtliche Grüße
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

crystal

Nachtrag:
der entscheidende Hinweis befindet sich ziemlich am Ende des Hilfetextes (start /?, Danke DF6GL!).

Wird eine grafische 32-Bit-Anwendung....
Dies gilt NICHT,...

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

m0w

Zitat von: crystal am Dezember 25, 2016, 12:15:38
wenn du in einer Batchdatei mehrere Befehle hintereinander schreibst, wir doch der zweite erst ausgeführt, wenn der erste beendet ist, oder?

Also müsstest du Access jeweils automatisch beenden, oder liege ich da falsch?

Die Frage habe ich mir in der Tat auch gestellt.
Ich bin aber von der selben Situation ausgegangen wie du. Das ist aber kein Problem denke ich. Störend waren nur die beiden extra CMD Fenster. Aber das funktioniert ja jetzt :)

Gibt es denn eine Funktion in Access die das automatische Beenden erzwingt? Wenn ich im Makro "Schließen Datenbank" auswähle, schließt er mir meine Datenbank, macht aber eine neue auf.


ebs17

Zitateine Access 2010 Datenbank über die CMD starten lässt und sich die Abfragen über die CMD verändern / ausführen lassen
Wenn Du nicht so fixiert auf CMD und Batch wärst, könnte man als ausführbare Datei, die bspw. per Windows-Aufgabenpaner gestartet wird, auch an eine VBS-Datei denken.
In VBScript kann man praktisch das Gleiche umsetzen wie in VBA, Objekte sind allerdings konsequent per Late Binding einzusetzen, da man in einer Textdatei keine Verweise hinterlegen kann.
Hier wäre ein schlichter Zugriff per DAO (wahlweise ADODB) denkbar, mit dem man Abfrageaktionen ausführen könnte. Ein Öffnen von Access und somit ein Schließen ist da gar nicht notwendig. Ohne Öffnen des großen Access-Objektes wäre das überdies schneller.
Mit freundlichem Glück Auf!

Eberhard

m0w

#12
Das klingt natürlich nicht verkehrt wenn es performanter ist.
Für Ratschläge bin ich natürlich immer sehr offen. Fixiert bin ich nicht, mir ist bloß nichts anderes eingefallen und VBS / DAO / ADODB kenne ich gar nicht.

Hast du da einige Sachen für mich zum reinlesen?

m0w

Wo ist jetzt der genauer Unterschied / Vorteil / Nachteil zu einer Batch Datei? Ich erkenne ihn nicht wirklich.

VBS:
WScript.CreateObject("WScript.Shell").Run "msaccess.exe"
    On Error Resume Next
    Do
        Err.Clear
        Set ac = GetObject(, "Access.Application")
    Loop Until Err.Number = 0
    On Error GoTo 0
    ac.OpenCurrentdatabase "C:\Pfad\db1.accdb"
    ac.DoCmd.RunMacro "Makro1"


Batch:
@echo off
start C:\Pfad\db1.accdb /x Makro1
ping 127.0.0.1 -n 5 >nul
exit


Außer das ich mehr schreiben muss. Tut mir schon mal Leid für die ganzen Fragen ;D

ebs17

Zitateinige Sachen für mich zum reinlesen?
VBA-Editor (ALT+F11)
dazu Hilfe (F1)
Thema Access 2010 Entwicklerreferenz
darin Microsoft Datenzugriffsobjekte (DAO) - Referenz
und Referenz zu Microsoft Axtive-Datenobjekten (ADO)

Das ist auch stets benötigtes Handwerkszeug, wenn man einigermaßen in einer Access-DB programmiert.

Zum letzten Beitrag: Wenn Du das Gleiche machst (Makro starten), ist der Aufruf relativ egal.
Ich sprach davon, über das VBS unmittelbar das zu machen, was in Makro1 steht, ohne Öffnen der Datenbank - wenn man jetzt einen Zugriff per DAO/ADO auf eine DB nicht als Öffnen bezeichnet.
Mit freundlichem Glück Auf!

Eberhard