Im Beitrag »Ribbonklassen« haben wir gezeigt, wie Sie das Ribbon allein mit VBA-Code definieren können. Nun wollen wir diese Technik in einer kleinen Beispielanwendung demonstrieren, in der wir eine Adressenliste in einem Formular anzeigen und alle Befehle zu dieser Adressenliste im Ribbon einbauen – also etwa, um einen neuen Datensatz anzulegen, einen bestehenden Datensatz zu löschen oder die Details zu einem Datensatz anzuzeigen.
Wenn Sie einen Adressblock etwa für die Anzeige in einem Bericht oder für anderweitige Nutzung zusammenstellen wollen, stoßen Sie mitunter auf eine anspruchsvolle Aufgabe. Dummerweise sind die Kundentabellen, aus denen die Adressen bezogen werden sollen, immer unterschiedlich aufgebaut. Noch dazu gibt es manchmal nicht nur eine einzige Adresse, sondern Liefer- und Rechnungsadresse. Dabei treten wiederum Unterschiede auf, wo die primäre Adresse eingetragen wird – also die Adresse, die als Rechnungs- und Lieferadresse genutzt wird, wenn nur eine Lieferadresse oder nur eine Rechnungsadresse vorliegt. Dieser Beitrag zeigt eine Funktion, mit der Sie die Adressblöcke für Ihren Einsatzzweck komfortabel zusammenstellen können.
Sie möchten den Anwendern Ihrer Datenbank die Möglichkeit anbieten, neben den eigentlichen Adressdaten auch gleich dazugehörige Geoinformationen einzusehen? Dazu eignen sich sicher die Dienste Google-Maps oder Bing-Maps. Ein Webbrowser-Steuerelement im Formular könnte als Host für jene dienen. Doch der Weg ist steiniger, als erwartet! Wie Sie die auftretenden Probleme lösen können, beschreibt dieser Beitrag.
Ein großer Teil der Kommunikation mit Kunden läuft per E-Mail. Das ist vor allem dann der Fall, wenn der Kunde ein Anliegen per E-Mail vorbringt. Manchmal muss man den Kunden aber auch aus anderen Gründen kontaktieren – beispielsweise, weil eine Lieferung per Post zurückgekommen ist. Wollen Sie dann die Kundenverwaltung öffnen, die E-Mail-Adresse des Kunden ermitteln, nach Outlook wechseln, dort eine neue E-Mail an den Kunden anlegen und Ihre Nachricht samt Betreff von Hand eingeben? Nein, denn die meisten Anfragen lassen sich leicht mit einer geeigneten Vorlage erledigen.
Der Benutzer einer Access-Datenbank will sich nicht damit beschäftigen, Where-Ausdrücke zu definieren, mit denen er die Daten seiner Datenbank filtern kann. Er braucht aussagekräftige Bezeichnungen, mit denen er die gewünschten Daten erhält – am besten mit nicht viel mehr als einem Mausklick. Das ist eine schöne Aufgabe: Also statten wir unsere Anwendung mit einer solchen Möglichkeit aus, die der Benutzer sogar noch mit selbst angewendeten Filterkriterien anreichern kann. Und das, ohne auch nur einen Hauch von SQL zu können.
Wenn Sie auf das Rückgängigmachen von Änderungen an den Daten eines Formulars reagieren wollen, haben Sie mehrere Möglichkeiten. Sie können die beiden Undo-Ereignisse des Formulars selbst und des aktiven Steuerelements nutzen (zumindest theoretisch). Oder Sie verwenden die Tastatur-Ereignisse, um die zum Rückgängigmachen von Änderungen bevorzugt verwendete Escape-Taste abzufangen. Wir stellen die beiden Techniken vor und erklären Vor- und Nachteile.
Wenn der Benutzer Änderungen an den in einem Formular angezeigten Daten vornimmt, sieht er nur noch die geänderten Daten. Was aber, wenn er beispielsweise einen Wert in ein falsches Feld eingetragen hat – zum Beispiel indem er Vorname und Nachname vertauscht? Dann möchte er die Änderung vermutlich rückgängig machen. Aber wie, wenn er den vorherigen Wert nicht mehr in Erinnerung hat? Also erleichtern wir ihm die Arbeit, indem wir die alten Werte neben den entsprechenden Textfeldern anzeigen.
Im Beitrag »RDBMS-Zugriff per VBA: Verbindungen« haben wir die Grundlage für den Zugriff auf SQL Server-Datenbanken geschaffen, »RDBMS-Zugriff per VBA: Daten abfragen« zeigt, wie Sie die Daten einer SQL Server-Datenbank ermitteln. Im vorliegenden Teil dieser Beitragsreihe erfahren Sie, wie Sie die Daten einer SQL Server-Datenbank bearbeiten.
Wir haben in Access im Unternehmen bereits einige Techniken rund um das Ribbon vorgestellt, aber noch sehr wenige unserer Lösungen tatsächlich mit der Ribbon-Technologie ausgestattet. Das wollen wir am Beispiel des Ticketsystems, das wir in einer eigenen Beitragsreihe behandeln, nachholen. Dort fügen wir nicht nur einige Ribbon-Schaltflächen zur Steuerung der Anwendung ein, sondern legen auch einen kleinen Backstage-Bereich zur Einstellung von Anwendungsoptionen an.
Eine Schnellsuche ist eine tolle Sache: Sie geben Buchstabe für Buchstabe ein und erhalten direkt nach der Eingabe das passende Suchergebnis. Dummerweise kann es je nach Datenherkunft und Backend auch einmal etwas länger dauern beziehungsweise performancemindernd sein, wenn Sie allzu oft neue Abfragen absenden. Doch es gibt einen feinen Kompromiss: Eine Schnellsuche, die nicht direkt nach der Eingabe eines Buchstaben das neue Suchergebnis präsentiert, sondern die erst nach einem gewissen Zeitraum ohne neue Eingabe neue Daten lädt.
Kombinationsfelder sind wirklich praktisch, wenn es um die Auswahl von Lookupdaten geht. Aber immerhin muss man immer noch auf die Schaltfläche zum Aufklappen der Liste klicken, um einen der Einträge auszuwählen. Wir haben uns eine noch schnellere Variante einfallen lassen, bei der Sie einfach nur mit der Maus in das Kombinationsfeld klicken und diese dann nach oben oder unten bewegen müssen, um zwischen den Einträgen zu navigieren. Dieser Beitrag zeigt, wie Sie ein Kombinationsfeld mit dieser Funktion ausstatten.
Wenn Sie eine Anwendung programmieren, die ihre Daten nur über die Benutzeroberfläche ändert, sehen Sie die Änderungen ja immer direkt in den entsprechenden Formularen und Steuerelementen. Aber manchmal erstellen, ändern oder löschen Sie Daten auch per Mausklick auf eine Schaltfläche, und die dahinterliegende Prozedur erledigt den Rest. Gerade in der Entwicklungsphase möchen Sie dann natürlich schnell sehen, ob die Daten auch wirklich wie gewünscht editiert wurden. Dazu quält man sich dann meist durch die einzelnen Tabellen und prüft das Ergebnis. Wenn sich die Daten über verknüpfte Tabellen erstrecken, wird dies erst recht anstrengend. Aber nicht mit der Lösung, die wir in diesem Beitrag vorstellen!