Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: gsaccess am Februar 07, 2024, 23:30:34

Titel: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 07, 2024, 23:30:34
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
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 08, 2024, 11:51:01
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?
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 08, 2024, 13:25:25
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.
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 08, 2024, 14:09:44
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?
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 08, 2024, 19:19:25
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
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 08, 2024, 20:25:24
Eine Zuweisung erfolgt von der rechten Seite auf die linke Seite.
Ist das gedanklich nachvollziehbar?
Titel: Re: Aktualisierungsabfrage
Beitrag von: markusxy am Februar 09, 2024, 09:55:51
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.
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 09, 2024, 11:06:28
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.
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 09, 2024, 13:59:49
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üntherArtikelKalk.JPG
Titel: Re: Aktualisierungsabfrage
Beitrag von: markusxy am Februar 10, 2024, 10:35:13
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.

Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 10, 2024, 12:10:11
ZitatAuch von der Helfern nicht alles ohne mitdenken übernehmen.
Bezogen auf dieses Thema: Jetzt sprichst Du von Dir und dazu in der Mehrzahl?
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 11, 2024, 19:56:24
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
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 11, 2024, 20:14:51
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.
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 12, 2024, 11:57:27
In der Anlage die DB mit einigen Beispieldaten.
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 12, 2024, 17:01:35
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.
Titel: Re: Aktualisierungsabfrage
Beitrag von: markusxy am Februar 13, 2024, 07:51:15
Zitat von: ebs17 am Februar 10, 2024, 12:10:11Bezogen auf dieses Thema: Jetzt sprichst Du von Dir und dazu in der Mehrzahl?

Eigentlich spreche ich von allen Helfern, dich natürlich eingeschlossen.
Hoffentlich hast du damit kein Problem, denn wie du siehst machst du Fehler so wie jeder andere auch.
Titel: Re: Aktualisierungsabfrage
Beitrag von: Beaker s.a. am Februar 13, 2024, 10:57:57
Hallo Markus,
Zitatdenn wie du siehst machst du Fehler so wie jeder andere auch.
Wieso Fehler? Wenn du dich auf den Code in #3 beziehst, ist das
ein zitierter Fehler, das stammt vom TS. Geht m.E. auch aus
Eberhards Kommentar dazu hervor, der, wie es so seine Art ist,
den Fragenden zum Selberdenken anregen soll.

gruss ekkehard
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 13, 2024, 12:29:38
Zitatdenn wie du siehst machst du Fehler
Gerade in diesem Thema sehe ich das überhaupt nicht.

Ursprünglicher und von Dir unterstützter(?) Codeteil:
SET Artikel.ID = [t_Kalkmaterial].[Artikelnummer]Da wird sichtbar von t_Kalkmaterial in Artikel geschrieben. Der formulierte Wunsch lautet aber genau anders herum. In der formulierten Lösung, die in der Demo auch tatsächlich funktioniert, erweist sich die Umkehrung als einfache Lösung, ergänzt um den Austausch des unsinnigen OUTER JOINs gegen INNER JOIN - so, wie ich es gleich beschrieben hatte.
Ich wundere mich aber sehr über Art des Feedbacks bzw. fehlendes inhaltliches Feedback - von mehreren Seiten. Wo liegen nun Wahrnehmungs- und Verständnisfehler?

Im Allgemeinen habe ich gar kein Problem mit eigenen Fehlern und dem Zugeben dieser. Wenn die Quote im niederen einstelligen Bereich liegt, bin ich doch glücklich, und den meisten ist mit der Restquote unmittelbar geholfen. Ein bestätigter fachlicher Fehler kratzt auch gar nicht an meiner Persönlichkeit und führt nicht zu einem Beleidigtsein ob eines persönlichen Angriffs.
Ich empfinde es aber als sehr unpassend, wenn ich unberechtigt in die fehlerhafte Allgemeinheit der Helferschaft aus zwei(!) im Thema eingeschlossen werde. Da halte ich eine selbstkritische Ego-Betrachtung der anderen Seite als sehr angemessen.
... ich höre ...
Titel: Re: Aktualisierungsabfrage
Beitrag von: gsaccess am Februar 14, 2024, 07:10:01
Vielen Dank für deine Unterstützung.
So funktioniert die Aktualisierung und habe ich diese jetzt verstanden.

Drei Felder in zwei Tabellen mit gleichem Inhalt sprechen für mich auch gegen die DB Logik. Ich habe aber noch keine bessere Lösung gefunden. Bei der Erfassung des Materials zB in der Kalkulation wird die Artikelnummer über Artikelgruppe/Artikel/Dimension gesucht.(siehe Bild) Diese 3 Felder müssen für den Anwender auch sichtbar bleiben, deshalb habe ich sie in der t_Kalkmaterial mitgespeichert.
Vielleicht gibt es hier auch eine bessere Lösung, die ich noch nicht gefunden habe.

Günther
Titel: Re: Aktualisierungsabfrage
Beitrag von: ebs17 am Februar 14, 2024, 14:51:13
ZitatLösung, die ich noch nicht gefunden habe
Angenommen, die Tabellen sind Teile eines durchdachten Datenmodells und die Schlüssel werden sofort mit Datensatzerstellung erstellt, würde man bei Bedarf die beiden Tabellen per Schlüssel in einer Abfrage verknüpfen und hätte so zusammenhängende Informationen.

Es ist ja Datenbankprinzip, dass man attributfähige Informationen wie einen Artikelgruppennamen an genau einer Stelle speichert und ansonsten nur Verknüpfungen auf diese Informationen legt. Das hat den Zweck, dass eine eventuelle Änderung dieses Wertes an genau einer Stelle vorzunehmen wäre mit der Folge, man weiß, wo man ändern muss, und die gesamte Auswertung übernimmt augenblicklich diese Änderung.

Wenn man excellike ...zigmal Daten kopiert, geht sicher Übersicht und Zuverlässigkeit verloren, um so mehr, je weniger fachmännisch auf die Daten zugegriffen wird.

Zitathabe ich diese jetzt verstanden
Glückwunsch, und wünschenswerterweise wärest Du nicht der einzige.