Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

Bitte teilen Sie uns Ihre Anrede, Ihren Namen und Ihre E-Mail-Adresse mit:

Anrede:
Vorname:
Nachname:
E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2018.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Kommandozeile per DLL

Wenn Sie von Access aus Befehle ausführen wollen, die Sie normalerweise über die Kommandozeile beziehungsweise die Eingabeaufforderung eingeben würden, ist das kein Problem – das erledigen Sie ganz einfach über die Shell-Anweisung. Interessanter wird es, wenn Sie die Ausgabe der Anwendung einlesen und verarbeiten wollen, um beispielsweise auszuwerten, ob der Aufruf erfolgreich war oder welches Ergebnis dieser geliefert hat. Mit VBA beziehungsweise API-Funktionen gelingt dies nicht immer zuverlässig. Also schauen wir uns in der .NET-Bibliothek um, ob es dort Alternativen gibt, und machen uns diese über eine DLL unter VBA verfügbar.

Im Beitrag VB.NET-DLL für Access programmieren (www.access-im-unternehmen.de/1167) haben wir gezeigt, wie Sie eine VB-DLL programmieren, die Sie vom VBA-Projekt einer Access-Anwendung aus einbinden können, um auf ihre Methoden und Eigenschaften zuzugreifen. Auf dieser DLL setzen wir nun auf, um uns die zum Absetzen von Programmaufrufen und zum Erfassen der Rückgabewerte erforderlichen Funktionen verfügbar zu machen.

Debugging

Um das Debugging zu erleichtern, wollen wir während des Aufrufs von Access aus den Code der COM-DLL debuggen. Dazu sind ein paar kleine Einstellungen nötig, die wir in den Projekteigenschaften im Bereich Debuggen vornehmen. Hier stellen wir für die Eigenschaft Externes Programm starten den Pfad zur MSAccess.exe ein (siehe Bild 1). Dieser Pfad lautet beispielsweise unter Office 365 wie folgt:

Pfad zur MSAccess.exe festlegen, die beim Debuggen gestartet werden soll

Bild 1: Pfad zur MSAccess.exe festlegen, die beim Debuggen gestartet werden soll

C:\Program Files (x86)\Microsoft Office\root\Office16\MSACCESS.EXE

Unter Befehlszeilenargument geben Sie den Pfad zu der zu verwendenden Datenbankdatei ein.

Wenn Sie beim Starten nun noch wollen, dass das VBA-Modul mit den Anweisungen zum Testen der DLL aufgerufen wird, fügen Sie der Datenbank ein einfaches Formular hinzu, für dessen Ereigniseigenschaft Beim Laden Sie die folgende Ereignisprozedur hinterlegen:

Private Sub Form_Load()
     DoCmd.OpenModule "mdlDLL"
End Sub

Speichern Sie das Formular unter dem Namen frmStart. Hinterlegen Sie dieses Formular in den Access-Optionen für die Eigenschaft Formular anzeigen (siehe Bild 2).

Einstellen des Startformulars unserer Beispielanwendung

Bild 2: Einstellen des Startformulars unserer Beispielanwendung

Wenn Sie die .NET-DLL nun von Visual Studio aus mit dem Menübefehl Debugging|Debugging starten, wird direkt die angegebene Access-Datenbank geöffnet. Diese zeigt direkt das Formular frmStart an, welches wiederum den VBA-Editor mit dem Modul mdlDLL anzeigt.

Test mit PDFTK

Im Beitrag PDF-Dokumente im Griff mit PDFtk (www.access-im-unternehmen.de/1166) zeigen wir, wie Sie mit dem Kommandozeilentool PDFtk auf PDF-Dokumente zugreifen, um diese zu kombinieren, zu schützen und vieles mehr. Dies gelingt allerdings nur über die Eingabeaufforderung. Wir können die notwendigen Befehle zwar über die Shell-Anweisung absetzen, allerdings können wir die Rückgabewerte beziehungsweise die Ausgabe von PDFtk.exe nicht einlesen oder auswerten.

Das wollen wir nun mit den unter .NET viel flexibleren Bibliotheken erledigen, in diesem Fall mit einige Elementen der Bibliothek System.Diagnostics. Um die DLL zunächst mit einer einfachen Funktion auszustatten, die PDFTK heißt und einfach nur den Befehl PDFTK absetzt und die resultierende Ausgabe abfängt und als Rückgabewert liefert, füllen Sie die Klassendatei des Projekts wie in Listing 1.

Imports System.Runtime.InteropServices
<InterfaceType(ComInterfaceType.InterfaceIsDual)>
<Guid("FE5FEE03-A893-4D02-8081-0F56CF485AAC")>
Public Interface ICMD
     Function PDFTK() As String
End Interface
<ClassInterface(ClassInterfaceType.None)>
<Guid("E8C7BD72-7751-47B0-AE2A-F8E677A0A16C")>
Public Class CMD
     Implements ICMD
     Public Function PDFTK() As String Implements ICMD.PDFTK
         Dim pProcess As System.Diagnostics.Process =  New System.Diagnostics.Process()
         Dim strCommand As String
         Dim strCommandParameters As String
         Dim strWorkingDirectory As String
         strCommand = "pdftk.exe"
         strCommandParameters = ""

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

Bitte teilen Sie uns Ihre Anrede, Ihren Namen und Ihre E-Mail-Adresse mit:

Anrede:
Vorname:
Nachname:
E-Mail:

© 2003-2018 André Minhorst Alle Rechte vorbehalten.