PDA

Vollständige Version anzeigen : Bei Anfügeabfrage Primärschlüssel anfügen?


Cowestu
13.06.2012, 15:09
Hallo zusammen,

ich habe ein kleine snerviges Problem. Immer wenn ich über VBA eine SQL Anfügeabfrage ausführen will, meldet er mir eine Schlüsselverletzung.
Die Abfrage habe ich mit dem Abfrageeditor erstell und sie ist nicht lang.
Das Zielfeld ist ein Primärschlüssel ohne jegliches vorgegebenes Format (das habe ich mittlerweile gelöscht, weil bei einem selben vorgegebenem Format von Formularfeld und ZielTabellenFeld etwas von Typumwandlungsfehler gemeldet wurde).

Der Code sieht folgendermaßen aus:
VBA

strSQL = "INSERT INTO Bauteilliste ( Bautteilnummer1 ) " _
& "SELECT [Forms].[DateneingabeBauteile].[Bauteilnummer1] AS Ausdr1; "
CurrentDb.Execute strSQL, dbFailOnError


Wenn ich den reinen SQL-Code als anfügeabfrage ausführe, gibt es die Meldung, dass 1 Datensatz angefügt wird. Dieser ist danach aber in der Tabelle nicht vorhanden....

Atrus2711
13.06.2012, 15:16
Ein Primärschlüssel verhindert Duplikate. Da gibts kein Pardon. Wenn du die Meldung erhältst, ist die gerechtfertigt. Prüfs halt mal nach.
Die typische Anfügeabfrage für einen Satz, der aus dem derzeitgen Formularzustand geholt werden soll, ist
strSQL = "INSERT INTO Bauteilliste ( Bautteilnummer1 ) " _
& "VALUES (" & [Forms].[DateneingabeBauteile].[Bauteilnummer1] & ")"

Cowestu
13.06.2012, 15:19
Damit funktioniert es leider auch nicht.

Aber wie kann es eine Schlüsselverletzung geben, wenn bis jetzt noch nichts in der Tabelle drin steht?

Atrus2711
13.06.2012, 15:21
wenn bis jetzt noch nichts in der Tabelle drin steht#
Diese Info ist neu...

Mach die Tabelle mal manuell auf, und schau, dass alle Filter aus sind. Füge den gewünschten Wert dann mal manuell ein. Was passiert?

Cowestu
13.06.2012, 15:34
jetzt hab ich es rausgefunden...
Habe eine mehr als 10stellige zahl und das Feld war auf Long Integer gestellt, was ja nur bis 2 milliarden geht... wenn die 10stellige zahl mit einer 3 (+) anfängt, kann das ja nicht funktionieren....


Welches Format muss ich dann jetzt wählen? Currency, wenn ich die Einteilungen richtig verstanden habe....

Atrus2711
13.06.2012, 15:35
Ja, oder Dezimal mit 0 Nachkommastellen.

PS: nicht jede numerische Angabe muss ein Zahlen-Datentyp sein. Die PLZ ist z.B. numerisch, sollte aber eher Text sein. Ist das hier vielleicht auch so ein Fall?

Cowestu
13.06.2012, 15:37
warum sollte die PLZ ein text sein?

Dann kann ich vllt entscheiden, ob das bei mir auch der Fall sein sollte

Atrus2711
13.06.2012, 15:39
Weil führende Nullen nötig sind, was Zahlentypen nicht zulassen. Und nein, ein Format 00000 ist da nicht die Lösung (und würde letztlich auch nur zu Textvergleichen führen, ohne aber indizierbar zu sein).
Weil die PLZ im Ausland durchaus auch alphanumerisch sein kann.

Cowestu
13.06.2012, 15:48
Danke für deine Hilfe!

Cowestu
13.06.2012, 16:13
Es war doch noch nicht des Problems lösung...
Jetzt kann ich die Zahl zwar von hand eintragen, aber es erschein eine Schlüsselverletzung, wenn ich dies via anfüügeabfrage umsetzen will...

