Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Anfügeabfrage bei verknüpften Tabellen

Begonnen von MemoK, Juli 28, 2020, 11:34:11

⏪ vorheriges - nächstes ⏩

MemoK

Hallo zusammen,

ich bin hier ganz neu und musste mich registrieren, weil ich sowohl auf Deutsch, als auch auf Englisch, keine Lösung für mein Anliegen gefunden habe.

Ich bereite über Access eine Datenbank vor, bei der ich die Daten einer nicht-verknüpften Tabelle in eine verknüpfte Tabelle anfügen möchte. Jedoch bekomme ich dabei die Fehlermeldung: Die Operation muss eine aktualisierbare Abfrage verwenden.
Erstelle ich eine nicht-verknüpfte Tabelle mit der selben Struktur, dann erfolgt die Anfügeabfrage. Es funktioniert nur bei der verknüpften Tabelle nicht.

Ich würde mich über eine zeitnahe Rückmeldung sehr freuen :)

Viele Grüße,
Memo

Jonny

Hallo,
Abfragen machen keinen Unterschied zwischen verknüpfte und nicht verknüpfte Tabellen.
Hier muss der Fehler wo anders liegen. Hast du die erforderlichen Rechte in der DB die verknüpft ist.
Öffne doch einfach mal die verknüpfte Tabelle und gebe per Hand Daten ein.

Gruß Johann

MemoK

Hallo Johann,

vielen Dank für die rasche Rückmeldung.
Das funktioniert tatsächlich nicht. Dann müssen mir also die Rechte fehlen.
Allerdings sind unter 'Eigenschaften --> Sicherheit' alle Rechte, sowohl für die Access-Datenbank, als auch für die verknüpfte Tabelle zugelassen. Gibt es hierzu einen anderen Weg?

Gruß,
Memo

ebs17

Die genannte Meldung gibt es desweilen bei Aktualisierungsabfragen, jedoch m.W. nach nie bei Anfügeabfragen.
Du solltest also vielleicht Deine Beschreibung präzisieren oder u.U.sogar die betroffene Abfrage (=> SQL-Anweisung) zeigen.
Mit freundlichem Glück Auf!

Eberhard

MemoK

Genau das ist auch mein Problem. Es handelt sich nicht um eine Aktualisierung sondern um eine Anfügeabfrage. Bei einer nicht-verknüpften Tabelle funktioniert die Abfrage fehlerfrei. Ich bekomme diese Fehlermeldung nur bei der verknüpften Tabelle.
Die Daten aus der nicht-verknüpften Tabelle 'interstep_CMO_Activation' müssen in die verknüpfte Tabelle 'CMO_Activation' eingefügt werden.
Mein SQL-Code sieht wie folgt aus:

