SQL Server im Web, Teil 1: Webserver

Uns erreichen immer mehr Anfragen, wie man seine Datenbank ins Internet bringt. Oder, um genauer zu sein: Wie man diese so verfügbar macht, dass man von mobilen Geräten über das Internet darauf zugreifen kann. Ob man sich nun von einem Notebook aus mit der Datenbank verbindet oder ob man eine alternative Technik wie eine Webseite dafür nutzt. Und gleichzeitig auch noch vom heimischen Rechner oder aus dem Büro über das Access-Frontend auf die Daten zugreifen kann. Also schauen wir uns einmal die Voraussetzung dazu an – einen über das Internet erreichbaren Rechner. Hier haben wir verschiedene Möglichkeiten. Wir können einen Cloud-Service wie den von Microsoft nutzen, aber wir können uns auch einen eigenen Server mieten, auf dem wir tun und lassen können, was wir wollen – SQL Server installieren, Webseiten anlegen et cetera. Wir schauen uns den letzten Punkt an, da er uns maximale Freiheit bietet, aber auch maximale Verantwortlichkeit einfordert: Das Mieten eines Webservers (hier virtuell) und die Verwendung von SQL Server 2022 Express auf diesem Webserver. In diesem ersten Teil schauen wir uns erst einmal an, wir einen Webserver mieten und diesen erstmalig mit der Remotedesktopverbindung öffnen und anzeigen können.

Weiterlesen

Tabellendaten mit Übersicht und Details anzeigen

Eine gute Basis für das Anzeigen und Bearbeiten von Daten ist die folgende Konstellation: Wir verwenden ein Haupt- und Unterformular, um die Daten einer Tabelle in einer Übersichtsansicht anzuzeigen. Dabei können wir die Daten, die im Unterformular angezeigt werden, filtern und sortieren. Außerdem stellen wir Schaltflächen bereit, mit denen wir die Datensätze anlegen, bearbeiten und löschen können. Zum Bearbeiten verwenden wir ein weiteres Formular, das die Daten in einer übersichtlichen Ansicht darstellt. Zusätzlich fügen wir noch ein den Code hinzu, der für das Interagieren der Formulare untereinander notwendig ist. Diese Konstellation von Formularen können wir für alle möglichen Tabellen verwenden und schaffen so die Basis einer professionellen Anwendung. Anpassungen können schließlich dort vorgenommen werden, wo m:n- oder 1:n-Beziehungen dargestellt werden sollen.

Weiterlesen

Formulare: Datensatz wird nicht gespeichert

Es gibt seit vielen Jahren einen Bug in Access-Formularen, der möglicherweise Entwickler und Benutzer in den Wahnsinn treibt. Dabei geht es darum, dass neue oder geänderte Datensätze beim Schließen des Formulars nicht automatisch gespeichert werden. Stattdessen findet man neue Datensätze einfach nicht in der entsprechenden Tabelle vor und bei vermeintlich geänderten Datensätzen wurde die Änderung nicht übernommen. Dies geschieht, wenn man das Formular auf eine bestimmte Art schließt und Restriktionen in der zugrunde liegenden Tabelle dafür sorgen, dass der Datensatz nicht gespeichert werden kann. Wird zum Beispiel ein Pflichtfeld nicht gefüllt und das Formular geschlossen, verwirft Access den neuen Datensatz einfach, anstatt eine entsprechende Meldung zu liefern. Dieser Beitrag dokumentiert das Fehlverhalten und zeigt, welche Möglichkeiten wir zum Umgehen dieses Problems haben.

Weiterlesen

Detailformular per Mausklick erstellen

Bei der Arbeit mit Microsoft Access gibt es immer wiederkehrende Aufgaben – zum Beispiel das Anlegen von Detailformularen. Diese sollen die Daten aus einfachen Tabellen darstellen und zwei Schaltflächen namens OK und Abbrechen bereitstellen. So kann der Benutzer neue oder geänderte Datensätze übernehmen oder diese verwerfen. Dazu sind immer wieder viele kleine Handgriffe nötig. Damit dies ab jetzt schneller geht, schauen wir uns an, wie wir die meisten der Schritte automatisieren können. Dazu bauen wir ein Formular, mit dem wir alle Konfigurationsschritte erledigen können – von der Auswahl der Datenquelle über die Benennung des Formulars bis hin zur Erstellung des vollständigen Formulars inklusive Code.

Weiterlesen

SQL Server: Von der Abfrage zur Stored Procedure

Die einfache Migration der Tabellen einer Datenbank von Access zum SQL Server ist meist schnell erledigt. Der SQL Server Migration Assistant (SSMA) leistet gute Arbeit und schnell landen alle Tabellen in der SQL Server-Datenbank – samt Erstellung entsprechender Tabellenverknüpfungen im Access-Frontend. Damit lässt sich erst einmal arbeiten, da die Verknüpfungen Lesen und Schreiben der Daten wie gewohnt zulassen. Früher oder später wird man jedoch auf Abfragen im Access-Frontend stoßen, die schlicht zu langsam sind. Und hier kann der SQL Server sein wahres Potential ausspielen: Zum Beispiel, indem wir dort eine Stored Procedure (Gespeicherte Abfrage) anlegen, welche die Abfrage für uns direkt auf dem SQL Server ausführt, was viel schneller gehen wird. Und genau das ist Thema dieses Beitrags: Wie bekommen wir eine mehr oder weniger komplizierte Abfrage als Stored Procedure zum SQL Server und rufen diese von der Access-Datenbank aus auf?

