Hallo zusammen,
ich bin Access Anfänger und arbeite grade an einem Projekt, wo ich ein Abfrageergbnis im Formular weiterverarbeiten möchte.
Folgende Situation:
Ich erfasse Statistik Daten von Fahrzeugen in einer Tabelle/Formular, u.a getankter Dieselkraftstoff.
In einem weiteren Formular/Tabelle verwalte ich den Füllstand einer internen Betriebstankstelle.
Zu Testzwecken habe ich einige wenige Datensätze eingegeben.
Mit einer SQL Abfrage ermittele ich die Summe des getankten Diesel (seit dem letzten Datum mit vollem Füllstand), subtrahiere das Ergebnis vom Maximal Füllstand von 15.000 L und erhalte als Ergebnis den neuen Füllstand. Das funktioniert auch.
Mein Ansatz:
Nun möchte ich dieses Ergebnis in dem Formular für den Füllstand an ein Kombifeld übergeben, um dieses als
neuen Datensatz zu erfassen -> und hier hängt es, wie übergebe ich das ?
Wenn die Tankstelle wieder vollgetankt wird erfasse ich einen Datensatz mit vollem Füllstand von 15.000 L.
So ergibt sich eine Historie mit den Füllständen.
Ich hoffe das es einigermaßen verständlich ist und freue mich über Tipps.
Danke.
Hallo,
das ist ja sonst nix als eine Bestandermittelung.
Die Füllungen und die Tankvorgänge gehören in eine Tabelle.
Füllungen mit + und Tankvorgänge mit -
Der Füllstand ist dann einfach die Summe.
FahrzeugID Menge Vorgang Datum
0 15000 Füllung 20.06.2021
1 -50 Tanken 21.06.2021
2 -100 Tanken 22.06.2021
Wenn jetzt über die Menge die Summe bildest hast Du den aktuellen Füllsttand (hier 14850).
Diese Suptrahierungen entfallen ersatzlos.
Außerdem glaube ich auch nicht, dass der Tank der Tankstelle immer komplett leer gemacht wird, Du wirst also nicht immer 15.000 nachfüllen.
Wenn Du alle Mengen in einem Endlosformular erfasst, kannst Du automatisch im Formularkopf immer den aktuellen Füllstand anzeigen. FahrzeugID 0 entspricht kein Fahrzeug = Nachfüllen. Du kannst hier aber auch das Fahrzeug angeben das das Diesel nachliefert.
Du solltest das Vorhaben überdenken.
Hallo Klaus,
danke für den Tipp, werd ich mal testen.
An ein Endlosformular hab ich gar nicht gedacht.
Gruß
Hallo nochmal,
hat super geklappt mit dem Endlos Formular, danke nochmal.
Hättest du evtl noch einen Tipp, wie ich steuern kann das bei Auswahl der Vorgangsart "Tankvorgang" automatisch das Feld zur Mengen Angabe ein Minus Zeichen erhält für den negativen Wert ?
Danke. Gruß Sascha
Hallo Sascha,
Führe in der Typentabelle (Tankvorgang) einfach einen Faktor (1/-1) mit.
gruss ekkehard
Danke Ekkehard, ich denke ich weis was du in etwa meinst.
Aber ich glaube ich komme grad nicht drauf wo ich da ansetzen muss 🤔
Hallo,
zeige mal ein Bild des Beziehungsfensters oder Lade die DB hier hoch.
Sorry, ich habe mich schlecht ausgedrückt.
Es sollte heissen
ZitatFühre in der Typentabelle (VorgangsArt) einfach einen Faktor (1/-1) mit.
Luftcode
SELECT Sum(TV.Menge * VA.Faktor) AS aktuellerBestand
FROM Tankvorgaenge AS TV
INNER JOIN VorgangsArten AS VA
ON TV.VorgangsArtID_F = VA.VorgangsArtIDBestand an einem bestimmten Tag
SELECT Sum(TV.Menge * VA.Faktor) AS BestandAm, TV.TDatum
FROM Tankvorgaenge AS TV
INNER JOIN VorgangsArten AS VA
ON TV.VorgangsArtID_F = VA.VorgangsArtID
WHERE TV.TDatum <= EinDatumgruss ekkehard
Hallo Klaus,
Db hochladen geht leider nicht aus Datenschutzgründen.
Screenshot funktioniert grade nicht mit OneDrive Freigabe ... *blöd*
Es ging mir im Prinzip darum, wie ich bei der Erfassung von Diesel Mengen im Formular
steuern kann, das durch Vorwahl der Vorgangsart "Tanken" automatisch der erfasste Betrag negativ wird,
um das nicht dem Benutzer zu überlassen.
Evtl. klappts später noch mit Screenshots.
Gruss
(https://1drv.ms/u/s!Ao8AJPAEklAyzWYEHkAKSd_4rLoy)
So hallo nochmal,
unten hab ich jetzt 2 Screenshots verlinkt, einmal von den 3x Tabellen die zu diesem Vorgang gehören und
dann noch vom Endlosformular.
Die Kombi Felder "Fahrer" und "Fahrzeug" befülle ich jeweils mit einer Abfrage auf bestehende Tabellen mit hinterlegten Stammdaten.
Wenn ich Daten ins Formular eintrage funktioniert es auch wunderbar, solange man immer an das "Minus" denkt
für die Tankvorgänge. Das würd ich halt gern abfangen.
https://1drv.ms/u/s!Ao8AJPAEklAyzWdVy956XSs0Xe-S
https://1drv.ms/u/s!Ao8AJPAEklAyzWYEHkAKSd_4rLoy
Hallo,
Du stellst es Dir nicht ganz richtig vor..
Bei "Diesel_Menge" wird lediglich ein (positiver) Betrag eingegeben. Anhand der Vorgangsart wird (später) definiert, bzw. ausgewertet, ob es sich um eine "postive" Menge (Füllung) oder um eine negative (Tankvorgang) Menge handelt.
Wenn Du unbedingt auf eine negative Eingabe beharrst, dann führe wie schon beschrieben den 1/-1 Faktor in der Tabelle tblVorgänge mit und korrigiere die Eingabe wie folgt:
Sub Diesel_Menge_Afterupdate()
Me!Diesel_Menge = Me!Diesel_Menge * Me!Vorgangsart.Column(2)
End Sub
wobei in Me!Vorgangsart.Column(2) der 1/-1 Faktor steht und keine negativen Zahlen eingegeben werden dürfen, wodurch das Ganze nicht zu empfehlen ist.
Hallo,
das passt so nicht. Die Mengen (egal ob Intern oder Extern) gehören in eine Tabelle. Nur dann lassen sich ohne Klimmzüge die Bestände erfassen, denn die Menge muss ja summiert werden um den Bestand zu erhalten.
Nur dann macht auch die Vorgangsart Sinn.
Extern, sind das die Nachfüllvorgänge ?
Bei den Fahrzeugen werden auch die Lieferfahrzeuge erfasst.
Wieso haben die Tabellen keine Beziehungen ?
Man kann keine Datenbank ohne Beziehungen betreiben, Beziehungen sind das A+O einer Datenbank. Das ist der erste Schritt nach dem Anlegen der Tabellen. Erst dann kann man mal an Formulare denken.
Du brauchst auch eine Tabelle für die Fahrer (Intern und Extern in einer Tabelle).
Auch die Vorgangsart erfordert eine Tabelle.
Alle Tabellen müssen in das Beziehungsgeflecht aufgenommen werden.
Du solltest das Vorhaben noch mal überdenken, das wird so nix.
Lade die DB hier mal hoch, mit einigen anonymen Spieldaten.
Hallo Franz,
danke für die Erklärung, das war mir vorher nicht klar, das die Überprüfung hinterher stattfinden soll.
Nur auf welchem Weg ich das hinterher überprüfe hab ich nicht ganz verstanden.
Zum anderen gibt es keine Tabelle "Vorgangsart", ich hab das Kombi hierfür mit einer Werteliste befüllt.
Jetzt verstehe ich auch den Code und die Kombination mit 1/-1 um die Werte entsprechend positiv oder als
negativ zu bewerten. Vorgangsart muss in eine eigene Tabelle.
@klaus Ich habe nur einen "Ausschnitt" gezeigt, dies ist nicht die komplette Datenbank. Intern und Extern deshalb, weil in seltenen Fällen auswärts getankt wird. Da wird kein Bestand verfolgt, lediglich erfasst und eine Quittung abgelegt.
- Ja Lieferfahrzeug ist in entsprechender Tabelle angelegt
- Fahrertabelle gibts auch
- Beziehungen ebenfalls bei den Tabellen mit den Stammdaten
Das hatte ich alles als erstes eingerichtet. Dann länger nicht mehr daran gearbeitet.
Jetzt kam mir die Idee, alle Excel Listen die mit Statistik Daten befüllt werden, eine Dieselbestandliste für die Betriebsinterne Tankstelle, in Access abzubilden.
Die DB auszuräumen wird etwas Zeit in Anspruch nehmen. Melde mich dann wieder.
Trotzdem schon mal Danke an alle die sich beteiligt haben.
Schönen Abend noch.
Hallo,
auch die Tabellen des Ausschnitts brauchen Beziehungen, nicht nur die Tabellen mit den Stammdaten.
Auch externe Tankvorgänge kommen in diese eine Tabelle mit der Vorgangsart extern. Als Multiplikator wird dann 0 verwendet, dann wird auch die Menge beim Summieren 0 und zählt somit nicht mit.
Ok danke Klaus. Das werd ich dann nochmal angehen.
Gruß
Hallo zusammen,
habe mir die Infos von euch nochmal durch den Kopf gehen lassen, und relativ viel Zeit
in ein komplett neues Datenmodel investiert ( wie erwähnt bin Anfänger, mache seit ein
paar Wochen einen Datenbankkurs ).
Zunächst hab ich mal ein ER Model gezeichnet um die Basis zu veranschaulichen, beigefügt in dem
Link unten.
Es würde mich freuen Meinungen zur Umsetzbarkeit/Plausibilität zu hören, um zu wissen ob ich auf dem
richtigen Weg bin.
Zur Erklärung:
Ich versuche verschiedene Fahrzeuge im Fuhrpark abzubilden, LKWs, Arbeitsmaschinen, Anhänger, Fremdfahrzeuge
Lieferanten etc.
Diese werden als Stammdaten geführt, "erzeugen" Statistikwerte die erfasst werden und "verbrauchen" Diesel aus einer internen Tankstelle.
Bei einem Punkt des Models bin ich mir unsicher. Da es verschiedene Fahrzeugklassen sind ( LKW, Arbeitsmaschine, etc ) werden bei manchen Fahrzeuge zusätzliche spezifische Stammdaten erfasst, die ich in eine 1:1 Tabelle auslagern wollte. Wäre das passend ?
Desweiteren muss ich zwischen verschiedenen Fahrzeugen eine Beziehung herstellen, z.b. LKW-Anhänger-Arbeitsmaschine oder nur LKW-Hänger. Dies wollte ich als rekursive Beziehung abbilden.
Ich bedanke mich schon mal im voraus für Tipps und Anregungen.
Grüße.
https://1drv.ms/u/s!Ao8AJPAEklAyzXvBj6h_CRpLmkW6?e=uaitSd
Hallo,
Vorschlag anbei.
Anstelle 1:1-Beziehung Zusatztabelle mit individueller Zusatzinfo pro Datensatz.
Parent/Child-Konstruktion: Zusatzfeld ("Fz_ParentID")mitführen, das ID-Wert auf Parent-DS aufnimmt.
Fz_ParentID ist NULL bei oberster Ebene ("LKW").
Hallo Franz,
vielen Dank für die Mühe.
Werde mir das erstmal in Ruhe anschauen.
Gruß
So hallo nochmal,
hab mir die überarbeitete Version angeschaut.
- "Besitzer" war wohl etwas unpräzise gewählt, es soll festgelegt werden zu welcher "Firma"
das Fahrzeug gehört, also etwa "intern" und "extern".
- Bei den Fahrern war ich tatsächlich auch erst bei der 1:n Beziehung, bin aber unsicher geworden,
da ja Fahrer theoretisch auch "mehrere" Fahrzeuge fahren können
- Statistik war auch etwas unpräzise -> besser "erzeugt" Daten wie KM-Stand, Betriebsstunden an mehreren Motoren etc
diese werden aus Rapporten der Fahrer zum jeweiligen Fahrzeug/Maschine erfasst -> natürlich wird dann daraus aus eine Statistik über Zeitraum X erstellt
- Bei Diesel/Bestand ähnlich -> es wird an einer internen Tankstelle getankt, die Entnahmemenge (Tankvorgang) wird
protokolliert und der Füllstand der Tankstelle ermittelt
- Bei der Detailtabelle zu den Fahrzeugen bin ich nicht ganz sicher ob ich es korrekt verstehe ... evtl. sind meine Angaben auch hier etwas unpräzise. Abbilden wollte ich, das verschiedene Fahrzeuge spezielle Detailangaben haben, die ich in der Haupttabelle nicht abbilden kann. 1:1 wäre ungünstig, das gibt mehrere Tabellen. Aber ich bin durch dich
auf die Idee gekommen, eine n:1 Detailtabelle zu verwenden, ein Eintrag in der Detailtabelle entspräche mehreren in
der Fahrzeugtabelle ( gleicher Typ Arbeitsmaschine ).
Werde mir das nochmal durch den Kopf gehen lassen und nochmal vielen Dank.
Gruß