maikek
13.06.2012, 16:18
Moin,
ist die Tabelle mit einer anderen Tabelle 1:1 oder n:1 verknüpft und der entsprechende Schlüssel existiert in der verknüpften Tabelle nicht?
Und wieso fügst du überhaupt einen Primärschlüssel aus einem Formularfeld per Code in eine Tabelle ein?
maike

Cowestu
13.06.2012, 16:20
es ist eine 1:n verknüpfung mit einer anderen Tabelle.

Weil es nur ein Wert von mehreren ist, der möglichst einfach von einem zentralen ort (formular) eingespeichert werden soll

maikek
13.06.2012, 16:29
es ist eine 1:n verknüpfung mit einer anderen Tabelle.
Speicherst du in die 1 (Master-) oder in die n-Tabelle?
Wenn in die n-Tabelle: Existiert der Schlüssel in der anderen Tabelle?
Weil es nur ein Wert von mehreren ist, der möglichst einfach von einem zentralen ort (formular) eingespeichert werden soll
Ist der einzufügende Schlüssel wirklich der Primärschlüssel oder doch eher ein Fremdschlüssel auf die 1 (Master-) Tabelle?
Wieso geht das nicht über z.b. ein Haupt/Unterformular, die über die Schlüssel verknüpft sind?
Im Zweifelsfall zeige doch mal einen Screenshot von den Tabellen und Beziehungen.
maike

Atrus2711
14.06.2012, 09:24
Jetzt kann ich die Zahl zwar von hand eintragen, aber es erschein eine Schlüsselverletzung, wenn ich dies via anfüügeabfrage umsetzen will...
Ich bin sehr sicher, dass die Anfügeabfrage dann was anderes macht als deine Hand.... Zeig doch mal die SQL der Anfügeabfrage her, und das Beziehungsmodell wäre auch hilfreich.

Rob77
26.01.2013, 23:23
Hallo zusammen,

muss mich zunächst entschuldigen - konnte nicht herausfinden, wie ich ein neues Thema generiere und flansche mich deshalb an einen bestehenden thread mit gleicher Problematik an.

Wahrscheinlich wird die Antwort sein: Geht so nicht!
Trotzdem hier das Problem mit der Bitte um Beachtung:

Ich gebe für einen Wettkampf die Teilnehmer in tabTeilnehmer ein.
Ich möchte später die männlichen Teilnehmer (definiert per Ja/Nein-Feld) per Anfügeabfrage an tabPaare übergeben und in einem Endlosformular untereinander stehen haben, und die weiblichen Teilnehmer per Kombifeld den männlichen zuordnen, also Paare bilden.

tabPaare enthält IDPaar, lngTeilnehmerM und lngTeilnehmerW, die beiden letzteren sind verknüpft mit IDTeilnehmer in tabTeilnehmer.

Ich weiß bereits, dass die Anfügeabfrage funktioniert, wenn ich die Beziehungen rausnehme bzw. die referentielle Integrität aus denselben. Aber dann hat ja tabPaare keinen Sinn mehr, weil nicht mehr korrekt mit den Teilnehmern verbunden.
Ich weiß auch, dass ein Formular mit je einem Kombifeld für TeilnehmerM bzw. -W die Paare korrekt zuordnet - nur wollte ich eben den einen Schritt sparen, denn die Herren stehen nach der Eingabe in tabTeilnehmer ohnehin fest, und kriegen die Damen zugeordnet.

Bin gespannt, ob ich mal wieder den Wald vor lauter Bäumen nicht sehe, oder ob ich hier tatsächlich an eine Access-Grenze gestoßen bin...

Viele Grüße, Rob

maikek
27.01.2013, 22:18
Hallo und willkommen im Forum.
Meine Vermutung aufgrund deiner Schilderung ist, dass die Schlüsselverletzung durch den fehlenden Schlüssel im Feld lngTeilnehmerW zustande kommt. Hast du mal probiert, eine "Dummydame" bei der Abfrage mit einfügen zu lassen?
maike

Anne Berg
28.01.2013, 09:06
Hallo,

schau dir die Feldeigenschaften in der Tabelle an, die ID der "Dame" muss leer sein dürfen und darf keinen Standardwert haben.

PS:
Und nenne doch bitte auch gleich die konkrete Fehlermeldung dazu.