Hallo zusammen,
in meiner Datenbank habe ich eine Tabelle tblAnlagen, in der Produktionsanlagen von mehreren Herstellern und ihre zugehörige Kapazität gelistet werden. Die Datensätze in der Tabelle verwalte ich über das Formular frmAnlagenBearbeiten. Bezüglich der Kapazität habe ich in der Tabelle tblAnlagen ein Feld "Kapazität", welches als Felddatentyp logischerweise "Zahl" hat. Im Formular frmAnlagenBearbeiten verwende ich ein Textfeld txtKapazität, in dem ich den Zahlenwert eintrage und dieser wird dann in das entsprechende Feld der Tabelle tblAnlagen geschrieben.
Nun möchte ich auch potentielle Erweiterungen der Kapazität aufnehmen und dabei die Kapazität mit einem Jahr (Datum) verknüpfen. Es müsste praktisch ein, zwei, oder mehrere Textfelder für "Kapazität" im Formular geben, die ich, je nachdem wie viele Erweiterungen der Produktionskapazität stattgefunden haben, befüllen kann. In der Tabelle tblAnlagen selbst soll in dem Feld der Kapazität der jeweiligen Anlage jedoch die Summe aus allen Kapazitäten angezeigt werden.
Ist so etwas möglich? Nutzt man dafür am besten ein Unterformular?
Gruß
Simon
			
			
			
				Hallo,
Zitathabe ich in der Tabelle tblAnlagen ein Feld "Kapazität", welches als Felddatentyp logischerweise "Zahl" hat. 
Das löschst Du wieder.
ZitatEs müsste praktisch ein, zwei, oder mehrere Textfelder für "Kapazität" im Formular geben, 
Auch das solltest Du unterlassen.
Die Kapazität muss in eine extra Tabelle die so aussehen sollte.
tblKapazitätKapID (autowert, PS)
AnlageID_F (Fremdschlüssel zur Anlage)
Jahr
KapazitätErw
Auf diese Art kannst Du beliebig viele Kap.erweiterungen erfassen.
Erfassung mit einem Unterformular, je Jahr ein Datensatz.
Im Formularkopf dieses Unterformulars kannst Du dann die Summe der Kapazitäten bilden.
Die Summe wird 
nicht in einem Tabellenfeld gespeichert. Die Summe wird immer berechnet. Das ist in einer Datenbank der übliche Weg, da nur dann sichergestellt ist, dass die Summe auch stimmt.
Man kann im Hafo auch die Summe bilden:
=DomSumme("Kapazität";"tblAnlagen";"AnlagenID_F = " & AnlagenID)Als Ausdruck in einem Formularfeld. Dann braucht es die Summe im Ufo nicht.
			
				Hallo,
in der Tabelle 
tblAnlagen habe ich nun das Feld "Kapazität" wieder gelöscht. 
ZitatDie Kapazität muss in eine extra Tabelle die so aussehen sollte.
tblKapazität
KapID (autowert, PS)
AnlageID_F (Fremdschlüssel zur Anlage)
Jahr
KapazitätErw
Ich habe eine neue Tabelle 
tblKapazität erstellt, die so aussieht:
Screenshot 2024-03-05 083004.png 
Zudem habe ich wie besagt das Unterformular 
ufrmKapazität erstellt und mit der Tabelle 
tblKapazität verknüpft. Es sieht so aus:
Screenshot 2024-03-05 083120.png 
Dieses Unterformular habe ich im Hauptformular frmAnlagenBearbeiten eingebaut.
ZitatMan kann im Hafo auch die Summe bilden:=DomSumme("Kapazität";"tblAnlagen";"AnlagenID_F = " & AnlagenID)Als Ausdruck in einem Formularfeld. Dann braucht es die Summe im Ufo nicht.
Genau, ich möchte die Summe der Kapazitäten nicht im Unterformular, sondern im Hauptformular bilden. Wo genau füge ich diesen Code ein? In einem Textfeld?
Gruß
Simon
			
				Hallo,
