2015-05-19 3 views
0

У меня есть пять остановокLoop Records Access

-------- A ------------- B ------------ C ------------ D ------------ E

У меня есть три столбца в оригинальной таблице [Trip], я хочу закодировать базу направлений на логика

Если мой автомобиль идет от А до Е, или каких-либо остановок для этого направления (BD, CE), направление юг

Если мой автомобиль идет от Й до А, или каких-либо остановки для этого направления (EC, DA), направление северное

Trip CarID Stops 
1  1000  A  
1  1000  B  
1  1000  C  
2  1001  C  
2  1001  D  
2  1001  E  
3  1002  D  
3  1002  C  
3  1002  B  

Я хочу Результат ниже:

Trip CarID Stops Direction 
1  1000  A  South 
1  1000  B  South 
1  1000  C  South 
2  1001  C  South 
2  1001  D  South 
2  1001  E  South 
3  1002  D  North 
3  1002  C  North 
3  1002  B  North 

Любой знает, как закодировать это в VBA доступа или запрос? Реальная таблица имеет более 5 остановок.

+0

Есть ли столбец в исходной таблице поездки, чтобы сказать вам определенный порядок этих поездок? – Tim3880

ответ

1

Я предполагаю, что это даст некоторые идеи

Private Sub Command0_Click() 
On Error Resume Next 
Dim rst As DAO.Recordset 
Dim PreviousStop As String 
Dim Direction As String 
Dim PreviousDirection As String 
Dim rstCounter As Integer 
Dim currentCar As String 
Set rst = CurrentDb.OpenRecordset("Trip") 
With rst 
    rstCounter = rst.RecordCount 
    .MoveFirst 
    Do Until .EOF 
     If rstCounter = 1 Then 
      Direction = calculatedDirection(PreviousStop, .Fields("Stops")) 
      .Edit 
      .Fields("Direction") = Direction 
      .Update 
      Exit Do 
     Else 
      PreviousStop = .Fields("Stops") 
      currentCar = .Fields("CarID") 
      .MoveNext 
      If currentCar <> .Fields("CarID") Then 
       PreviousDirection = "" 
      Else 
       If Len(PreviousDirection) > 0 Then 
        Direction = PreviousDirection 
       Else 
        Direction = calculatedDirection(PreviousStop,  .Fields("Stops")) 
        PreviousDirection = Direction 
       End If 
      End If 
      .MovePrevious 
      If Len(Direction) > 0 Then 
       .Edit 
       .Fields("Direction") = Direction 
       .Update 
      End If 
      .MoveNext 
     End If 
     rstCounter = rstCounter - 1 
     Loop 
    End With 
End Sub 

Private Function calculatedDirection(PreviousStop As String, CurrentStop As String) As String 
If PreviousStop > CurrentStop Then 
      calculatedDirection = "North" 
     Else 
      calculatedDirection = "South" 
     End If 
End Function 
+0

Эй, Джон, ваш код отличный! Он работает хорошо, но единственным недостатком является то, что стопы в реальной таблице являются случайными буквами, которые определяются человеком, поэтому условие (PreviousStop> CurrentStop) неприменимо. – Sailormoon

+0

Например: George Bush - Occur - CSH - LIVERPOOL - KINGGARD, все они случайные имена, а маршруты определяются людьми. Есть ли что-нибудь, о чем вы можете думать, если я знаю имена и правила маршрута (я знаю последовательность по именам)? Спасибо John – Sailormoon

+0

Вы можете использовать таблицу, в которой вы могли бы хранить все свои остановки, и, кроме того, добавить «вес», такой как Bush -> вес 10, CSH -> вес 15 ... и т. Д. Я испытываю впечатление, что на примере, который вы указали, что вы можете использовать Локатор и Долгота, чтобы рассчитать ваши остановки .... – John