Reflexive 1:n-Beziehung zu m:n-Beziehung

Manchmal legt man eine 1:n-Beziehung zwischen zwei Tabellen an, um später festzustellen, dass eine m:n-Beziehung doch die funktionalere Variante ist. Ein Beispiel sind reflexive Beziehungen, mit denen man etwa Vater-Kind-Beziehungen abbildet oder Partner-Beziehungen. Andere Beispiele sind solche wie zwischen Produkten und Kategorien – man dachte zunächst, dass es reicht, wenn man jedes Produkt nur einer Kategorie zuordnen kann, aber man dann erkennt, dass es für verschiedene Anwendungsfälle doch günstiger wäre, wenn man ein Produkt mehr als einer Kategorie zuordnen kann. Ähnliche Fälle sind Mitarbeiter und Funktionen oder Abteilungen. In diesem Beitrag schauen wir uns das Beispiel eines Kunden an, der in seinem Sportverein partnerschaftliche Beziehungen über ein Fremdschlüsselfeld der Tabelle tblMitglieder auf diese selbst abgebildet hat. Hier gab es mehrere Gründe, um diese Beziehung in eine m:n-Beziehung umzuwandeln. Welche das sind und wie wir die Umwandlung durchgeführt haben, lesen Sie in diesem Beitrag.

Weiterlesen

Erledigt-Status in Haupt- und Unterformular synchron

Ein Kunde hatte neulich die Anforderung, dass er Produktionsaufträge mit den zu produzierenden Teilen im Haupt- und Unterformular abbilden wollte. An sich kein Problem, wenn man Haupt- und Unterformular entsprechend verknüpft. Er wünschte sich jedoch sowohl in der Tabelle der Produktionsaufträge als auch in der für die Teile jeweils ein Kontrollkästchen, das den Status abbildet. Wenn der vollständige Auftrag erledigt ist, soll dieser samt Teileliste einen Haken erhalten. Ist der Auftrag noch offen, sind alle Kontrollkästchen leer. Aber wenn nicht alle Teile fertig produziert sind, sollte dies im Produktionsauftrag auf eine spezielle Art gekennzeichnet werden. Er hat dabei den Dreifachstatus des Kontrollkästchens entdeckt und wünschte sich, dass das Kontrollkästchen in diesem Fall für den Produktionsauftrag den dritten Status anzeigt – in aktuellen Access-Versionen ein gefülltes Kontrollkästchen mit einem Minus-Zeichen. Wie das gelingt und wie wir die Zustände von Produktionsauftrag und Teilen synchron halten, zeigen wir in diesem Beitrag.

Weiterlesen

SQL ausführen mit Execute statt DoCmd.RunSQL

In unseren Audits mit unseren Kunden und Lesern untersuchen wir auch regelmäßig den VBA-Code in deren Access-Anwendungen. Dabei fallen uns immer wieder Programmiergewohnheiten auf, die irgendwann einmal eingeführt und seitdem nie wieder geändert wurden. Eine davon ist, SQL-Anweisungen wie INSERT INTO, UPDATE oder DELETE mit der Methode RunSQL der DoCmd-Klasse auszuführen. Das ist grundsätzlich nicht falsch, solange dies zum Ziel führt. Es gibt jedoch noch mindestens eine Alternative, insbesondere den Aufruf mit der Execute-Methode der Database-Klasse. Diese führt zwar auch nur die übergebene Aktionsabfrage aus, aber sie bietet dennoch einige Vorteile gegenüber DoCmd.RunSQL. Welche das sind und wie wir überhaupt die DoCmd.RunSQL-Methode durch die Execute-Methode ersetzen können, zeigen wir in diesem Beitrag.

Weiterlesen