INSERT INTO CMO_Activation ( [Purch# Org], [Supplier No ERP], [Transaction Type], Plant, [Output Medium ], [Default Flag] )
SELECT interstep_CMO_Activation.[Purch# Org], interstep_CMO_Activation.[Supplier No ERP], interstep_CMO_Activation.[Transaction Type], interstep_CMO_Activation.Plant, interstep_CMO_Activation.[Output Medium ], interstep_CMO_Activation.[Default Flag]
FROM interstep_CMO_Activation;
 

DF6GL

Hallo,

zeig mal den Screenshot des Beziehungsfensters.

Womit und wie ist die "verknüpfte Tabelle" denn verbunden?

Evtl. gibt es eindeutig indizierte Felder, in die eingefügt wird oder es werden notwendige, bzw. korrekte  Daten nicht in Fremdschlüsselfelder eingefügt.


btw: 
Auf Sonder- und Leerzeichen in Namen DRINGEND verzichten.

MemoK

Ich habe gar keine Beziehungen zwischen den Tabellen. Wenn ich versuche die Dateien miteinander in Beziehung zu setzen sind 'Mit referentieller Integrität' und die beiden anderen Felder ausgegraut. Drücke ich dennoch auf Erstellen kommt die Fehlermeldung: Feld 'Purch# Org' wurde nicht gefunden.

Im Prinzip klingt mein Problem einfach:
Es sind zwei identische Tabellen. Die Eine enthält Daten, die Andere keine. Die Daten der Einen soll der Anderen angefügt werden.

ebs17

Zitatverknüpfte Tabelle
Bei einer präzisen Beschreibung würde ich zumindest erwarten, dass erläutert wird, zu welcher Kokosnuss verknüpft wurde und ob man da überhaupt Schreibrechte hat.
Mit freundlichem Glück Auf!

Eberhard

MemoK

#8
Zitat von: ebs17 am Juli 28, 2020, 15:35:31
Zitat von: undefinedverknüpfte Tabelle
Bei einer präzisen Beschreibung würde ich zumindest erwarten, dass erläutert wird, zu welcher Kokosnuss verknüpft wurde und ob man da überhaupt Schreibrechte hat.
Na dann beschreibe ich mal alles ziemlich ausführlich:
Im Rahmen meiner Arbeit habe ich eine Access-Datenbank erstellt.
Diese Datenbank vergleicht unter Anderem zwei Listen. Eine 'Main-Liste' und eine 'Neue-Liste'.
Sind Daten hinzugekommen,
werden Sie der Main-Liste hinzugefügt.
Ebenfalls werden die hinzugekommenen Daten einer weiteren Liste hinzugefügt. Diese Liste heißt in meinem Fall 'interstep_CMO_Activation'. Dabei werden Duplikate entfernt und die Daten einem bestimmten Template angepasst.
Nun sind in der Tabelle 'interstep_CMO_Activation' Daten drin, die einer weiteren Tabelle (CMO_Activation) angefügt werden sollen. Diese Tabelle ist verknüpft und in einem SharePoint abgelegt. Bei der Anfügeabfrage möchte ich alle Daten der Tabelle 'interstep_CMO_Activation' in die verknüpfte Tabelle 'CMO_Activation' anfügen, damit die neu hinzugekommenen Daten ständig aus dem SharePoint als Excel-Liste von Kollegen abgerufen werden können. Leider kommt beim Ausführen der Anfügeabfrage die Fehlermeldung: Operation muss eine aktualisierbare abfrage verwenden.
Wie löse ich nun das Problem.

crystal

Hallo MemoK,
allgemeine Antworten:

Bevor Daten einer Tabelle1 angefügt werden können, die Verküpfungen zu einer anderen Tabelle2 hat, müssen Einträge dort gemacht werden.

Mir ist nicht bekannt, dass Access bzw. SQL es zulassen würde, Daten "gleichzeitig" in z. B. zwei Tabellen einzufügen, die miteinander verknüpft sind. Zuerst müssen die Daten in der Tochtertabelle eingefügt werden und einen eindeutigen Schlüssel erhalten, der dann beim Eintragen der Daten in die Muttertabelle als Referenz dient. Sicher nicht einfach.

Einfaches Beispiel: du hast eine Auftrags-Tabelle (Muttertabelle) und eine Produkt-Tabelle (Tochtertabelle). In einer externen Liste (Excel) hast du u. a. Aufträge mit NEUEN Produkten. Es müssen diese NEUEN Produkte dann zunächst in die Produkt-Tabelle eingetragen werden, um anschließened die Aufträge eintragen zu können. Dazu musst du allerdings die neu vergebene Produkt-Kennung wissen, um die Referenz herstellen zu können.

Also müsstest du zuerst die neuen Produkte eintragen und dann beim Eintragen der Aufträge die Produkt-Kennung (Referenzfeld) zunächst ermitteln, da du ja nicht unbedingt weißt, welchen Primärschlüssel die neuen Produkte erhalten haben (insbes. bei Verwendung eines Autowertes als Primärschlüssel der Produkt-Tabelle).

Etwas einfacher wäre es, wenn - im Beispiel - die Produkt-Tabelle einen NICHT-Autowert als Primärschlüssel hätte, etwa eine von einem anderen System vorgegebene eindeutige Produkt-Nummer oder einen sonstigen eindeutigen Index. Dann müsstest du "nur" sicherstellen, dass alle Referenzen auf Produkte innerhalb der zu importierenden Aufträge auch schon existieren und diese ggf. zuvor neu anlegen.

Es ist dies auch so ein "Huhn-Ei-Problem" oder besser "Vater-Sohn" oder "Mutter-Tochter" oder "Eltern-Kind". Du musst erst die "Kinder" anlegen, bevor du sie den "Eltern" zuordnen kannst.

Deine Daten zunächst in eine temporäre Tabelle zu importieren, die keine Verknüpfungen zu anderen Tabellen enthält, ist wohl schon ein guter erster Ansatz.

Dann müsstest du aus dieser Tabelle (die ALLE Felder aus BEIDEN/ALLEN Tabellen enthält) diejenigen Datensätze selektieren, die in deiner/deinen "Kind-Tabelle/n" noch nicht enthalten sind und deren Daten dort eintragen. Dabei erhälst du möglicherweise neue Schlüssel. Diese müsstest du dann in deiner "Temporär-Tabelle" ersetzen und dann die "Hauptdaten" aus der Temporär-Tabelle in der "Haupt-Tabelle" anfügen (inkl. Referenz/en, die ja dann nicht mehr ins Leere führt/führen).

Man könnte versuchen, das mit SQL hinzubasteln, einfacher wäre es m. E. allerdings, die Daten zunächst in die Temporär-Tabelle zu importieren (komplett, s. o.) und dann per VBA (DAO oder besser ADO) bei jedem dieser Datensätze nachzuschauen, ob die betreffenden "Kinder" bereits existieren. Wenn nicht - neu anlegen, neuen Schlüssel ermitteln und diesen in der temporären Tabelle anpassen. Dann weiter zum nächsten "Kind" (erneut prüfen, ggf. anlegen, Referenz anpassen) und weiter zum nächsten Datensatz der temporären Tabelle. Wenn dieser Vorgang abgeschlossen ist, kannst du die Haupt-Daten der temporären Tabelle in die Haupt-Tabelle (inkl. Referenzen) "en-Bloc" einfügen oder du machst das individuell für jeden einzelnen Datensatz der Temporär-Tabelle, den du ja sowieso schon interpretierst. Danach solltest du den/die betrachteten Datensatz/Datensätze der temporären Tabelle löschen oder per zusätzlichem Feld als "erledigt" kennzeichnen.

Da deine zu importierenden Daten ja wohl aus einem Fremdsystem stammen, könntest du die Admins dieses Systems natürlich auch auffordern, dir "in-sich-konsistente" Daten zu liefern, also z. B. eine Liste aller neuen Produkte, die du einlesen könntest, bevor du die "eigentlichen" Aufträge einliest.

Ich hoffe, ich habe mich verständlich ausgedrückt. Ich neige leider etwas zu Ausschweifungen, immer aber im Bestreben, ein Problem - und mögliche Lösungen - verständlich und nachvollziehbar zu machen, sozusagen "Aha-Effekte" zu erzeugen. Ich bin mir sicher, dass mir dies nicht immer gelingt.

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MemoK

Hallo Crystal,

ich bin dir für deine ausführliche Antwort sehr dankbar.
Leider ist mir der "Aha-Effekt" tatsächlich nicht gelungen. Ich verstehe deine Beschreibungen, doch die bringen mich nicht wirklich weiter.
Ich mach nun seit längerem an der DB rum. Nun möchte ich meine Frage anders beschreiben, um so das eigentlich Problem feststellen zu können:

Ich habe eine Access-Datenbank. Darin habe ich eine verknüpfte Tabelle importiert. Ich kann in dieser verknüpften Tabelle keine Änderungen vornehmen (neue Datensätze, etc.). Woran liegt das und wie kann ich dieses Problem lösen?

Besten Dank!

Gruß,
Memo

ebs17

SharePoint ist keine Datenbank an sich. Daher sollte man auch nicht in allen Fällen datenbankgemäßes Verhalten voraussetzen, jedenfalls nicht vor einem expliziten Testen.

Kannst Du denn per Hand einen Datensatz in die verknüpfte Tabelle anfügen? Wenn nein, ist die Anfügeabfrage unschuldig.
Mit freundlichem Glück Auf!

Eberhard

crystal

Hallo Memo,

also unter "verknüpfter Tabelle" hatte ich (und andere vielleicht auch) eine innerhalb von Access verknüpfte Access-Tabelle verstanden.

Meinst du damit eine Tabelle in einer anderen Datenbank, also z. B. "MySQL", "SQLServer", Oracle", auch Access usw?
Ja. Zumindest wenn ich oben nochmal nachlese... (mea culpa!)

Die Rechte, die du innerhalb Access für die externe Tabelle zu haben glaubst, entsprechen nicht zwingend den tatsächlichen Rechten im fremden DB-System, insbesondere dann, wenn der Ursprung der "Tabelle" eigentlich eine Abfrage (syn. Query, View) ist und diese im Fremdsystem mit "read only" markiert wurde (wie zumeist).

Der entscheidende Hinweis kam bereits von Jonny und du konntest ja auch feststellen, dass du keinen direkten Schreib-Zugriff hast (s. o.).

Um also in die fremde Tabelle schreiben zu können, müsstest du dich wohl mit den Admins dieses Systems zusammensetzen, denn die werden es kaum "einfach" so erlauben, schreibend/anfügend auf ihre Datenbank zuzugreifen, schon gar nicht von einer "so unsicheren Applikation wie Access". Du könntest ihnen anbieten, eine Datei zu erstellen (z. B. CSV), die dort importierbar wäre. Dazu müssten die Kollegen allerdings entsprechende "Schnittstellen" zur Verfügung stellen...

Klar ist dann auch, warum deine Update-Versuche funktionieren, wenn du keine "verknüpfte Tabelle" benutzt, weil dann alles nur lokal in deiner Access-DB erfolgt (und das interessiert die "Fremd-Admins" nicht die Bohne).

Grüße und viel Erfolg bei Gesprächen mit den "Fremd-Admins", die "Ihre" Datenbank natürlich um jeden Preis der Welt schützen wollen,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

MemoK

Hallo Crystal,

vielen Dank. Jetzt haben wir endlich einen gemeinsamen Nenner erreicht :)
Dann muss ich wohl die "Fremd-Admins" kontaktieren und mir die Rechte holen oder eine Alternative anbieten lassen.

Besten Dank!

Viele Grüße,
Memo

MemoK

evtl. eine kleine Ergänzung. Die externe Datei ist eine Excel-Liste, die ich erstellt und ins Sharepoint geladen habe. Die wird von sonst niemanden bearbeitet, sondern nur gelesen. Muss ich trotzdem die Admins um Schreib-Leserechte anfragen?