Kommandozeile per DLL

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

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
ootOffice16MSACCESS.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 = ""

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]