1.7k Aufrufe
Gefragt in Datenbanken von
Hallo
Ich habe ein "kleines" Problem bei dem ich irgendwie nicht weiterkommen:

Ich habe eine Tabelle mit Punktverläufen z.B.
[list]

Beispiel 1
Bez. - Von Punkt - nach Punkt
WEG1 - LH114-001 - LH114-002
WEG1 - LH114-002 - LH114-003
WEG1 - LH114-003 - LH103-007
WEG1 - LH103-007 - LH103-006
WEG1 - LH103-006 - LH114-030
WEG1 - LH114-030 - LH114-031

Beispiel2
Bez. - Von Punkt - nach Punkt - Abzweig
WEG2 - LH114-001 - LH114-002
WEG2 - LH114-002 - LH114-003
WEG2 - LH114-003 - LH103-007
WEG2a - LH114-003 - LH203-070 - Stich
WEG2a- LH203-070 - LH203-071
WEG2a - LH203-071 - LH203-072
WEG2 - LH103-007 - LH103-006
WEG2 - LH103-006 - LH114-030
WEG2 - LH114-030 - LH114-031
[/list]
Beim Beispiel1 geht es nur um eine reine Verbindung von Punkt A nach Punkt B.
Beim Beispiel2 geht es um eine Verbindung A nach B mit einem Abgang zu Punkt C. Der Abgang wird durch den "Stich" im Abzweig Feld gekennzeichnet.


Hier im Beispiel sind die Werte schon "leicht" sortiert. Leider sind sie in meiner Tabelle nicht geordnet und um sie per Hand zu Sortieren ist mit das bei über 100.000 Einträgen zu viel. Ich suche daher ne möglichkeit sie in Access per Abfrage so zu sortieren das sie sozusagen in Kette angeordnet werden. A-B-C-D-... Die Punkte ab Stich können gerne am Ende von WEG2 stehen. Wobei die Bezeichnung in meiner Tabelle für WEG2 und WEG2a identisch sind.
Ich hoffe ihr könnt mir helfen, da ich in ner Sackgasse stehe.

5 Antworten

0 Punkte
Beantwortet von marie Experte (2k Punkte)
ich geh mal davon aus dass niemand hier verstanden hat was Du meinst, zumindest ich nicht :-(

Gruß marie
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo BlackDaishi,

ich habe mal deine Liste (Tabelle Punkteverlauf) etwas "unsortiert":[list]
Bez vonPunkt nachPunkt
WEG1 LH114-001 LH114-002
WEG1 LH114-002 LH114-003
WEG1 LH114-003 LH114-007
WEG1 LH114-007 LH114-006
WEG2 LH114-003 LH114-007
WEG2 LH114-007 LH114-006
WEG2 LH114-006 LH114-030
WEG2 LH114-030 LH114-031
WEG1 LH114-006 LH114-030
WEG1 LH114-030 LH114-031
WEG2 LH114-002 LH114-003
WEG2 LH114-001 LH114-002[/list] und darauf die Prozedure "sortPunktverlauf" angewandt. Sie schreibt die Tabelle sortiert in die neue Tabelle "punktverlauf_sort" (gleiche Struktur)
Dein "stich"-Problem läßt sich da integrieren, probiere es selbst mal aus. Die Wege sollten "wohlgeformt" sein, also keine Wege die zusammenführen, sonst kommt mehr heraus, als man rein steckt!

Public Sub sortPunktverlauf()

Dim reca As New ADODB.Recordset
Dim rec1 As New ADODB.Recordset
Dim rec2 As New ADODB.Recordset
Dim bez As String
Dim p1 As String

DoCmd.RunSQL "DELETE * FROM punktverlauf_sort"

reca.Open "SELECT * FROM Punktverlauf WHERE vonPunkt Not In (SELECT nachpunkt from Punktverlauf)", CurrentProject.Connection, adOpenStatic, adLockReadOnly
rec1.Open "SELECT * FROM Punktverlauf", CurrentProject.Connection, adOpenDynamic, adLockReadOnly
rec2.Open "SELECT * FROM Punktverlauf_sort", CurrentProject.Connection, adOpenDynamic, adLockOptimistic

If Not reca.EOF Then

While Not reca.EOF
p1 = reca!nachPunkt
bez = reca!bez
rec2.AddNew
rec2!bez = bez
rec2!vonpunkt = reca!vonpunkt
rec2!nachPunkt = reca!nachPunkt
rec2.Update
While p1 <> ""
rec1.Filter = "vonPunkt = '" & p1 & "' and bez = '" & bez & "'"
If rec1.EOF Then
p1 = ""
Else

rec2.AddNew
rec2!bez = bez
rec2!vonpunkt = rec1!vonpunkt
rec2!nachPunkt = rec1!nachPunkt
rec2.Update

p1 = rec1!nachPunkt
End If

Wend
reca.MoveNext
Wend
End If
reca.Close
rec1.Close
rec2.Close

End Sub
Mein Ergebnis sieht so aus:
[list]Bez vonPunkt nachPunkt
WEG1 LH114-001 LH114-002
WEG1 LH114-002 LH114-003
WEG1 LH114-003 LH114-007
WEG1 LH114-007 LH114-006
WEG1 LH114-006 LH114-030
WEG1 LH114-030 LH114-031
WEG2 LH114-001 LH114-002
WEG2 LH114-002 LH114-003
WEG2 LH114-003 LH114-007
WEG2 LH114-007 LH114-006
WEG2 LH114-006 LH114-030
WEG2 LH114-030 LH114-031[/list]
Gruß
Ralf
0 Punkte
Beantwortet von
Hallo RaHi,

Vielen Dank für deine Lösung.

Was meinst du mit die Wege sollten wohlgeformt sein?
Das einzige Problem würde ich in den Stich wegen sehen, da sich der Weg ja in 2 Richtungen trennt. Meinst du das damit??

Gruß
Dirk
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Dirk,

ich habe mal zwei Beispiele kontruiert.

Beispiel 1 der Trivialfall:
[list]Bez vonPunkt nachPunkt
WEG1 LH114-001 LH114-001/list]
--> liefert zur Zeit kein Ergebnis, da reca leer ist

Beispiel 2 zwei unterschiedliche Anfänge, ein Ende:
[list]Bez vonPunkt nachPunkt
WEG1 LH114-999 LH114-002
WEG1 LH114-001 LH114-002
WEG1 LH114-002 LH114-003
WEG1 LH114-003 LH114-007
WEG1 LH114-007 LH114-006[/list]
liefert über 001 und über 999 den Weg nach 006[list]
Bez vonPunkt nachPunkt
WEG1 LH114-001 LH114-002
WEG1 LH114-002 LH114-003
WEG1 LH114-003 LH114-007
WEG1 LH114-007 LH114-006
WEG1 LH114-999 LH114-002
WEG1 LH114-002 LH114-003
WEG1 LH114-003 LH114-007
WEG1 LH114-007 LH114-006[/list]
Weiterhin gehe ich davon aus , dass die Bezichnung "WEG1" einen zusammenhängenden Weg darstellen soll oder kann es auch zwei Teilwege dazu geben? Eine Mischung der Wege habe ich ausgeschlossen. Da gehe ich davon aus, dass dies auch so gemeint war.

Gruß
Ralf
0 Punkte
Beantwortet von
Ja so habe ich das gemeint.

Dein Ansattz hat mir sehr weitergeholfen. Funktioniert auch nach kleinen Startschwierigkeiten super.

Vielen Dank für die kompetente Hilfe.
...