Weiterlesen

Individuelle Formular-Icons ohne Zusatzdateien

Im Beitrag “Icons in Access-Formularen und Berichten” (www.access-im-unternehmen.de/1235) haben wir schon einmal eine Möglichkeit aufgezeigt, wir man Formulare und Berichte in Access mit individuellen Icons ausstatten kann. So kann man beispielsweise ein Formular zum Bearbeiten eines Kunden mit dem gleichen Icon ausstatten, das man auch für die Schaltfläche zum Öffnen dieses Formulars im Ribbon untergebracht hat. Der Benutzer kann so noch besser erkennen, worum es im Formular geht. In der vorherigen Fassung der Lösung hatten wir allerdings noch das Problem, dass wir die Icons, die links oben in Formularen und Berichten erscheinen sollten, noch im Dateisystem speichern mussten. Das kann aus diversen Gründen zu Problem führen und daher sind wir froh, hier den nächsten Schritt gehen zu können: Das direkt Einlesen der Icons aus der Tabelle “MSysResources” und anschließendes Anzeigen in Formulare und Berichten.

Weiterlesen

TreeView: Bug durch falsche Einheiten

Wenn man das TreeView-Steuerelement professioneller nutzt, programmiert man unter anderem Ereignisse, die durch das Anklicken von Elementen ausgelöst werden. Damit kann man Ereignisprozeduren auslösen, die beispielsweise Daten zum angeklickten Element in einem Unterformular anzeigen oder man blendet ein Kontextmenü zum jeweils angeklickten Element mit weiteren Optionen ein. Dazu ist es notwendig, zu identifizieren, auf welches Element der Benutzer geklickt hat. Die notwendigen Informationen liefern die Parameter der Prozeduren, das Ermitteln des angeklickten Elements erledigt man mit einer bestimmten Funktion. Seit Kurzem erreichen uns allerdings Meldungen von Lesern, bei denen dies nicht mehr zuverlässig funktioniert: Es werden keine Kontextmenüs mehr angezeigt und auch das Anklicken gelingt nicht mehr wie gewünscht. Interessanterweise tritt das Problem nur bei Verwendung von Office 365 auf. Wir schauen uns in diesem Beitrag an, woher das Problem rührt und wie Sie es lösen können.

Weiterlesen

Formular an Mausposition öffnen

Verschiedene Anwendungszwecke machen es erforderlich, dass man ein Formular an einer bestimmten Position öffnet. Und selbst wenn es an sich nicht erforderlich ist, steigert es doch die Ergonomie, wenn zum Beispiel ein Popup-Formular an der Stelle erscheint, an der man den Befehl zum Öffnen betätigt hat – beispielsweise durch einen Klick auf eine Schaltfläche oder auf ein anderes Steuerelement. In diesem Beitrag schauen wir uns an, wie wir unabhängig von anderen Elementen ein Formular öffnen und an der Position des Mauszeiters positionieren können. Dazu benötigen wir nichts außer ein paar Ereignisprozeduren und API-Funktionen.

Weiterlesen

Modale Dialoge nach Wunsch gestalten

Modale Dialoge, also Formulare, die mit dem Befehl DoCmd.OpenForm mit dem Parameter WindowMode:=acDialog geöffnet wurden, sind in vielen Fällen hilfreich: Wir können den aufrufenden Code anhalten, bis das Formular geschlossen oder ausgeblendet wird und so gegebenenfalls auszulesende Werte ermitteln. Oder wir sorgen so dafür, dass der Benutzer nicht an anderen Formularen arbeiten kann, bevor er nicht die Eingabe in dieses Formular abgeschlossen hat. Einen Nachteil haben modale Dialog allerdings: Wir können ihre Rahmenart nicht so einstellen, wie wir es von normal geöffneten Formularen gewohnt sind. Wollen wir also einen modalen Dialog einmal ohne Titelleiste anzeigen, weil er zum Beispiel einfach als Erweiterung neben einem anderen Steuerelement geöffnet werden soll, können wir das so nicht machen. Es gibt allerdings einen Workaround, den wir hier vorstellen.

Weiterlesen

Standardwerte für Fremdschlüsselfelder pflegen

Für Felder in Tabellen kann man jeweils einen Standardwert im Tabellenentwurf festlegen, der beim Anlegen eines neuen Datensatzes in dieser Tabelle vorbelegt wird. Etwas anspruchsvoller ist es, wenn wir Standardwerte durch den Benutzer festlegen wollen. Noch einen Schritt weiter gehen wir, wenn der Standardwert für ein Fremdschlüsselfeld verwendet werden soll – also zur Auswahl eines Datensatzes aus einer verknüpften Tabelle. Einfache Beispiele sind Anreden, Zahlungsmethoden, Prioritäten oder Kategorien. Hier können wir jeweils einen Eintrag anwendungsweit festlegen. Es geht aber auch noch anspruchsvoller: Wenn wir beispielsweise Adressen für Kunden in einer eigenen Tabelle speichern, wo mehrere Adressen je Kunde angelegt werden können und nur eine als Standard verwendet werden soll. Spätestens hier müssen wir auch beim Datenmodell umdenken. In diesem Beitrag schauen wir uns erst einmal an, wie wir Standardwerte für Nachschlagefelder komfortabel auswählen können.

Weiterlesen