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.
Was lange währt, wird endlich gut: Hier kommt der zweite Teil zu der vor einigen Ausgaben begonnenen Reihe zum Thema Stücklisten. Nachdem das TreeView-Steuerelement zur Anzeige und zum Bearbeiten von Baugruppen und Teilen steht, erweitern wir die Lösung nun um Kontextmenü-Einträge, mit denen Sie Baugruppen und Elemente hinzufügen, bearbeiten und entfernen können.
Im Beitrag Verknüpfte Daten suchen haben wir eine Lösung beschrieben, die man zwar prima in eine Datenbank integrieren und dann dort nutzen kann. Allerdings ist es doch aufwendig, jedes Mal erst die benötigten Objekte zu importieren – und außerdem steigert das Verteilen des gleichen Codes auf viele verschiedene Datenbanke nicht unbedingt die Wartbarkeit. Da die genannte Lösung nicht für den Benutzer, sondern eher für den Entwickler gedacht ist, wollen wir diese in ein Add-In umwandeln. Dieser Beitrag zeigt die Vorgehensweise und auch die Fallstricke.
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.
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!
Manchmal möchten Sie einen neuen Datensatz auf Basis eines bereits vorhandenen Datensatzes anlegen – beispielsweise um diesen anschließend anzupassen. Dazu gibt es unter Access verschiedene Möglichkeiten – per Benutzeroberfläche oder auch per VBA. Wir schauen uns die Varianten an.