Neuigkeiten:

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

Mobiles Hauptmenü

Streckenberechnung Access

Begonnen von silentwolf, Juni 17, 2019, 08:07:30

⏪ vorheriges - nächstes ⏩

silentwolf

Hallo,
ich würde gerne wissen wie Ihr folgendes lösen würdet.
Bis jetzt hatte ich diese Aufgabe in Excel gelöst
Datum.........ObjektVon.........ObjektBis..........KM-gefahren

Da wir immer oder oft die selben Strecken fahren habe ich in Excel ein UDF erstellt die StartObjekt und EndObjekt als Parameter erhält und mit die KM zurück gibt.

Dazu musste ich immer Paarweise die Strecke in die UDF eintragen ..
Wie könnte man das denn mit einer Tabelle in Access lösen oder besser lösen.

Hat hierzu jemand einen Ansatz?

Danke für Hilfe.


PhilS

Zitat von: silentwolf am Juni 17, 2019, 08:07:30
Da wir immer oder oft die selben Strecken fahren habe ich in Excel ein UDF erstellt die StartObjekt und EndObjekt als Parameter erhält und mit die KM zurück gibt.

Dazu musste ich immer Paarweise die Strecke in die UDF eintragen ..
Mir ist noch unklar, wie die Streckenberechnung eigentlich funktioniert. Ist das nur ein reiner Lookup auf die bestehenden Datensätze? Wenn ja, ist das doch recht einfach analog in Access zu realisieren.
Skizziert:
DLookup("[KM-gefahren]","deineTabelle",ObjektVon = " & SuchObjectVon & " AND ObjektBis = " & SuchObjectBis)
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

silentwolf

Hallo Phil,
zuerst einmal Danke für Deine Antwort.
Also im Moment wird sie wie gesagt in Excel als Function berechnet.

function StreckenBerechnung(ByVal strStart as string, ByVal strZiel as string)as double
Select Case True
Case strStart="Home" And strZiel ="Huber"
Streckenberechnung =29.7
...

Ich würde das halt etwas eleganter oder besser lösen können in Access mit einer tblStrecken zum Beispiel.

Aber dann würde ja StreckeVon und StreckeBis ja auf die Tabelle Objekte verweisen..
tblObjID

verknüpft mit tblStrecke..StreckeVon_ObjIDRef und StreckeBis_ObjIDRef...
und das geht ja nicht..


PhilS

Zitat von: silentwolf am Juni 17, 2019, 09:05:18
Also im Moment wird sie wie gesagt in Excel als Function berechnet.
function StreckenBerechnung(ByVal strStart as string, ByVal strZiel as string)as double
Select Case True
Case strStart="Home" And strZiel ="Huber"
Streckenberechnung =29.7
...

Verstehe ich das richtig, dass du in Excel im Programmcode die Entfernungen alle als Literale hardcodiert in deinem Code eingetragen hast? D.h. wenn eine neue Strecke hinzukommt, änderst du den Programmcode entsprechend?


Zitat von: silentwolf am Juni 17, 2019, 09:05:18Ich würde das halt etwas eleganter oder besser lösen können in Access mit einer tblStrecken zum Beispiel.
Aber dann würde ja StreckeVon und StreckeBis ja auf die Tabelle Objekte verweisen..
tblObjID

verknüpft mit tblStrecke..StreckeVon_ObjIDRef und StreckeBis_ObjIDRef...
und das geht ja nicht..
Ja, eine tblStrecken aus der die eingetragenen Entfernungen pro Strecke ausgelesen werden (wenn vorhanden) wäre schon deutlich besser!
Und was genau geht jetzt nicht?


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

silentwolf

Hallo Phil,

ja es ist Hardcoded ich habe ja nicht so viele..Wir haben nur Daueraufträge und deshalb geht es ja..

Das es bessere Lösungen dafür gibt denke ich mir ja eh aber ich komme halt nicht drauf wie es am besten gehen kann.
Na ich kann ja nicht tblObjekte mit einer tblStrecke zweimal verknüpfen.
Wie eben schon in meiner zweiten Antwort geschrieben.

MzKlMu

Hallo,
ZitatNa ich kann ja nicht tblObjekte mit einer tblStrecke zweimal verknüpfen.
natürlich geht das. Du musst nur die Tabelle "tblObjekte" 2x in das Beziehungsfenster aufnehmen. Access ergänzt die 2. Tabelle automatisch mit _1 hinten. Dann kannst Du 2 unabhängige 1:n Beziehungen mit referentieller Integrität erstellen die sich auf die gleiche Tabelle (n-Seite) beziehen.
Aber, das brauchst Du doch gar nicht.
Wie Philip in #1 schon geschrieben hat kannst Du mit DLookup (DomWert) die Entfernung ermitteln. Die beiden ID's der Objekte werden in der Whereklausel übergeben.
Gruß Klaus

silentwolf

Hallo Klaus,
Danke für Deine Nachricht.
Na ja aber wo hinterleg ich denn meine Strecken? Also wie Philip geschrieben hat weiß ich nicht wie das geht.


MzKlMu

Hallo,
Du brauchst natürlich eine Tabelle für die Entfernung zwischen den Objekten mit 3 Feldern:
ObjektID_von, ObjektID_bis und Entfernung.
Beziehungen musst Du nicht unbedingt anlegen, kannst Du aber nach dem oben geschilderten Vorgehensweise.
Gruß Klaus

silentwolf

Hallo Klaus,
nochmal danke für Deinen Tipp.
Ja ich hab jetzt mal die Tabelle nochmal eingefügt und verbunden und natürlich mit dem Feld Entfernung.
Auch hab ich diese Verknüpft damit ich neue Werte eintragen kann.
Jetzt brauche ich nur eine vernüftige Art damit ich bei Eintragung von Obj_Von und Obj_Bis wenn eine Strecke hinterlegt ist diese automatisch im Feld KM einträgt.
Da muss ich noch schaun ob ich das mit dem DLookUp so hinbekomme.

Aber schon mal vielen Dank!

PhilS

Zitat von: silentwolf am Juni 18, 2019, 06:15:40
Jetzt brauche ich nur eine vernüftige Art damit ich bei Eintragung von Obj_Von und Obj_Bis wenn eine Strecke hinterlegt ist diese automatisch im Feld KM einträgt.
Eigentlich nicht. Wenn die Entfernung sowieso immer nur aus der Tabelle gelesen werden, würde es ausreichen, ein Fremdschlüssel-Feld mit Referenz auf eine StreckeId zu speichern.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

silentwolf

Hallo Phil,
Danke für Deinen Tipp aber irgendwie komme ich nicht weiter.

Im Anhang ist einmal wie ich nun die Tabellen verbunden habe und wie die Fahrten erfasst wurden mit den KM.
Momentan habe ich es nur in Excel mit einen SVerweis geschafft die KM aus zwei Objekten zu fischen.


MzKlMu

Hallo,
und wo ist jetzt die Tabelle in der die verschiedenen Strecken hinterlegt sind ?
Die wäre unabhängig von der Tabelle "tblFahrten" anzulegen.
Das Feld für die gefahrenen Km ist überflüssig, die gefahrenen Km werden nicht gespeichert, sondern nur angezeigt.
Gruß Klaus

silentwolf

Guten Morgen Klaus,
da ich ja die Fahrten mit KM schon mit Exel und Macro hatte ist diese im Moment die tblFahrten.
Kann ja eine neue unabhängige Tabelle erstellen aber wo sollen die KM dann hinterlegt werden?
Also in Excel hab ich es mit SVerweis geschafft aber da müssen ja auch die KM hinterlegt werden.
Könnte mir denn jemand ein kleines Beispieil in Access zeigen wie das gemacht werden könnte?
Wäre sehr dankbar.. )


