Hallo zusammen,
in meiner MS Access Datenbank gibt es das Formular frmAnlagenverwaltung, welches als Datensatzquelle die Tabelle tblAnlagen zugewiesen hat. Auf diesem Formular gibt es ein Unterformular ufrmKapazitäten, welches als Datensatzquelle die Tabelle tblKapazitäten zugewiesen hat. Dies dient dazu, ein oder mehrere Kapazitäten zu der jeweiligen Anlage (bzw. AnlageID) zuzuordnen. In der Tabelle tblKapazitäten wird dann über einen Fremdschlüssel AnlageID_F die KapazitätID zur jeweiligen Anlage zugeordnet.
Nun habe ich im Hauptformular frmAnlagenverwaltung zunächst ein Textfeld txtGesamtkapa erstellt, welches als Steuerelementinhalt den folgenden Code zur Berechnung der Gesamtkapazität hat:
=DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])
Damit das Textfeld txtGesamtkapa direkt aktualisiert wird, wenn ich den Datensatz speichere (und nicht erst beim Schließen und erneutem Öffnen des Formulars oder Wechseln des Datensatzes), habe ich im Unterformular ufrmKapazitäten folgenden VBA-Code hinterlegt:
Private Sub Form_AfterUpdate()
' Aktualisieren des Textfeldes txtGesamtkapa im Hauptformular
Forms!frmAnlagenverwaltung!txtGesamtkapa.Requery
End Sub
Das funktioniert auch sehr gut.
Meine Frage: Ist diese Vorgehensweise so korrekt oder muss ich etwas anpassen? Bin mir leider unsicher in der Berechnung, und nur weil es funktioniert, heißt es nicht, dass es technisch die beste Lösung darstellt.
Freue mich auf eure Antworten!
Gruß,
Simon
Hallo,
ZitatIst diese Vorgehensweise so korrekt oder muss ich etwas anpassen?
Ich weis, meine Antwort wird Dir nicht gefallen. Nein, die Vorgehensweise ist nicht korrekt.
Du machst Dir gerade selbst ein Beispiel warum es nicht korrekt ist. Du musst Dich bei dieser Vorgehensweise immer um die Aktualisierung des Tabellenfeldes kümmern. Du hast auch unbewusst immer im Hinterkopf Zweifel ob der Wert aktuell ist. Ich kann auch nicht verstehen, warum Du den Wert unbedingt in der Tabelle haben willst.
Den Ausdruck mit DomSumme kannst Du doch immer und überall wo der Wert benötigt wird aktuell berechnen.
Einen anderen Rat habe ich nicht.
Hallo,
danke für Deine erneute Antwort. Ich habe bereits das Feld "Gesamtkapazität" in der Tabelle tblAnlagen wieder gelöscht und der berechnete Wert wird nicht mehr gespeichert, sondern nur noch im Textfeld txtGesamtkapa im Formular frmAnlagenverwaltung berechnet:
frmAnlagenverwaltung.png
Ich habe eingesehen, dass die Speicherung des Wertes in der Tabelle zu Problemen führt.
Passt es denn dann so?
Gruß,
Simon
Hallo,
so passt es. :)
Super, das freut mich. Ich habe jetzt nur das Problem, dass ich nicht weiß, wie ich mit dem berechneten Wert weiterrechnen kann. Neben dem Formular frmAnlagenverwaltung habe ich in meiner Datenbank auch noch das Formular frmAnlagen. Dieses nutze ich, um die gefilterten Anlagen (z. B. nach einem Produkt) in Tabellenform als Endlosformular darzustellen. Das Endlosformular frmAnlagen nutzt folgende SQL-Abfrage als Datensatzquelle:
SELECT
tblAnlagen.AnlageID,
tblAnlagen.ProduktID_F,
tblAnlagen.ProduzentID_F,
tblAnlagen.StandortID_F,
tblProduzenten.Produzent,
tblProdukte.Produkt,
[Ländercode] & ", " & [Standort] AS Standort_ber
FROM
(tblLänder
INNER JOIN tblStandorte ON tblLänder.LandID = tblStandorte.LandID_F)
INNER JOIN
(tblProduzenten
INNER JOIN
(tblProdukte
INNER JOIN
(tblAnlagen
LEFT JOIN tblKapazitäten ON tblAnlagen.AnlageID = tblKapazitäten.AnlageID_F)
ON tblProdukte.ProduktID = tblAnlagen.ProduktID_F)
ON tblProduzenten.ProduzentID = tblAnlagen.ProduzentID_F)
ON tblStandorte.StandortID = tblAnlagen.StandortID_F;
Zudem gibt es auf dem Formular frmAnlagen die Textfelder txtProduzent, txtProdukt und txtStandort, die jeweils als Steuerelementinhalt "Produzent" (aus tblProduzenten), "Produkt" (aus tblProdukte) und "Standort_ber" (berechnete Darstellung des Standortes in der Form "Ländercode, Standort") zugewiesen haben. Das funktioniert auch so einwandfrei.
Wie kann ich jetzt die Gesamtkapa, welche ich im Formular frmAnlagenverwaltung über die Berechnungsformel
=DomSumme("Kapazität";"tblKapazitäten";"AnlageID_F = " & [AnlageID])
im Textfeld txtGesamtkapa für jede AnlageID errechnet habe, auch in dem Formular frmAnlagen einbinden?
Geht das auch über die bereits bestehende Abfrage, ähnlich wie bei "Standort_ber" und dann Zuweisung zu einem Textfeld als Steuerelementinhalt?
Gruß,
Simon
Hallo,
ich habe nicht ganz verstanden, was Du jetzt weiter rechen willst.
Ich möchte zunächst einmal die Gesamtkapazität für jede Anlage im Formular frmAnlagen genauso berechnet haben, wie ich es oben für das andere Formular frmAnlagenverwaltung gemacht habe. Reicht es da, das Textfeld einfach in das andere Formular zu kopieren?
Im zweiten Schritt möchte ich im Formularfuß des Formulars frmAnlagen ein neues Textfeld hinzufügen, welches die Summe der Gesamtkapazitäten aller Anlagen bildet.
Hallo,
ZitatReicht es da, das Textfeld einfach in das andere Formular zu kopieren?
Probiere es halt einfach mal aus.
Zitatdie Summe der Gesamtkapazitäten aller Anlagen bildet.
Das ist einfach.
=DomSumme("Kapazität";"tblKapazitäten")
ZitatProbiere es halt einfach mal aus.
Alles klar, scheint zu funktionieren, allerdings ist die Sortierung jetzt nicht korrekt. Ich möchte, dass die Kapazität von groß nach klein sortiert wird, also ganz oben der größte Wert steht. Allerdings weiß ich nicht, wie ich das machen kann, weil es ja nur das Textfeld mit dem DomSumme-Ausdruck ist.
Sortierung.png
Zitat=DomSumme("Kapazität";"tblKapazitäten")
Ja, allerdings führt dieser Ausdruck dazu, dass alle Kapazitäten summiert werden. Es sollen aber nur die summiert werden, worauf der aktuelle Filter läuft, siehe auch mein Post zuvor
Zitatum die gefilterten Anlagen (z. B. nach einem Produkt) in Tabellenform als Endlosformular darzustellen.
Problem besteht weiterhin, ich habe keine Lösung gefunden!