Hallo,
ich komme bei einer Aktualisierungsabfrage nicht weiter.
Ich habe 2 Tabellen, die erste enthält Bestellungen: tbl_Positionen(Positions_ID, Produkt, Preis, Anzahl), die zweite Abrechnungsmeldungen: tbl_Abrechnungsmeldungen (Abrechnungs_ID, Positions_ID_f, Anzahl). Bestellung müssen nicht auf einmal abrechnet werden, es kann 1 oder mehrer Abrechnungsmeldungen pro Bestellung geben.
Nun habe ich in der Tabelle Bestellungen ein Feld AnzahlAbgerechnet hinzugefügt, dieses soll die Summe der schon abgerechneten Einheiten der Bestellung angeben.
Dafür habe ich eine entsprechende Abfrage geschrieben:
SELECT tbl_Positionen.Positions_ID, Sum(tbl_Abrechnungsmeldungen.Items_abgerechnet) AS SummevonItems_abgerechnet
FROM tbl_Positionen INNER JOIN tbl_Abrechnungsmeldungen ON tbl_Positionen.Positions_ID = tbl_Abrechnungsmeldungen.PositionsID_f
GROUP BY tbl_Positionen.Positions_ID;
Diesen Summenwert möchte ich nun über eine Aktualisierungsabfrage in die Tabelle tbl_Positionen übernehmen.
UPDATE tbl_Positionen INNER JOIN abf_SummeVonItemsAbgerechnet ON tbl_Positionen.Positions_ID = abf_SummeVonItemsAbgerechnet.Positions_ID SET tbl_Positionen.Items_abgerechnet = [abf_SummeVonItemsAbgerechnet].[SummevonItems_abgerechnet];
Ich bekomme jedoch immer die Fehlermeldung "Operation muss eine aktualisierbare Abfrage verwenden".
Weiß jemand was ich falsch mache?
Hallo,
eine gruppierte Abfrage kann für eine Aktualisierungsabfrage nicht verwendet werden, da gibt es auch keinen Trick.
Die Summe in die Tabelle zu schreiben ist eh überflüssig, berechnete Werte werden nicht gespeichert.
ZitatDie Summe in die Tabelle zu schreiben ist eh überflüssig, berechnete Werte werden nicht gespeichert.
Ja, im Prinzip weiß ich das, das war als work-around gedacht. Wenn ich die Summe direkt in einer Abfrage verwende sind die Daten nicht mehr bearbeitbar. Das müssen sie aber sein.
Hallo,
wenn Du das weißt, warum fragst Du dann (so) ?
Ergebnisse zu bearbeiten und damit die Korrektheit (innerhalb der Db) der Ausgangsdaten in Frage zu stellen, ist eher nicht erstrebenswert.
Sollen die Ergebnisse, wie Du sagst, weiter verarbeitet (verändert) werden, dann exportiere sie aus der DB und manipuliere sie dort.
Zitatwenn Du das weißt, warum fragst Du dann (so) ?
Ich bin am rum probieren wie ich das Problem lösen kann, das war eine Idee nach dem Motto "Der Zweck heiligt die Mittel".
Die Werte berechneter Felder möchte ich nicht verändern, aber die anderer Felder.
SELECT tbl_Positionen.Positions_ID, tbl_Positionen.Unit_Price, tbl_Positionen.Quantity, tbl_Positionen.Item_Description, abf_SummeVonItemsAbgerechnet.SummevonItems_abgerechnet
FROM tbl_Positionen INNER JOIN abf_SummeVonItemsAbgerechnet ON tbl_Positionen.Positions_ID = abf_SummeVonItemsAbgerechnet.Positions_ID;
Hier möchte ich beispielsweise Unit_Price, Quantity, Item_Description verändern können.
Hallo,
in einer gruppierten Abfrage können keine Daten geändert werden. Dein Vorhaben ist unmöglich.
In der gruppierten Abfrage möchte ich keine Werte ändern, ich möchte eine gruppierte Abfrage in einer andren Abfrage verwenden und dort Werte verändern. Ist das auch unmöglich?
Hallo,
ZitatIst das auch unmöglich?
Ja, auch in einer Abfrage die eine gruppierte Abfrage verwendet ist es völlig ausgeschlossen Daten zu ändern.
Ok, danke, dann werde ich mir wohl einen anderen Weg suchen müssen.
Zitat von: Kinimod am Januar 06, 2020, 12:17:47
Ok, danke, dann werde ich mir wohl einen anderen Weg suchen müssen.
Anstelle der gruppierten Abfrage, kannst du die
DSum-Funktion verwenden um die Summe zu ermitteln.
An dem grundlegenden Sachverhalt, dass es i.d.R. besser ist, berechnete Werte immer bei Bedarf in einer Abfrage zu ermitteln, anstatt sie zu speichern.