ZitatWo genau füge ich diesen Code ein? In einem Textfeld?
Ja, in einem Textfeld.
Das Jahr darf kein Datumsfeld sein, das ist eine Zahl des Typs Integer.
			
				Hallo,
ZitatDas Jahr darf kein Datumsfeld sein, das ist eine Zahl des Typs Integer.
Auch nicht, wenn ich ein richtiges Datum eingeben möchte?
Und muss ich den Code in dem Textfeld bei einem bestimmten Ereignis einfügen? Bin an dieser Stelle etwas ratlos.
			
				Hallo,
wenn du da ein Datum eingegeben willst, muß das natürlich ein Datum als Datentyp sein.
Aber dann solltest du das Feld auch sinnvoll benennen.
Der gezeigte Ausdruck oben ist kein VBA Code, das ist ein Eintrag als SteuerelementInhalt. Dass das kein VBA ist, sieht man an DomSumme und den Semikolons. Mit einem Ereignis hat das auch nichts zu tun. 
			
			
			
				Hallo,
Zitatwenn du da ein Datum eingegeben willst, muß das natürlich ein Datum als Datentyp sein.
Aber dann solltest du das Feld auch sinnvoll benennen.
Alles klar, ich habe es bei "Datum" als Felddatentyp belassen, die Spalte aber von "Jahr" zu "Datum" umbenannt.
Danke, ich habe es geschafft!
ZitatDer gezeigte Ausdruck oben ist kein VBA Code, das ist ein Eintrag als SteuerelementInhalt.
Alles klar, habe ich jetzt auch verstanden und es funktioniert. 
Danke für die erneute Hilfe! :D 
			
				Hallo,
noch eine kleine Rückfrage: Gibt es eine Möglichkeit, das Textfeld, in dem die Kapazitäten addiert werden, aufsteigend zu sortieren? Ich lasse mir das Formular in der Datenblattansicht anzeigen, allerdings kann ich in der Spalte mit der Kapazität jetzt nicht mehr "Von A bis Z sortieren", dies hängt vermutlich mit der zugrundeliegenden Formel zusammen:
=DomSumme("KapazitätErw";"tblKapazität";"AnlageID_F = " & [AnlageID])
In allen anderen Feldern würde die Sortierung funktionieren.
Gruß
Simon
			
			
			
				Hallo,
die Spalte sollte sich eigentlich sortieren lassen, mit der Formel hat das nichts zu tun.
Die Formel steht ja auch im Hafo und dsortieren willst Du im Ufo.
Kannst Du die Abfrage des Ufos sortieren, bzw. wie versuchst Du zu sortieren ?
Mir ist auch nicht ganz klar, was Du sortieren willst.
			
			
			
				Hallo,
bevor ich diese Formel implemtiert habe und die Kapazität nur in das Textfeld geschrieben habe, konnte ich das Formular in Datenblattansicht durch einen Klick auf den kleinen Pfeil sortieren. 
#1.png 
Jetzt geht das in dieser Spalte (Gesamtkapazität) nicht mehr, in den anderen schon (da will ich es aber nicht, weil ich gerne die Kapazität absteigend sortiert haben möchte)
ZitatKannst Du die Abfrage des Ufos sortieren, bzw. wie versuchst Du zu sortieren ?
Welche Abfrage? Ich habe keine Abfrage in meinem Ufo.
Noch als Hinweis: Ich nutze ein Formular frmAnlagenBearbeiten, in dem ich die Anlagen bearbeite und anlege und ein Formular frmAnlagen, welches in der Datenblattansicht geöffnet wird und einen Teil der Steuerelemente des Formulars frmAnlagenBearbeiten enthält. Mithilfe eines Kombinationsfeldes im Formular frmAnlagenBearbeiten kann ich ein Produkt auswählen und danach werde ich auf das Formular frmAnlagen weitergeleitet, dass mir dann nur Anlagen zu diesem Produkt anzeigt. Diese Anlagen kann ich nicht nach absteigender Größe sortieren.
			
				Hallo,
