Neuigkeiten:

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

Mobiles Hauptmenü

Zahlenbereiche auswerten - Wie ?

Begonnen von dfens, Februar 08, 2024, 09:33:31

⏪ vorheriges - nächstes ⏩

dfens

Hallo an die Profis hier!

Hintergrund:
Ich lade großkalibrige Gewehrpatronen selbst und habe dazu eine Datenbank gebastelt, die mir die unterschiedlichen Ladedaten zeigt.
Info dazu: Die Patronenhülsen sind Komponenten, die öfter als einmal verwendet werden können.

Ziel:
Ein Feld der Datenbank (z.B. aus einer Abfrage) soll mir zeigen, wie oft eine Hülse bereits geladen wurde.
Die Hülsen befinden sich in Boxen mit durchgehender Nummerierung (tblStorage)
Es gibt eine Tabelle (tblLadung), in der das jeweilige Ladedatum, die Anzahl der geladenen Patronen und ein paar andere Daten (Pulvermenge, Geschoss etc.) zu sehen sind.
Es werden immer unterschiedlich viele Hülsen pro Ladung verwendet. Mal mache ich 30, mal 10, mal 50

Beispiel:
Ladung 1 (tblLadung): 30 Hülsen - entnommen von Position 30 bis 59 (tblStorage)
Ladung 2: 20 Hülsen - entnommen aus Position 20 bis 39
Ladung 3: 30 Hülsen - entnommen aus Position 10 bis 39

Ergibt also:
Die Hülsen von 10 bis 19 wurden nur einmal geladen,
die Hülsen von 20 bis 29 zweimal,
die von 30 bis 39 dreimal
und die von 40 bis 59 wiederum nur einmal

Wie kann ich es nun realisieren, dass ich auswerten kann. welche Hülsen aus tblStorage wie oft in der tblLadung verwendet wurden.
Hat jemand dazu eine Idee ? Dazu ist nirgends etwas zu finden... Eventuell geht es ja gar nicht?



PhilS

Zitat von: dfens am Februar 08, 2024, 09:33:31Wie kann ich es nun realisieren, dass ich auswerten kann. welche Hülsen aus tblStorage wie oft in der tblLadung verwendet wurden.
Der wichtigste Punkt ist, dass du eine weitere Tabelle (z.B.: tblLadevorgang) brauchst, die eine M-zu-N-Beziehung zwischen Ladung und Hülse herstellt.
Für deine Auswertung brauchst du dann eigentlich nur die Datensätze in dieser Tabelle zählen.

Aus meiner Sicht, ist der schwierige Teil bei der Problemstellung ist, wie du die Benutzeroberfläche gestaltest damit du beim/nach dem Laden der Hülsen einfach die jeweiligen Hülsen der Ladung zuweisen, d.h. die Datensätze in  tblLadevorgang eintragen, kannst.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

dfens

Die m-n Relation hatte ich schon implementiert.
Aber Du hast das Problem schon erkannt  ;D Und genau daran bin ich gescheitert. Wie trage ich die verwendeten Hülsen in die Hilfstabelle (tblLadevorgang) ein ?
Einzeln 30 Nummern oder so auszuwählen ist ja nicht gerade das gelbe vom Ei.
Es gibt aber den Bereich (Erste Position plus die Anzahl der geladenen Patronen - 1).
Wieder ein Beispiel:
Ladung 1: 30 Hülsen verwendet. Die erste Hülse wird entnommen aus Lagerposition 30 (tblStorage)
Dann plus 30 Hülsen ergibt einen Bereich von Position 30 bis Position 59
Wie schaffe ich es, dass in Deiner Zwischentabelle 30 mal LadungID = 1 und dann im zweiten Feld (z.B. StorageID) die jeweiligen Lagerpositionen (also 30, 31, 32... bis 59) automatisiert eingetragen werden?
Bin mal gespannt ob hier jemand ne Lösung dazu hat. Danke schon mal!

ebs17

#3
Mittels einer Zahlenhilfstabelle (Tabelle mit einem Feld Long und einer fortlaufenden Nummerierung in einer ausreichenden Höhe) kannst Du Zahlenbereiche in Einzelzahlen auswerten. Zahlenhilfstabelle bedeutet, die Tabelle besteht neben dem Datenmodell für sich.
Grundlagen - SQL ist leicht (1) - Hilfstabellen

