Datenbanken synchronisieren (Access 97, 2000)
Veröffentlicht am 30.12.2003
Frage:
Für eine Tabelle muss ein Primärschlüsselfeld erstellt werden, das aus einem String und einem Inkrement (möglichst Autowertfeld) kombiniert wird, also in der Art „NameA_1“, „NameA_2“, usw. Dabei ist ‚NameA‘ identisch je Tabelle.
Eine zweite Tabelle in einer strukturell identischen, aber auf einem anderen Rechner installierten Datenbank muss analog indiziert werden, also „NameB_1, „NameB_2“, usw. Beide Tabellen sollen dann per Anfügeabfrage an eine dritte Tabelle (in einer zentralen Datenbank) angefügt werden. Zweck des Ganzen ist, in der Haupttabelle die Herkunft des Datensatzes sofort zu erkennen.
Ein anderer Primärschlüssel ist aufgrund der Tabellenstruktur nicht möglich und ein einfaches Autowert-Feld pro Tabelle führt logischerweise zu doppelt indizierten Datensätzen in beiden Tabellen, weswegen die Anfügeabfrage dann nicht möglich wäre.
Wie ließe sich so etwas bewerkstelligen?

Antwort:
Anstatt den Stringwert und die Autowert-Zahl in einem Feld zu kombinieren, können Sie den Primärschlüssel über zwei verschiedene Felder aufteilen. In der Beispieldatenbank sehen Sie eine Tabelle namens tblRechnerA, die ein Textfeld „RechnerName“ und einen Autowert-Feld „ID“ enthält. Beide Felder sind im Primärschlüssel-Index enthalten: siehe Abbildung 1 unten.
Der Standardwert des Textfeldes ist auf =“NameA“ eingestellt, damit der Rechnername automatisch vergeben wird. Eine zweite Tabelle tblRechnerB hat die gleiche Struktur mit dem Textfeld-Standardwert =“NameB“. Wenn Sie also Daten im Feld „TextDaten“ eingeben, bleibt der Primärschlüssel über beide Tabellen eindeutig.
Die Abfrage zum Anfügen von Daten aus beiden Tabellen in eine Haupttabelle könnte etwa so aussehen:
Function DatenAnfügen(TabelleName As String)
DoCmd.RunSQL _
„INSERT INTO tblHauptTabelle (RechnerName,ID,TextDaten)“ _
& „SELECT RechnerName,ID,TextDaten FROM “ & TabelleName
End Function
Der Parameter TabelleName ist der Name der Tabelle, also z.B. „tblRechnerA“.