Beziehungskiste, c't 8/1995, S.  194 (ae)
m:n-Verbindungen mit Lotus Approach 3.0
---------------------------------------------

Beispiel-Anwendung fr das Datenbankprogramm Approach 3.0, getestet mit
Version 3.02. Die Anwendung dient zur Demonstration, was mit
m:n-Verknpfungen und alias-Verbindungen von Tabellen mglich ist.

Es wird keine Gewhr fr Fehlerfreiheit bernommen. Da es um die
prinzipielle Funktionsfhigkeit ging, wurden auch die Makros noch nicht
in jedem Fall vollstndig optimiert.

Das Urheberrecht fr die in Form der Datei "ADR_CT.APR" vorliegende
Datenbank-Oberflche einschlielich enthaltener Makros liegt bei c't
und dem Autor. Die Verwendung zum Test und fr private Zwecke ist
erlaubt, kommerzielle Verwendung ausdrcklich untersagt. Hinweise,
Bemerkungen und Rckfragen sind willkommen und knnen ber die
c't-Redaktion oder ber die CompuServe-Adresse 100103,3575 an den
Autor gerichtet werden.

------------------------Die Dateien---------------------

ADR_CT.APP     Die Approach-Datei mit allen Einstellungen der Oberflche
               und den Makros
ORGANIS.DBF    enthlt die Organisationen
ABTEILNG.DBF   enthlt die Abteilungen zu einzelnen Organsiationen
POSITION.DBF   enthlt die Verknpfungs-Informationen zwischen ABTEILNG und
               PERSONEN und Angaben zur Position (m:n-Tabelle)
PERSONEN.DBF   wie der Name sagt
PRIVAT.DBF     weitere Angaben zu manchen Personen
BEZIEHNG.DBF   spezielle Tabelle fr die m:n-Verbindung der
               PERSONEN-Tabelle mit Ihrem Alias PERSONEN:2
BEZ_DAT.DBF    fr alles, was auerdem noch in einer Beziehung
               interessant ist.
*.DBT          diese Dateien enthalten die Informationen aus Memo-Feldern
*.ADX          Von Approach automatisch angelegte Index-Dateien

------------------------Beschreibung-------------------

Die Datenbank-Oberflche verwaltet sieben Tabellen, eine davon
zustzlich als Alias-Tabelle, in nur zwei Hauptformularen.
Organisationen und Personen knnen beliebig miteinander verknpft
werden. So ist es (anders als bei blichen 1:n-Beziehungen) mglich,
eine Person mehreren Firmen und Organisationen zuzuordnen. Weiterhin
knnen zwischen Personen Beziehungen beliebiger Art aufgenommen
werden. Vorgegeben sind Familienbeziehungen, denkbar sind
beispielsweise auch Beziehungen der Art Lehrer-Schler oder  Vor
gesetzter-Untergebener, die auch in die vorgegebene Struktur eingefgt
werden knnen (macht jedoch nderungen an Feld-Vorgaben und Makros
erforderlich).

Die Verknpfung zwischen Person und Abteilung erfolgt ber ID-Nummern,
die Verknpfung zwischen Abteilungs- und Organsiations-Tabelle jedoch
ber die Klarnamen der Organisationen. Eleganter wre es gewesen, auch
hier IDs zu verwenden. Das erwies sich mit der gewhlten Struktur der
Formulare jedoch nicht ohne weiteres als mglich. Hauptschlich liegt
es daran, da Approach als Beschreibungsfeld fr ein ID-Drop-Down-Feld
(ein solches Feld wird in der obersten Tabelle des Personen-Formulars
zur Auswahl einer O rganisation verwendet) keine Felder zult, die
aus Feldern unterschiedlicher Tabellen berechnet werden. Die Tabelle
"Abteilung", aus der die Daten fr das Beschreibungsfeld entnommen
werden, mu deshalb beide Felder "Organisation" und "Abteilung"
enthalten. Wenn aber das Feld "Organisation" sowieso in den Tabellen
"Organis" und "Abteilung" vorkommt, kann es auch gleich als
Verknpfungsfeld benutzt werden.

Eine weitere Schwierigkeit beim Programmieren der Makros ergab sich
durch einen offensichtlichen Fehler in der Ereignisbehandlung von
Approach: wird ein Makro mit dem Ereignis "mit Tab in Feld..."
verknpft, wird das Makro zwar gestartet, doch die Einfgemarke steht
anschlieend nicht mehr in diesem Feld. Es wird also unmglich, dieses
Feld zu erreichen und damit zu bearbeiten. Abhilfe schafft der
Makro-Befehl "Tab", mit dem ein bestimmtes Feld gewhlt werden kann -
jedoch nur, wenn das Feld in der Eingaber eihenfolge einen definierten
Platz hat. Das ist bei Feldern in Untertabellen (die ja verschieden
gefllt sein knnen) generell nicht der Fall.

