Guten Tag liebe Accessprofis,
habe aktuell das Problem, dass ich eine Tabelle (EH-Control) habe, deren Spalte "Supplier" leer ist und mit den Suppliercodes aus der Spalte einer anderen Tabelle (Purchase) ergänzt werden soll.
Beide Tabellen habe ich über eine Teilenummer in einer Datenbank verbunden.
Diese Ergänzung wollte ich in Form einer Abfrage machen, bin mir aber nicht sicher welchen Ansatz ich verfolgen soll, da eine Anfügen-Abfrage ja nur Zeilen ergänzen kann.
Am Ende soll das ganze nach Excel exportiert werden, wobei am Ende die Tabelle "EH-Control" genauso dastehen soll, nur eben mit den Supplier-Codes-Ergänzungen.
Versuche ich das ganze mit meiner Auswahlabfrage, so ist die Menge an Ergebnisdatensätzen viel zu groß.
SELECT [EH-Control].Feld1, [EH-Control].Feld2, [EH-Control].Feld3, [EH-Control].Feld4, Purchase.Supplier, [EH-Control].Feld6, [EH-Control].Feld7, [EH-Control].Feld8, [EH-Control].Feld9, [EH-Control].Feld10, [EH-Control].Feld11
FROM [EH-Control] INNER JOIN Purchase ON [EH-Control].Feld3 = Purchase.Part;
Bin noch Neuling in dem Gebiet und dankbar für alle Anregungen!
Freundliche Grüße
Mir ist es jetzt gelungen das Problem über eine Aktualisierungsabfrage zu lösen.
Jetzt stehe ich jedoch vor dem Problem, dass es für ein und denselben Artikel mehrere Supplier also mehrere Supply-codes gibt.
Die Abfrage schreibt jedoch immer nur einen der Codes in die EH-Control-Tabelle.
Wie kann ich diese jetzt mit allen Supplier-Codes ergänzen? Optimalerweise mit allen Codes eines Artikels in einer Zeile.
Hallo,
1) der Ansatz mit einer Aktualisierungsabfrage ist schon mal nicht schlecht. ;)
2) Wie lautet denn nun der SQL-String der Aktualisierungsabfrage ?
3) Beschreibe authentisch die Tabellen und der Tabellenfelder nach Name, Bedeutung und Datentyp
4) "Optimalerweise mit allen Codes eines Artikels in einer Zeile." Lass das sein... Das wäre ein Verstoß gegen Normalisierungsregeln, was in Folge nicht mehr oder sehr schwierig richtig zu stellen wäre.
5) Verwende für die Felder vernüftige , d. h. aussagekräftige und eindeutige Namen. (Mit z. B. "Feld1" ist wohl eher nichts Gescheites anzufangen...)
6) Hilfreich wäre das Hochladen der Db mit entspr. authentischen Spieldaten
Hallo,
2) SQL-String:
UPDATE [EH-Control] INNER JOIN PurchExt ON [EH-Control].Feld3 = PurchExt.Part SET [EH-Control].Feld5 = [PurchExt].[Supplier];
3) (http://s1.directupload.net/images/130924/jqjrpcoq.jpg) ,Datentypen sind bis aufs Datum alle String
4) Hab mich auch schon von dem Gedanken verabschiedet ;) Werd das dann über mehrere Zeilen machen.
5) Sind auf dem Bild zu sehen, für die EH-Control-Tabelle sind keine Feldnamen importiert wurden, was auch nicht weite relevant ist, wichtig ist nur, dass Feld3 der Part-Nr aus der PurchExt-Tabelle entspricht sowie Feld5 der Supplierspalte.
6) Habe eine kleine TestDB mit derselben Struktur und ein paar Testdatensätzen erstellt und lade die mal hier hoch
[Anhang gelöscht durch Administrator]
Habe jetzt noch einen alternativen Ansatz gefunden und bin mir nicht sicher wie ich weiter vorgehen soll.
Anstatt einer Aktualisierungsabfrage habe ich eine Auswahlabfrage gestartet:
SELECT [EH-Control].ID, [EH-Control].Feld1, [EH-Control].Feld2, [EH-Control].Feld3, [EH-Control].Feld4, PurchExt.Supplier, [EH-Control].Feld6, [EH-Control].Feld7, [EH-Control].Feld8, [EH-Control].Feld9, [EH-Control].Feld10, [EH-Control].Feld11
FROM [EH-Control] LEFT JOIN PurchExt ON [EH-Control].Feld3 = PurchExt.Part;
Das brachte mir einige Duplikate, die ich dann über dem Abfrageassistenten abgefragt habe.
Ich habe dann im Internet einen Code gefunden, der diese Duplikate löscht, wobei ich für die Tabelle DoubleEHQry, welche mir die Duplikatsuche lieferte eine neue ID2-Spalte als Primärschlüssel erstellen musste.
DELETE *
FROM DoubleEHQry
WHERE ID2 NOT IN (SELECT MAX(ID2) FROM DoubleEHQry GROUP BY Feld3, Feld4, Supplier HAVING MAX(ID2) IS NOT NULL);
Jetzt möchte ich die Datensätze, welche nicht von der Duplikatsuche erfasst wurden zu denen, welche nach der Löschabfrage übrig blieben, hinzufügen.
Dabei will ich über die Kriterien verhinden, dass wieder Duplikate dazukommen.
INSERT INTO DoubleEHQry ( ID, Feld1, Feld2, Feld3, Feld4, Supplier, Feld6, Feld7, Feld8, Feld9, Feld10, Feld11 )
SELECT [EH-Control].ID, [EH-Control].Feld1, [EH-Control].Feld2, [EH-Control].Feld3, [EH-Control].Feld4, [EH-Control].Feld5, [EH-Control].Feld6, [EH-Control].Feld7, [EH-Control].Feld8, [EH-Control].Feld9, [EH-Control].Feld10, [EH-Control].Feld11
FROM [EH-Control]
WHERE (([DoubleEHQry].[ID] <> [EH-Control].[ID]) AND ([DoubleEHQry].[Feld1] <> [EH-Control].[Feld1]) AND ([DoubleEHQry].[Feld2] <> [EH-Control].[Feld2]) AND ([DoubleEHQry].[Feld3] <> [EH-Control].[Feld3]) AND ([DoubleEHQry].[Feld4] <> [EH-Control].[Feld4]) AND ([DoubleEHQry].[Supplier] <> [EH-Control].[Feld5]) AND ([DoubleEHQry].[Feld6] <> [EH-Control].[Feld6]) AND ([DoubleEHQry].[Feld7] <> [EH-Control].[Feld7]) AND ([DoubleEHQry].[Feld8] <> [EH-Control].[Feld8]) AND ([DoubleEHQry].[Feld9] <> [EH-Control].[Feld9]) AND ([DoubleEHQry].[Feld10] <> [EH-Control].[Feld10]) AND ([DoubleEHQry].[Feld11] <> [EH-Control].[Feld11]));
Will ich diesen ausführen fragt mich Access nach Parametern und ich komme nicht weiter.
Welcher Ansatz ist besser/einfacher, bzw. wie komme ich beim hier geposteten Ansatz weiter?
Hallo,
die Knackpunkt-Frage ist :
Welcher von den mehrfachen Supplieren einer Part-No in Tabelle PurchExt soll denn nun für die Aktualisierung herangezogen werden?
Wenn diese Frage nicht beantwortet werden kann, ist die Aufgabe nicht lösbar.
Mit etwa diesem:
Update [EH-Control] SET [EH-Control].Feld5 = DFirst("Supplier","PurchExt","Part= '" & [Feld3] & "'")
wird Feld5 mit dem ersten gefundenen Supplier bezogen auf die Part-No aktualisiert.
Hab das jetzt gelöst indem ich bei der Asuwahlabfrage einfach bei den Eigentschaften "Keine Duplikate" auf "Ja" gestellt habe.
Jetzt habe ich alle enthaltenen Supplier für alle Teile eingetragen ohne Duplikate.