[Access] Fremdschlüssel in Text umwandeln bei einer Abfrage mit Funktion

NoemSis

Lt. Commander
Registriert
Jan. 2011
Beiträge
1.541
Hallo,
ich erstelle momentan eine kleine Datenbank, die u.a. als Fahrtenbuch dienen soll.

Momentan habe ich folgendes Problem:
Ich habe eine tbl_Fahrtenbuch, die das Ziel und den Kilometerstand beim Start enthält.

Nun möchte ich über eine Abfrage automatisch den Startpunkt (ist gleich letzte Ziel) und den Kilometerstand beim Ende (gleich der Stand beim nächsten Start)anzeigen lassen. Diese beziehen sich immer auf den letzten Wert. Beispiel:

1 Kilometerstand Start: 5000
2 Kilometerstand Ende (automatisch, Wert des nächsten Starts) (6000)
3 Kilometerstand Start: 6000

Das ganze habe ich schon über eine Funktion hinbekommen:
Kilometerstand Ende: DomWert("[Kilometerstand Start]";"tbl_Fahrtenbuch";"[F_Nr] = " & [F_Nr]+1)

Die gleiche Funktion habe ich auch bei Start und Ziel verwendet. Dies klappt auch, allderdings zeigt mir Access immer nur den Fremdschlüssel der Adresse auf der tbl_Adressen an. Ich möchte allerdings natürlich den Text, z. B. Hamburg angezeigt bekommen.

Bei der Zieladresse klappt es schon, da habe ich einfach die Adresse aus der tbl_Adressen in die Abfrage gezogen.

Problem könnte jetzt sein, dass die Funktion falsch ist, oder ein Konflikt besteht, da beide, Start und Ziel sich auf die tbl_Adressen beziehen.

Könnt ihr mir vielleicht weiterhelfen?
Vielen Dank!
 
Zuletzt bearbeitet:
Ein ER-Diagramm und einige Beispieldatensätze wären durchaus hilfreich! Ersteres kannst Du durch Auswahl des Access Ribbons "Datenbanktools" und anschließendem Klick auf die Schaltfläche "Beziehungen" recht einfach erzeugen.
 
er.PNG

tbl_Fahrtenbuch.PNG

tbl_Adressen.PNG
 
Hallo Noemsis,

wenn ich die Frage(n) richtig interpretiere möchtest Du folgendes in der Abfrage sehen:
- Startort mit km bei Start
- Zielort mit km am Ziel

Mit dem Datenmodell ist das nicht so leicht erreichbar, denn für die vollständige Auskunft dieser Art braucht man 3 Datensätze:
- den Vorgängersatz für die Startortinfo
- den aktuellen Datensatz für Zielortinfo + Start-km
- den nachfolgenden Datensatz für den Ziel-km Stand

Hier mal ein SQL aus dem Bauch geschossen, nicht getestet, in Oracle Schreibweise. Wenn Du das (+) (Plus in der Klammer) weg lässt, sollte es auch in Access gehn.

SQL:
Code:
select AStart.Kurzname as Startkurzname
	, AStart.Straße as Startstraße
	, FZiel."Kilometerstand Start" as kmStart
	, AZiel.Kurzname as Zielkurzname
	, AZiel.Straße as Zielstraße
	, FZielerr."Kilometerstand Start" as kmZiel
from tbl_Fahrtenbuch FStart
	, tbl_Fahrtenbuch FZiel
	, tbl_Fahrtenbuch FZielerr
	, tbl_Adressen AStart
	, tbl_Adressen AZiel
where FStart.F_Nr = FZiel.F_Nr - 1
	and FZielerr.F_Nr(+) = FZiel.F_Nr + 1
	and FStart.Zieladresse = AStart.A_Nr
	and FZiel.Zieladresse = AZiel.A_Nr

Die FZielerr Aliastabelle müsste outergejoint in die Abfrage rein, dann werden auch die Fahrten angezeigt, bei denen der Mitarbeiter noch nicht am Ziel ist, sprich noch kein Folgedatensatz für die nächste Fahrt vom Ziel weg existiert.
Die weiteren Informationen wie z.B. Projekt können an die FZiel Aliastabelle verknüpft und in das Abfrageergebnis mit aufgenommen werden.

Die DomWert-Funktion hat gerade bei größeren Tabellen den Nachteil, dass Abfrgen darauf basierend sehr langsam werden. Denn für jeden Datensatz wird diese DomWert Abfrage ausgeführt. Das ist bei verknüpften Tabellen nicht der Fall.

Gruß
 
Zurück
Oben