Die Funktion der Tabellen und die Verknpfungen sind im genannten
c't-Artikel erlutert. Die Steuerung und die berprfung von Eingaben
in die jeweiligen Formulare erfolgt ber Makros, von denen die
wichtigsten nachfolgend erklrt sind:

Open - Makros mit diesem Namen werden beim ffnen einer Approach-Datei
automatisch ausgefhrt. Open dient zum Feststellen von maxPID, der PID
des letzten Personen-Datensatzes. Die Kenntnis der hchsten PID ist
ntig, um fr die Dubletten-Prfung Personen-Neueingaben von
nderungen unterscheiden zu knnen. Besser wre, dafr die zuletzt
vergebene Seriennummer zu verwenden, die sowieso von Approach
gespeichert wird - doch laut Auskunft des Supports gibt es keine
Mglichkeit, diese interne Variable in Makros z u verwenden. maxPID
wird nach der Neueingabe von Personen automatisch aktualisiert.

dubl_1 bis dubl_3 - Die Makro-Kette wird ereignisorientiert nach dem
Verlassen des Personennamen-Feldes gestartet. Erst wird berprft, ob
eine Neueingabe vorliegt (PID > maxPID?), wenn ja, werden alle
Personen gleichen Namens aufgelistet. Es kann entweder eine vorhandene
Person ausgewhlt (dubl_3_auswahl) oder eine zustzliche Person
gleichen Namens angelegt werden (dubl_3_neu). Bei Auswahl einer
bereits vorhandenen Person wird die Beziehung zu einer eventuell
vorher festgelegten Firma automatisch hergeste llt. Dabei dienen die
Variablenfelder vBID und vPID als Zwischenspeicher fr die IDs, die in
die Tabelle "Position" eingetragen werden mssen.

B1_Person_hinzufgen    - Beim Drcken des Buttons "Person hinzufgen"
im Organisationen-Formular wird zuerst berprft, ob fr den
(eventuell gerade neu angelegten) Organisationen-Datensatz schon ein
Abteilungsdatensatz existiert. Dieser ist nmlich als Verbindung der
Organisationen-Tabelle mit der Position-Tabelle unerllich. Falls
nicht, wird der Abteilungsdatensatz angelegt (mit Abteilung "unbek."
als Vorgabe). Anschlieend wird ins Personen-Formular gewechselt, dort
ein neuer Datensatz angelegt und gl ch mit der aktuellen Organisation
und Abteilung verbunden (vBID, in der die Abteilungs-ID gespeichert
ist, wird ins Feld Position.BID eingetragen).

Bez_hinzufgen  - Das komplexeste Makro von allen. Es wird
ereignisorientiert gestartet, wenn in der Untertabelle "Beziehungen"
im Personen-Formular eine nderung mittels des PIDb-Auswahlfeldes
vorgenommen wird (der Benutzer sieht statt der PID-Nummern die
Klarnamen aus dem berechneten Feld "name-vollst2"). Die Beziehung
selbst mu vorher festgelegt sein (ebenfalls ein Auswahlfeld), sonst
erscheint eine entsprechende Meldung. Zuerst wird berprft, ob das
Geschlecht der gewhlten Zielperson zur gewhlten Be iehung pat
("Mutter" mu immer weiblich sein). Falls nicht, erscheint eine
Meldung. Abhngig vom Geschlecht der Ausgangsperson und gewhlter
Beziehung wird nun die Rck-Beziehung ermittelt ("weiblich" und
"Vater" ergibt als Rck-Beziehung - vom Vater aus gesehen -
"Tochter"). Dann wird in die Beziehungstabelle gewechselt und
(zustzlich zum bereits vom Programm automatisch angelegten Datensatz)
ein zweiter Datensatz mit vertauschten ID-Nummern angelegt, in den
auch die ermittelte Rck-Beziehung eingetragen wird. Zum Schlu wird
wieder zum Personen-Formular gewechselt und dort der Datensatz
gesucht, mit dem die Person gerade verknpft wurde. Damit ist unter
anderem eine sofortige Kontrolle der automatisch eingetragenen Daten
mglich.

Bez_lschen - Da die Tabelle "Beziehungen" pro Beziehung zwei
Datenstze enthlt, mssen beim Lschen der Beziehung auch zwei
gelscht werden. Das gewhrleistet dieses Makro.