Gesamtkapazität ist das Feld mit der Formel im Hafo ?
Mir ist der Aufbau nicht klar. Was zeigst Du in der Datenblattansicht, das Hafo ?
Wenn das Hafo als Datenblatt eingestellt ist, kann man doch kein Ufo anzeigen.
Noch eine kleine Anmerkung:
Im Regelfall verwendet man als Datenquelle für Formulare immer Abfragen und nicht die Tabellen.
Nur über Abfragen können z.B. zuverlässige Sortierungen angelegt werden.
Abfragen sind im Zugriff auch schneller als über Tabellen, da intern auch bei Tabellen Access immer eine Abfrage erstellt. Und wenn die schon vorleigt ist es besser. Das dürfte allerding nur bei großen Datenmengen spürbar sein.
			
			
			
				ZitatGesamtkapazität ist das Feld mit der Formel im Hafo ?
Genau, das Feld Gesamtkapazität befindet sich im Hauptformular 
frmAnlagenBearbeiten und ist mit der Formel ausgestattet.
Ich nutze ein Formular 
frmAnlagenBearbeiten, in dem ich die Anlagen bearbeite und anlege und ein Formular 
frmAnlagen, welches in der Datenblattansicht geöffnet wird und einen Teil der Steuerelemente des Formulars 
frmAnlagenBearbeiten (darunter auch das Feld Gesamtkapazität und das Unterformular 
ufrmKapazität) enthält. Mithilfe eines Kombinationsfeldes im Formular 
frmAnlagenBearbeiten kann ich ein Produkt auswählen und danach werde ich auf das Formular 
frmAnlagen weitergeleitet, dass mir dann nur Anlagen zu diesem Produkt in der Datenblattansicht anzeigt. Das funktioniert auch wunderbar so, nur kann ich die Anlagen in der Datenblattansicht nicht nach absteigender Größe sortieren.
			
 
			
			
				Hallo,
Zitatdass mir dann nur Anlagen zu diesem Produkt in der Datenblattansicht anzeigt. 
Und dieses Formular hat aber kein Ufo, da ist dann auch das Feld mit der Formel.
Hast Du für dieses Formular auch keine Abfrage ?
			
				ZitatUnd dieses Formular hat aber kein Ufo
Dieser Formular hat auch das Ufo integriert. Ich habe quasi das Formular frmAnlagenBearbeiten kopiert und nur Steuerelemente entfernt, die ich nicht in der Datenblattansicht zu den einzelnen Anlagen angezeigt bekommen möchte.
ZitatHast Du für dieses Formular auch keine Abfrage ?
Nein, dieses Formular greift einfach auf die Tabelle 
tblAnlagen als Datensatzquelle zu
			
 
			
			
				Hallo,
ZitatDieser Formular hat auch das Ufo integriert.
das irritiert mich jetzt. Ich bin bisher immer davon ausgegangen, dass in ein Formular in Datenbalttansicht kein Ufo eingebaut werden kann.
Erstelle mal für das Formular eine Abfrage und erstelle in der Abfrage ein berechnetes Feld.
GesamtKapazität (t/a): DomSumme("KapazitätErw";"tblKapazität";"AnlageID_F = " & [AnlageID])Dann solltest Du im Spaltenkopf sortieren können. Oder Du stellst die Sortierung gleich in der Abfrage ein.
Ich habe das jetzt nicht getestet, einfach mal probieren. Ob die Abfrage dann flott genug ist, musst Du dann auch mal testen.
			
				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]); #1.png
Wenn ich das richtig gemacht habe, dann habe ich nun das Problem, dass in der Datenblattansicht folgendes in der Spalte "Gesamtkapazität" angezeigt wird:
#2.png 
Das hat also leider nicht geklappt!
			
 
			
			
				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])
			
			
			
				Danke für den Hinweis, jetzt scheint es zu funktionieren. Ich habe die Sortierung direkt in der Abfrage eingestellt!
			
			
			
				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
			
			
			
				Hallo,
was hat denn das Feld "KapazitätErw" für ein Datentyp in der Tabelle?
			
			
			
				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 
			
			
			
				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.GesamtSo 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.