Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Aktualisierungsabfrage

Begonnen von gsaccess, Februar 07, 2024, 23:30:34

⏪ vorheriges - nächstes ⏩

gsaccess

Im Zuge der Aktualisierung der Daten bin ich auf folgendes Problem gestoßen.
Es gibt eine Tabelle Artikel und eine Tabelle t_Kalkmaterial.
In beiden Tabellen gibt es die Felder: Artikelgruppe, Artikel, Dimension (siehe Bilder)
Die Artikelnummer (ID in der Tabelle Artikel) wurde bisher in der Artikelnummer der t_Kalkmaterial nicht gespeichert.
Nun habe ich versucht diese Artikelnummer in t_Kalkmaterial zu aktualisieren.
UPDATE Artikel RIGHT JOIN t_Kalkmaterial ON (Artikel.Artikelgruppe = t_Kalkmaterial.Artikelgruppe) AND (Artikel.Artikel = t_Kalkmaterial.Artikel) AND (Artikel.Dimension = t_Kalkmaterial.Dimension) SET Artikel.ID = [t_Kalkmaterial].[Artikelnummer];

Die Artikelnummer ist in beiden Tabellen LongInteger.
Dabei erhalte ich die folgende Fehlermeldung. (siehe Bild)
Die Fehlermeldung ist für mich daher nicht nachvollziehbar.

Freue mich über jeden Verbesserungsansatz.
Günther

ebs17

Ist die zu beschreibende ID zufällig ein Fremdschlüsselfeld in einer eingestellten referentiellen Integrität und mit Standardwert 0 belegt?

Ist eine Gültigkeitsregel eingestellt?
Mit freundlichem Glück Auf!

Eberhard

gsaccess

Die ID von Artikel soll ja in die Artikelnummer von von t_Kalkmaterial geschrieben werden.
Die ID in Artikel ist long Integer. Kein Fremdschlüssel.
Artikelnummer in t_kalkmaterial ist ebenfalls ein Long Integer.
Standardwert ist nichts eingetragen.

ebs17

SET Artikel.ID = [t_Kalkmaterial].[Artikelnummer]
ZitatDie ID von Artikel soll ja in die Artikelnummer von von t_Kalkmaterial geschrieben werden

Beginnen könnte man damit, den Code so zu schreiben, dass er eigene Wünsche auch erfüllt. Ist der Widerspruch oben ohne weitere Erklärung erkennbar?

Daneben allgemein zu obiger Aktualisierungsabfrage:
Ich habe nie verstanden, warum an dieser Stelle ein OUTER JOIN eingesetzt wird. Eine Ersetzung kann nur erfolgen, wenn es auf beiden Seiten einen Datensatzanteil und also einen Wert gibt.
Wo habe ich da meinen Logikfehler, bzw. wird die Anwendung von solch Unlogischem unkritisch und als normal betrachtet?
Mit freundlichem Glück Auf!

Eberhard

gsaccess

Damit komme ich leider nicht klar. Vielleicht stehe ich auf dem Schlauch.
Ich habe drei gleiche Felder in beiden Tabellen. Siehe oben. Nun muss verglichene werden ob diese Felder in beiden Tabellen übereinstimmen und dann die ID in die Tabelle t_Kalkulation übernommen werden, die derzeit leer ist.

Günther

ebs17

Eine Zuweisung erfolgt von der rechten Seite auf die linke Seite.
Ist das gedanklich nachvollziehbar?
Mit freundlichem Glück Auf!

Eberhard

markusxy

Zitat von: ebs17 am Februar 08, 2024, 14:09:44SET Artikel.ID = [t_Kalkmaterial].[Artikelnummer]
ZitatDie ID von Artikel soll ja in die Artikelnummer von von t_Kalkmaterial geschrieben werden

@ebs17,
da hast du dich wohl etwas vertan.

ebs17

