VBA: Bedingte Kompilierung nutzen

In VBA-Projekten kann es vorkommen, dass Anweisungen nur in bestimmten Situationen kompiliert werden sollen. Das bekannteste Beispiel sind die Deklarationen von API-Funktionen, die je nach VBA-Version mal in der 32-Bit- und mal in der 64-Bit-Variante bereitgestellt werden sollen. Da die 64-Bit-Version bei Verwendung von 32-Bit-Access unter Umständen Datentypen mit sich bringt, die es in der 32-Bit-Version nicht gibt, würde dies beim Kompilieren zu Fehlern führen. Daher gibt es die sogenannte bedingte Kompilierung, bei der man mit speziellen If…Then-Bedingungen dafür sorgen kann, dass nur die für die aktuelle Version relevanten Codezeilen kompiliert werden können. In diesem Artikel zeigen wir, wie die bedingte Kompilierung funktioniert. Außerdem stellen wir ein weiteres Beispiel vor, in dem wir entweder die Early Binding- oder die Late Binding-Verwendung von Variablen nutzen wollen – abhängig von einer zur Laufzeit gesetzten Bedingung.

Weiterlesen

Per VBA von Early Binding zu Late Binding wechseln

Im Artikel “VBA: Early Binding und Late Binding” (www.vbentwickler.de/494) haben wir die beiden Methoden Early Binding und Late Binding vorgestellt und ihre Vor- und Nachteile beschrieben. Im vorliegenden Artikel zeigen wir nun eine automatische Lösung, um schnell einige oder alle per Early Binding definierten Elemente nach Late Binding zu migrieren. Dazu nutzen wir Code, der zunächst alle Early Binding-Elemente ermittelt, diese in einem Formular anzeigt und es dann ermöglicht, diese in Late Binding-Elemente umzuwandeln.

Weiterlesen

VBA: Early Binding und Late Binding

Wenn wir Objektvariablen deklarieren und instanzieren wollen, gibt es zwei Varianten: Early Binding und Late Binding. Beide haben ihre Daseinsberechtigung. Bei der ersten können wir IntelliSense nutzen, benötigen allerdings einen Verweis auf die jeweilige Bibliothek. Durch das Vorhandensein des Verweises ist die Performance außerdem ein wenig besser. Beim Late Binding deklarieren wir die Variable mit dem Typ Object und weisen diese anders zu. Hier benötigen wir keinen Verweis, was wiederum Vorteile mit sich bringt. Ferner können wir kein IntelliSense nutzen. In diesem Artikel zeigen wir zuerst die Unterschiede und die Vor- und Nachteile von Early Binding und Late Binding. Zudem stellen wir eine Möglichkeit vor, beide Varianten gleichzeitig zu definieren und zur Laufzeit zwischen den Methoden zu wechseln.

Weiterlesen

Access: Ordner und Dateien im Formular anzeigen

In Access-Anwendungen kann es interessant sein, Ordner und Dateien zu einem Datensatz verfügbar zu machen. Das bietet sich an, wann immer Dateien im Kontext eines Datensatzes in einem bestimmten Bereich im Dateisystem gespeichert sind – etwa zu Kunden, Projekten, Produkten und anderen Tabellen. In diesem Artikel zeigen wir, wie man die Verzeichnisse und Dateien eines Verzeichnisses über ein ListView-Steuerelement einfach in einem Formular anzeigen kann. Die Standardfunktionen zu diesen Elementen sollen direkt über die Einträge dieses ListView-Steuerelements verfügbar sein – zum Beispiel das Öffnen in der jeweiligen Zielanwendung, das Löschen einer Datei oder auch das Navigieren in unter- oder übergeordneten Verzeichnissen.

Weiterlesen

VBA: Datei-Icons einlesen und speichern

Symbole und Icons spielen in Microsoft-Access-Anwendungen eine oft unterschätzte Rolle. Dabei können sie die Bedienbarkeit und Verständlichkeit einer Datenbank erheblich verbessern – insbesondere dann, wenn Dateien, Ordner oder Dokumenttypen visuell unterschieden werden sollen. Während Access für viele Steuerelemente wie TreeView, ListView, Symbolleisten oder Ribbon-Schaltflächen grundsätzlich Icon-Unterstützung bietet, stellt sich in der Praxis häufig die Frage:Wie lassen sich die echten System-Icons von Dateien – so wie sie auch im Windows-Explorer angezeigt werden – in einer Access-Anwendung verwenden? Genau das zeigen wir in diesem Artikel und liefern auch noch das Know-how, um die eingelesenen Icons direkt in der Tabelle MSysResources zu speichern. Von dort können wir sie beispielsweise in ein ImageList-Steuerelement schreiben – um sie dann in TreeView- und ListView-Steuerelementen anzuzeigen.

Weiterlesen

SQL Server-Datenbank von Access aus updaten

Wenn wir eine Access-Anwendung mit SQL Server-Frontend an einen Kunden ausgeliefert haben, müssen wir sicherstellen, dass Updates problemlos funktionieren. Updates haben hier zwei Seiten: Einerseits kann das Access-Frontend um neue Funktionen erweitert werden, andererseits können diese Funktionen eine Anpassung der SQL Server-Datenbank erfordern. Das Aktualisieren der Access-Datenbank erfolgt im einfachsten Fall durch einfaches Ersetzen der .accdb-Datei. Beim Backend wird es ein wenig aufwendiger: Wir können es nicht einfach ersetzen, da die enthaltenen Daten im laufenden Betrieb bearbeitet wurden. Hier gibt es nun zwei Wege: Wir lassen uns ein Backup des Backends zukommen, aktualisieren es und spielen es anschließend wieder ein. Wenn die Anwendung bei mehreren Kunden verwendet wird, ist dies jedoch zu aufwendig. In diesem Fall können wir das Backend aber auch automatisch durch entsprechenden Code in der neuen Version des Frontends aktualisieren lassen. Wie das gelingt, zeigen wir in diesem Artikel.

