Ich bin dabei von der alten Datenbank die Daten in die neue Datenbank zu übernehmen.
In der alten Datenbank wurden zB bei den Artikeln die Artikelgruppe als kurzer Text erfasst.
In der neuen Datenbank gibt es dazu eine eigene Tabelle tblArtikelgruppe (siehe Anlage)
Wie kann ich mit einer Abfrage die Daten der alten Tabelle in der die Artikelgruppe als Text steht, mit der ID der Artikelgruppe übernehmen.
Dies ist nur ein Beispiel von vielen, da in der neuen Datenbank die Tabellen ohne Redundanzen angelegt wurden.
JOINE die beiden Tabellen über die Artikelgruppe (die Texte scheinen ja gleich
zu sein) und übernehme die ID in das entsprechend angelegte FK-Feld.
wie kann das Join aussehen:
Tabelle Artikel:Artikelgruppe - kurzer Text
tblArtikel:ArtikelgruppeID_F - long Integer
tblArtikelgruppe:ArtikelgruppeID - Autowert, Artikelgruppe - kurzer Text
Hallo,
Dieses Beispiel (https://www.sqlshack.com/how-to-update-from-a-select-statement-in-sql-server/) angepasst (nicht getestet)
UPDATE A
SET A.ArtikelgruppeID_F
FROM tblArtikel As A
INNER JOIN (
SELECT AG.ArtikelgruppeID
FROM Artikel As A
INNER JOIN tblArtikelgruppe As AG
ON A.Artikelgruppe = AG.Artikelgruppe) As UA
ON A.ArtikelID = UA.ArtikelID
gruss ekkehard
Also Access SQL war ja immer schon etwas sonderbar :) .
Aber ein Update sollte etwa so aussehen:
UPDATE Artikel A
INNER JOIN tblArtikelgruppe AG
ON A.Artikelgruppe = AG.Artikelgruppe
SET A.ArtikelgruppeID_F = AG.ArtikelgruppeID
@Beaker, geht ganz einfach mit dem Abfragedesigner, wenn das für dich neu sein sollte.
@gsaccess, es ist natürlich bedenklich, wenn man für so was ein Beispiel benötigt. Da musst du dich etwas mehr mit der Logik beschäftigen.
Ansonsten brauchst du für alles ewig.
Wusst' ich's doch, das dass viel einfacher geht. So hatte ich es zuerst
auch im Kopf, war mir aber nicht sicher, da ich keine Lust hatte die
Tabellen abzuschreiben um es zu testen (hab' ich auch dabei geschrieben).
Zitat von: Beaker s.a. am Juli 15, 2023, 12:21:32da ich keine Lust hatte die
Tabellen abzuschreiben um es zu testen
musst du auch nicht. Wenn die generelle Syntax unbekannt ist, kannst beliebige Tabellen in den Designer ziehen und in der SQL Ansicht das Ergebnis ansehen. Aber grundsätzlich kann ich jedem nur raten Access aufgrund der vielen Defizite bei SQL als Datenbank zu vermeiden und z.B. den kostenlosen MSSQL Server zu verwenden. Access daher eher nur als Frontend. ;)
Es mag ja für die Accessspezialisten ein banales Beispiel sein. Ich kann das auch mit mehreren Aktualisierungsabfragen lösen.
Die geposteten Codes funktionieren nicht.
@ Ekkehard: From im code bringt einen Fehler
@ markusxy: Für mich ist die Logik: ich brauche über eine Abfrage in der Tabelle Artikel die ArtikelgruppenID, dann kann ich in der Tabelle tblArtikel diese in ArtikelgruppenID_F aktualisieren
Über eine Abfrage schaffe ich das nicht.
Mit funktioniert nicht, kann niemand was anfangen.
Die Frage ist doch ob du die Logik in der Abfrage verstanden hast,
denn dann solltest du auch in der Lage sein das umzusetzen.
Also erklär mal was unklar ist.
Ansonsten ein kleines Beispiel mit Spieldaten erstellen und mit deinem Versuch hochladen.
In der Anlage ein Beispiel mit Spieldaten.
LG GüntherDatabase.mdb
Zitat: From im code bringt einen Fehler
Welchen? Den Tabellenamen habe ich aus deiner Beschreibung übernommen.
Vielleicht habe ich da was falsch interpretiert.
Hast du denn Markus' Abfrage auch probiert?
Dein Beispiel ist Mist. Mit verknüpften Tabellen, die nicht mitgeliefert
werden kann man nichts anfangen.
Sorry habe übersehen dass es eine Verknüpfung ist.
In der Anlage nochmals die mdb.
@Ekkehard:in der Anlage das Bild der Fehlermeldung.
Lg Günther
Sorry, aber ich schaffe es die Tage nicht mir das anzuschauen.
Aber nochmal
ZitatHast du denn Markus' Abfrage auch probiert?
Die ist doch viel einfacher, und sollte mit den richtig benamsten
Objekten auch funktionieren.
Zitat von: gsaccess am Juli 17, 2023, 11:00:10Ich kann das auch mit mehreren Aktualisierungsabfragen lösen.
Da du eh einen Weg hast das zu lösen, frage ich mich was eigentlich der Sinn der Frage ist.
Für das Update brauchst du eine Aktualisierungsabfrage. Wie das geht wird ja in #4 gezeigt.
Dass #3 nicht funktionieren kann ist dir ja mittlerweile klar.
Mir wäre es darum gegangen die zwei Abfragen in eine zu packen. Das habe ich nicht geschafft.
1. Abfrage
UPDATE Artikel LEFT JOIN tblArtikelgruppe ON Artikel.Artikelgruppe = tblArtikelgruppe.Artikelgruppe SET Artikel.ArtikelgruppenID = [tblArtikelgruppe].[ArtikelgruppeID];
2. Abfrage
UPDATE Artikel LEFT JOIN tblArtikel ON Artikel.ID = tblArtikel.ArtikelnummerID SET tblArtikel.ArtikelgruppeID_F = [Artikel].[ArtikelgruppenID], tblArtikel.kgProEinheit = [Artikel].[kgProEinheit], tblArtikel.AufschlagProzent = [Artikel].[Aufschlag]/100, tblArtikel.ErfassungsdatumArtikel = [Artikel].[EKAktualisiertam];
Bei dieser Abfrage werden alle Felder mit Ausnahme der ArtikelgruppeID_F aktualisiert.
Für mich nicht nachvollziehbar warum dieses Feld nicht aktualisiert wird.
ZitatAber grundsätzlich kann ich jedem nur raten Access aufgrund der vielen Defizite bei SQL als Datenbank zu vermeiden
Man sollte aber eigene Defizite von Defiziten der verwendeten Umgebung trennen und eigenständig betrachten.
Und man sollte das beherrschen, womit man sich beschäftigt.
Denn auch: Wenn ein "Hutfahrer" von seinem Ford Fiesta in einen Ferrari umsteigt, wird er nicht automatisch zum beeindruckenden Rennfahrer. Kurven fahren z.B. sollte man bei beiden können. Durch einen Umstieg auf das Upgrade kommt das nicht automatisch.
ZitatIch bin dabei von der alten Datenbank die Daten in die neue Datenbank zu übernehmen.
Wenn ich davon ausgehe, dass das Datenmodell der neuen Datenbank auch fertiggestellt ist, würde bei mir im Idealfall keine Aktualisierungsabfrage vorkommen, sondern zur Datenübernahme nur Anfügeabfragen (pro Zieltabelle eine Anfügeabfrage).
In der Anlage ist das, verkürzt auf wesentliche Felder zur Schlüsselübernahme, dargestellt.
Das Prinzip ist einfach: Zuerst wird die Primärtabelle gefüllt, in Verbindung mit Inkonsistenzprüfungen kann man das auch beliebig wiederholen. Damit wird per Autowert der Primärschlüssel erzeugt.
Jetzt kann man die Anfügung in die Sekundärtabelle vornehmen. Da in der Quelltabelle die Zuordnung der Klarwerte (hier Artikel zu Artikelgruppe) vorhanden ist, kann man sich per JOIN auf die Primärtabelle den Schlüssel hereinholen und als Fremdschlüssel in die Sekundärtabelle schreiben.
Vielen Dank!
Werde mal versuchen damit klar zu kommen.
Learning bei dooing ist die Devise.
LEFT JOIN: Etwas anderes als ein INNER JOIN innerhalb einer Aktualisierungsabfrage ist für mich sinnfrei. Bei einer Zuweisung brauche ich einen vorhandenen Quellinhalt und ein vorhandenes Ziel.
Zitat von: ebs17 am Juli 20, 2023, 10:18:43Man sollte aber eigene Defizite von Defiziten der verwendeten Umgebung trennen und eigenständig betrachten.
Wer die Defizite bei Access nicht sehen will, hat entweder keine Ahnung von den anderen Datenbanken oder beschäftigt sich nur mit Spielereien. ;)
Aber natürlich wie immer kein Vorteil ohne Nachteil. Wenn Access also den Anforderungen genügt, dann passt es ja.
Nur sollte man unterscheiden können, wann welches Werkzeug optimal ist.
ZitatNur sollte man unterscheiden können, wann welches Werkzeug optimal ist.
Um im Thema zu bleiben: Für die Übertragung von Daten aus einer Tabelle in eine oder mehrere andere ist das eine unheimlich schwere Entscheidung.
Zitat von: ebs17 am Juli 22, 2023, 08:47:33Um im Thema zu bleiben
Wenn du schon glaubst dich einmischen zu müssen, wirst du doch wenigstens in der Lage sein auch den Zusammenhang mitzubekommen, oder?