Das könnte auf zwei Wegen stattfinden, in Abhängigkeit vom konkreten Datenmodell und Deinem gewünschten Workflow.

1) Die gewonnenen Zahlen werden unmittelbar dafür verwendet, die Ladezahl der entsprechenden Einzelhülse um 1 zu erhöhen (Aktualisierungsabfrage).

2) Pro Ladevorgang wird jeweils nur der Bereich (30-59, 20-39, 10-39) gespeichert. In einer Auswahlabfrage werden dann alle Datensätze = alle Bereiche gleichzeitig in Einzelzahlen aufgelöst, nachfolgend dann die Einzelzahlen gezählt (Gruppierung + Aggregierung).

Meine Tendenz wäre die Bevorzugung der zweiten Variante.
Mit freundlichem Glück Auf!

Eberhard

dfens

#4
Das mit der Zahlenhilfstabelle klingt im Ansatz für mich logisch. Die Variante 1 ist mir nicht klar. Variante 2 entspricht schon eher den Gegebenheiten, da ja in der Ladetabelle schon die Bereiche gespeichert werden. Einzig das "Auflösen in Einzelzahlen" ist mir nach wie vor ein Rätsel - aber das ist genau das was ich benötige. In der Ladetabelle  gibt es ja die drei Felder "LadungID", "BereichVon" und "BereichBis". Aus den beiden Bereichen errechne ich dann die Anzahl (z. B. LadungID = 1, BereichVon = 30, BereichBis = 59. Somit Anzahl = 30).
Jetzt muss ich "nur noch" anhand der Beispiele mit der Zahlenhilfstabelle versuchen, das irgendwie in Einzelzahlen umzuwandeln, damit ich die dann der LadungID zuweisen kann. Keine Ahnung wie ich da vorgehen soll. Mal sehen. Danke !

ebs17

#5
Meine Standard-Hilfstabelle für vielfache verschiedene Nutzung ist T999 mit Zahlenfeld I (Long) und den Inhalten 0-999.
SELECT
   Q.I AS Position,
   COUNT(*) AS LadeAnzahl
FROM
   (
      SELECT
         T.I
      FROM
         (
            SELECT
               LadungID,
               BereichVon,
               BereichBis
            FROM
               LadeTabelle
         ) AS L, T999 AS T
WHERE
   T.I BETWEEN L.BereichVon
      AND
   L.BereichBis
   ) AS Q
GROUP BY
   Q.I
Mit freundlichem Glück Auf!

Eberhard

dfens

Hi Eberhard. Herzlichen Dank dass Du mir das gleich mit meinen Feldnamen "vorgekaut" hast! Mir als Datenbank-Neuling ist SQL gelinde gesagt noch nicht ganz geheuer. Aber ich werde mich da reinarbeiten, um mich nach einem halben Jahr zu wundern, was ich da gemacht habe  ;)  Falls ich nochmal ein wenig Hilfe brauche, darf ich hier nochmal aufschreien?
Danke nochmals!

ebs17

Beim "Reinarbeiten" ist es hilfreich, bei der SQL-Anweisung von innen nach außen zu analysieren, weil so auch die Abarbeitung der Anweisung erfolgt. Daher ist die Anweisung auch etwas "ausführlich".
Zum Verstehen hilfreich:
Grundlagen - SQL ist leicht (2) - Alias
Grundlagen - SQL ist leicht (6) - Komplexe Abfragen schreiben und lesen

Zur Funktionalität (Performance):
Grundlagen - SQL ist leicht (8 ) - Index
Mit freundlichem Glück Auf!

Eberhard

dfens

Ich habe es genauso gemacht (von innen nach außen). Ein wenig C++ Kenntnisse habe ich und das war auch hilfreich.
SQL ist ja wirklich großartig und jetzt habe ich gleich noch wesentlich mehr Ideen, die ich umsetzen werde (zumindest versuche ich es). In kurzen Worten: Mit der Zahlenhilfstabelle hat alles wunderbar geklappt und ich bedanke mich für die hilfreichen Tipps!