Kann ich selbstredend nicht ausschließen, aber ich glaube immer noch an meine Aussage.
ZitatDie Artikelnummer (ID in der Tabelle Artikel) wurde bisher in der Artikelnummer der t_Kalkmaterial nicht gespeichert.
Nun habe ich versucht diese Artikelnummer in t_Kalkmaterial zu aktualisieren.
Jetzt bräuchte man eine höhere Macht, die die Worte in Sinn auflöst und die Aktualisierungsrichtung richtig bestimmt.
Mit freundlichem Glück Auf!

Eberhard

gsaccess

Mit der Abfrage lt Bild erhalte ich alle Datensätze die in beiden Tabellen in den Feldern - Artikelgruppe,Artikel und Dimension die gleichen Werte haben.
Mit einer Anfüge oder Aktualisierungsabfrage wird aber die ID aus Artikel nicht in die Artikelnummer von t_kalkmaterial übernommen. (Typenumwandlungsfehler, Gültigkeitsprüfungsregelverletzung - je nach Einstellung.

GüntherSie dürfen in diesem Board keine Dateianhänge sehen.

markusxy

Zitat von: gsaccess am Februar 09, 2024, 13:59:49wird aber die ID aus Artikel nicht in die Artikelnummer von t_kalkmaterial übernommen

Ja natürlich nicht.
Du versucht ja in der Tabelle Artikel was zu verändern anstatt in der Tabelle t_kalkmaterial.

Auch von der Helfern nicht alles ohne mitdenken übernehmen.


ebs17

#10
ZitatAuch von der Helfern nicht alles ohne mitdenken übernehmen.
Bezogen auf dieses Thema: Jetzt sprichst Du von Dir und dazu in der Mehrzahl?
Mit freundlichem Glück Auf!

Eberhard

gsaccess

Auch mit dem folgenden Code wird keine Artikelnummer in t_kalkmaterial angefügt.
INSERT INTO t_Kalkmaterial ( Artikelnummer )
SELECT Artikel.ID
FROM Artikel INNER JOIN t_Kalkmaterial ON (Artikel.Dimension = t_Kalkmaterial.Dimension) AND (Artikel.Artikel = t_Kalkmaterial.Artikel) AND (Artikel.Artikelgruppe = t_Kalkmaterial.Artikelgruppe);
Vielleicht kann mir jemand den genauen Fehler bzw. den richtigen Code mitteilen.

Günther

ebs17

#12
Vielleicht kann mir jemand den genauen Fehler ... mitteilen.Zahlst Du 50 € pro Kilometer und pro angefangene Viertelstunde für An- und Abreise?
Billiger wäre es, wenn Du vor Ort jemanden findest, der Lesen kann und die Fehlermeldung, die Du hoffentlich nicht unterdrückt hast, in sein Bewusstsein aufnimmt und dies wiedergibt.

Oder Du legst diese DB, die Du offensichtlich selbst nicht verstehst, mit wenigen Datensätzen und beteiligten Tabellen inklusive Beziehungen hier als Anlage ab.
Mit freundlichem Glück Auf!

Eberhard

gsaccess

#13
In der Anlage die DB mit einigen Beispieldaten.

ebs17

#14
Man beachte die Umkehrung der Zuweisung, vgl. #3. Es kann sinnvoll sein, das zu tun, was man sagt.
UPDATE
   t_Kalkmaterial
      INNER JOIN Artikel
      ON t_Kalkmaterial.Artikel = Artikel.Artikel
      AND t_Kalkmaterial.Artikelgruppe = Artikel.Artikelgruppe
      AND t_Kalkmaterial.Dimension = Artikel.Dimension
SET
   t_Kalkmaterial.Artikelnummer = Artikel.ID

Das in der DB dargestellte Gebilde ist aber ziemlicher Unsinn: Beziehung und zusätzlich je drei Felder mit gleichem Inhalt in den Tabellen.
Mit freundlichem Glück Auf!

Eberhard