Weiterlesen

SQL Server-Datenbanken vergleichen mit VS.Code

Es gibt verschiedene Gründe, zwei Datenbanken miteinander zu vergleichen. Wenn uns zwei Versionen einer Datenbank vorliegen, unterscheiden diese sich gegebenenfalls und wir möchten herausfinden, welche die aktuellere ist. Bei der Gelegenheit kann man auch gleich noch prüfen, welche Unterschiede zwischen den Datenbanken es überhaupt gibt. Damit eröffnen sich praktische Möglichkeiten: So können wir etwa ein Skript erstellen lassen, welches die Unterschiede zwischen zwei Versionen einer Datenbank aufzeigt. Damit erkennen wir nicht nur die Unterschiede selbst, sondern können das Skript sogar nutzen, um die ältere der beiden Datenbanken auf den aktuellen Stand bringen. Das ist hilfreich, wenn wir eine beim Kunden befindliche Datenbank aktualisieren wollen. Wir erstellen dann einfach ein Skript mit den Unterschieden und führen es beim Kunden aus, damit er die aktuellste Version der Datenbank erhält. Für das Ermitteln der Unterschiede gibt es verschiedene Werkzeuge, etwa die SQL Server-Tools für Visual Studio Code, die leichtgewichtige Entwicklungsumgebung von Microsoft. In diesem Artikel zeigen wir, wie dieses installiert wird und wie wir die SQL Server-Tools aktivieren und nutzen, um die Unterschiede zwischen zwei Datenbanken in einem Skript zusammenzustellen.

Weiterlesen

Dateien im SQL Server speichern mit FileTables

In Access gibt es verschiedene Möglichkeiten, Dateien zu speichern. Diese kann man zum Beispiel in Anlagefeldern ablegen, oder man belässt die eigentlichen Dateien im Dateisystem und notiert in den Tabellen lediglich den Pfad zu den Dateien oder auch nur die Dateinamen. Welche Variante man wählt, hängt letztlich von der Menge und der Größe der Dateien ab, sprich: vom benötigten Speicherplatz. Der ist nämlich in Access-Datenbanken auf zwei Gigabytes begrenzt. In SQL Server-Datenbanken sieht dies ganz anders aus. Selbst bei Verwendung der kostenlosen Express-Edition dürfen die einzelnen Datenbank-Dateien bis zu zehn Gigabytes an Platz auf der Festplatte einnehmen. Auch hier gibt es verschiedene Varianten zum Speichern der Dateien. Die erste ist, die Dateien in varbinary(max)-Feldern zu hinterlegen. Oder man nutzt dazu sogenannte Filetables. Hier werden die Dateien in einem speziell dazu vorgesehenen Bereich der Festplatte abgelegt, aber unter die Kontrolle des SQL Servers gestellt – und gleichzeitig über einen speziellen Typ von Tabelle verwaltet. Wie das gelingt, zeigen wir in diesem Artikel.

Weiterlesen

SQL Server-Zugangsdaten sicher speichern

Im Artikel “SQL Server: Tabellen verknüpfen” (www.vbentwickler.de/485) haben wir gezeigt, wie wir die Tabellen eines SQL Servers per ODBC als Tabellenverknüpfung in Access-Datenbanken verfügbar machen können. Dabei gibt es zwei Varianten, um über entsprechende Verbindungszeichenfolgen auf die Tabellen des SQL Servers zuzugreifen: Windows-Authentifizierung und SQL Server-Authentifizierung. Bei der ersten werden die Zugangsdaten über den aktuellen Windows-Benutzer ermittelt. Dieses Kennwort kennt in der Regel nur der Benutzer und die Verknüpfung der Tabellen kann nach seiner Anmeldung am Rechner ohne weitere Interaktion erfolgen. Bei der SQL Server-Authentifizierung jedoch müssen zusätzlich die Zugangsdaten des Benutzers zum SQL Server angegeben werden. Damit der Benutzer diese nicht immer manuell eingeben muss, möchten wir diese sicher speichern – so, dass niemand diese auslesen kann, auch wenn er Zugriff zum Rechner des Benutzers hat. Wie das gelingt, zeigen wir in diesem Artikel.

Weiterlesen

SQL Server: Tabellen per VBA verknüpfen

Wenn Du die Tabellen einer Access-Datenbank mit dem SQL Server Migration Assistant zum SQL Server migriert hast, ist der Großteil einer SQL Server-Migration bereits geschafft. Allerdings stehen noch weitere Arbeiten wie das Anpassen des VBA-Codes, Abfragen, Formularen und Berichten bevor. Eine andere, wichtige Aufgabe ist das Sicherstellen der Funktion der Tabellenverknüpfungen. Diese wurden, wenn die richtige Option im SQL Server Migration Assistant markiert wurde, bereits initial angelegt, während die Original-Tabellen der Access-Datenbank umbenannt wurden. Wie aber stellen wir sicher, dass die Tabellenverknüpfungen auch nach dem Ändern des Tabellenentwurfs im SQL Server aktuell bleiben? Das erläutern wir in diesem Artikel.

Weiterlesen