Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Summe von Textfeldern in Tabelle schreiben

Begonnen von ChemSim, März 04, 2024, 21:21:18

⏪ vorheriges - nächstes ⏩

ChemSim

Zitatdass in ein Formular in Datenbalttansicht kein Ufo eingebaut werden kann.

Also es funktioniert ohne Probleme, ich habe das Ufo auch nur drinnen gelassen, weil ich mir nicht sicher bin, ob dann das Feld "Gesamtkapazität" nicht mehr richtig berechnet wird. In der Datenblattansicht sieht man das Ufo logischerweise eh nicht.

Ich habe für das Formular frmAnlagen nun eine Abfrage als Datensatzquelle erstellt und dabei das berechnete Feld eingebaut:

SELECT tblAnlagen.ProduktID_F, tblAnlagen.HerstellerID_F, tblAnlagen.StandortID_F, tblAnlagen.Anlagenname, DSum("KapazitätErw","tblKapazität","AnlageID_F = " & [AnlageID]) AS [GesamtKapazität (t/a)] FROM tblAnlagen INNER JOIN tblKapazität ON tblAnlagen.AnlageID = tblKapazität.AnlageID_F ORDER BY DSum("KapazitätErw","tblKapazität","AnlageID_F = " & [AnlageID]);
Sie dürfen in diesem Board keine Dateianhänge sehen.

Wenn ich das richtig gemacht habe, dann habe ich nun das Problem, dass in der Datenblattansicht folgendes in der Spalte "Gesamtkapazität" angezeigt wird:

Sie dürfen in diesem Board keine Dateianhänge sehen.

Das hat also leider nicht geklappt!

MzKlMu

Hallo,
da sich die Formel auch auf die AnlageID bezieht, muss dieses Feld natürlich auch in die Abfrage. Kann dann aber bei Anzeigen das Häkchen raus.

SELECT ProduktID_F
    ,HerstellerID_F
    ,StandortID_F
    ,AnlageID
    ,Anlagenname
    ,DSum("KapazitätErw", "tblKapazität", "AnlageID_F = " & [AnlageID]) AS [GesamtKapazität (t/a)]
FROM tblAnlagen
INNER JOIN tblKapazität ON tblAnlagen.AnlageID = tblKapazität.AnlageID_F
ORDER BY DSum("KapazitätErw", "tblKapazität", "AnlageID_F = " & [AnlageID])
Gruß Klaus

ChemSim

Danke für den Hinweis, jetzt scheint es zu funktionieren. Ich habe die Sortierung direkt in der Abfrage eingestellt!

ChemSim

#18
Hallo,

ich habe gerade bemerkt, dass die Sortierung bei allen Produkten zu funktionieren scheint, außer bei einem?!

Ich habe doch über den Code

SELECT ProduktID_F
    ,HerstellerID_F
    ,StandortID_F
    ,AnlageID
    ,Anlagenname
    ,DSum("KapazitätErw", "tblKapazität", "AnlageID_F = " & [AnlageID]) AS [GesamtKapazität (t/a)]
FROM tblAnlagen
INNER JOIN tblKapazität ON tblAnlagen.AnlageID = tblKapazität.AnlageID_F
ORDER BY DSum("KapazitätErw", "tblKapazität", "AnlageID_F = " & [AnlageID])

die Sortierung nach der Gesamtkapazität für alle Produkte eingestellt, oder etwa nicht?

EDIT:

Ich habe gerade gemerkt, dass die fehlerhafte Sortierung nicht an einem speziellen Produkt liegt, sondern an der Größenordnung der Zahlen. Bei meinem Produkt A ist die Gesamtkapazität immer in der gleichen Größenordnung (Millionen Bereich, 7-stellig), bei dem anderen Produkt B ist die Gesamtkapazität im Zehn- und Hunderttausender Bereich und genau dann tritt der Fehler auf. Sobald ich alle Kapazitäten beispielhaft auf eine gemeinsame Größenordnung bringe, ist die Sortierung wieder korrekt!

Wie kann ich diesen Fehler beheben? Er ist meiner Meinung nach sehr merkwürdig und ergibt wenig Sinn

Gruß
Simon

MzKlMu

Hallo,
was hat denn das Feld "KapazitätErw" für ein Datentyp in der Tabelle?
Gruß Klaus

ChemSim

Hallo,

das Feld "KapazitätErw" in der Tabelle tblKapazität hat als Felddatentyp "Zahl". Die Feldgröße ist dabei "Long Integer" und ich habe noch als Format "#.##0" eingestellt, um Tausendertrennzeichen einzufügen.

Ich habe aber als Lösung gefunden, statt der Zeile

ORDER BY DSum("KapazitätErw", "tblKapazität", "AnlageID_F = " & [AnlageID])
die Zeile

ORDER BY Log(DSum("KapazitätErw","tblKapazität","AnlageID_F = " & [AnlageID])) DESC;
in der SQL-Abfrage zu verwenden. Ich weiß nicht, ob das eine gute Lösung ist, aber es funktioniert.

Gruß,
Simon

ebs17

SELECT
   A.ProduktID_F,
   A.HerstellerID_F,
   A.StandortID_F,
   A.AnlageID,
   A.Anlagenname,
   K.Gesamt
FROM
   tblAnlagen AS A
      INNER JOIN
         (
            SELECT
               AnlageID_F,
               SUM(KapazitätErw) AS Gesamt
            FROM
               tblKapazität
            GROUP BY
               AnlageID_F
         ) AS K
         ON A.AnlageID = K.AnlageID_F
ORDER BY
   K.Gesamt
So kann die Abfrage auch aussehen. Verschieben der korrellierten Unterabfrage in den FROM-Teil dürfte die Performance erheblich steigern. Vorher war die Verwendung des INNER JOINs auf tblKapazität sinnfrei und aufwandserhöhend.

Zahlensortierung sollte immer funktionieren, egal in welchen Größenordnungen.
100 > 2
235667 > 45
...sollte alles True sein.
Mit freundlichem Glück Auf!

Eberhard