martin1991

Hallo zusammen,

ich denke Silentwolf hat das schon richtig so gemacht.

Ist meine Annahme korrekt:

Ladeort Abladeort km
1           2             15
2           3              20
1           3              45

also das von jedem Ladeort zu jedem Abladeort gefahren wird, wenn das so ist finde ich deine Tabelle komplett korrekt.

Jetzt musst du nur noch eine Abfrage basteln die nach den beiden ID sucht und die km zurückgibt.

SELECT Fahrt_von, Fahrt_nach, Fahrt_KM FROM Fahrt WHERE Fahrt_von = 148 and Fahrt_nach = 57

Diese Auswertung würde dir die Oberste Zeile deines Anhangs liefern.

MzKlMu

Hallo,
es gäbe mal grundsätzlich 2 Möglichkeiten.

1.
Du lässt die Tabelle "tblFahrten" so wie sie jetzt ist.
Bei einer neuen Fahr wird nachgesehen (per DLookup) ob es diese Fahrt schon mal gibt. Wenn ja, wird die Entfernung ermittelt und in das Feld "Fahr_KM_gefahren" eingetragen. Wenn nichts gefunden wird, wird 0 eingetragen und muss dann manuell nachgetragen werden.
Die Tabelle lernt sozusagen selbst. Je mehr Fahrten eingetragen je mehr wird auch gefunden. Dann braucht es die extra Tabelle nicht.

2.
Extra Tabelle anlegen für die Strecken in der die Objekte mit den Strecken im Voraus erfasst werden.
Dann werden die gefahrenen KM wie gehabt mit DLookup ermmittelt und angezeigt. In diesem Falle braucht es das Feld "Fahr_KM_gefahren" nicht und kann gelöscht werden.

Für beide Versionen noch folgende Fragen:
- Gibt es auch Rückfahrten ?
- Wenn ja, mit der gleichen Strecke ?

Bitte äußere Dich mal zu den beiden Fragen und welche Version Du bevorzugen würdest.
Ich mach Dir dann ein kleines Beispiel.
Gruß Klaus