Elite Veteran
Beiträge: 876
Ort: Wien | Hallo, Micmen!
micmen - 24.01.13
ich möchte gerne eine Anfügeabfrage bauen, die in eine Tabelle B Datensätze anfügt. Die Werte für die Felder kommen zum Teil aus einer Tabelle A und zum Teil von aktuell berechneten oder eingegebenen Werten. Beim Anfügen soll aber beachtet werden, daß nicht Datensätze generiert werden, wenn die identische Kombination an Werten in zwei der Felder bereits in einem Datensatz vorkommt.
Ich könnte jetzt an der Struktur von Tabelle B etwas ändern und einen Index für die beiden Felder anlegen, der nur eindeutige Werte zuläßt. Aber dann würde die Abfrage regelmäßig versuchen, verbotene Datensätze zu speichern, immer mit einem Fehler, und ich würde es nicht merken, wenn einmal ein ähnlicher Fehler durch ein "echtes Problem" hervorgerufen wird und nicht durch diese etwas unsaubere Vorgehensweise. Ich müßte diesen Fehler ja unterdrücken und würde nie mehr erkennen, wenn anderweitig (wie z.B. beim Primärschlüssel) gegen Eindeutigkeitsregeln verstoßen wird.
Ich schätze aber mal, da gibt es keine Lösung, oder?
Ich weiß nicht, ob ich deinen Einwand gegen die für mich durchaus sauber klingende Lösung mit einem Mehrfeldindex so ganz verstehe, aber es gibt an sich schon einen anderen Weg:
Wenn die neuen Werte bzw. die zu prüfenden Felder nur aus einer anderen Tabelle kommen, löst man das über mehrere OUTER JOINs + 1 NULL-Kriterium nach dem Prinzip von:
Datensätze aus A, die nicht in B sind
http://www.donkarl.com?FAQ3.16
Wenn du mit "aktuell berechneten oder eingegebenen Werten" sowas wie Formularbezüge oder sonstige Parameter in einer Abfrage meinst, dann könntest du die als Auswahlabfrage speichern und danach in der Anfügeabfrage die o.a. Prüfung von der gespeicherten Abfrage gegen die Zieltabelle veranstalten.
----- Servus
Karl
*********
Access-Entwickler-Konferenz: https://www.donkarl.com/?aek
Access DevCon Vienna: https://www.donkarl.com/devcon
Access Forever: https://www.accessforever.org
Access News: https://www.youtube.com/playlist?list=PLVCeBbJIMDvdJ8ghMbEakJ6_EQyvy... |