2017-12-02 448 views
0

我試圖將某些個人分類爲「Flights」。飛行中不能超過10人,並且我正在循環查看記錄集,根據現有航班中的人數來確定每個人應該乘坐哪個航班。循環直接記錄訪問VBA

所以它應該理想地看看錶,做的人的數量的動態計數飛行1,如果這個數字是< = 10,然後繼續前進,寫記錄,如果不增加航班數量,並再次去,直到所有的運動員都被分配。

記錄集似乎並沒有表明它何時到達EOF並且一直跳回到Move First,並且它無止境地循環遍歷記錄。

Option Compare Database 

Function TrampUpdate() 
Dim DB As Database 
Dim Session1 As DAO.Recordset 
Dim Session1Master As DAO.Recordset 
Dim Flight As Integer 
Dim AthleteID As String 
Dim FlightCount As Integer 
Set DB = CurrentDb() 
Dim SSql As String 





Set Session1 = DB.OpenRecordset("qrySession1Tramp") 

Session1.MoveFirst 
Flight = 1 


Do While Not Session1.EOF 
    AthleteID = Session1.Fields("AthleteID") 
SSql = "Insert Into tblSession1(AthleteID, TrampFlight) Values('" & 
AthleteID & "', " & Flight & ")" 
    DoCmd.SetWarnings False 
    DoCmd.RunSQL (SSql) 
    DoCmd.SetWarnings True 


    FlightCount = DCount("[TrampFlight]", "tblSession1", "[TrampFlight] = " & 
Flight & "") 

    If FlightCount >= 10 Then 
    Flight = Flight + 1 
    End If 
    Session1.MoveNext 

Loop 



Session1.Close 

End Function 

我試過了很多種方法,在這一點上,我被困在爲什麼它不能正常工作。我覺得它很明顯,但我已經看了很久,我再也看不到了。

在循環結束時,所有記錄(大約15個)應該寫入新的表格中,其中10個記錄將在1號航班中,5個記錄在2號航班中。現在它正在複製它們並一次又一次地添加1-10。

感謝您的幫助提前。

+0

你說 「15個左右的」 - 是15,也可以是多還是少?如果或多或少會發生什麼?記錄集將始終返回「15左右」記錄? – June7

+0

它可以更多或更少。如果更多,它應該繼續,直到記錄集的文件結束。實質上,我想將該記錄集中的每個項目分配給一個航班,而不管記錄集有多大。因此,如果記錄集包含20個,那麼我們將有20條記錄,10個航班1,10個航班2,但每個航班號不超過10個。 –

+0

如果有21條記錄,哪個航班取得11?航班1從不超過10個? – June7

回答

0

考慮:

Flight = 1 
While Not rs.EOF 
    If FlightCount = 10 Then 
     Flight = Flight + 1 
     FlightCount = 0 
    End If 
    FlightCount = FlightCount + 1 
    If Not rs.EOF Then 
     CurrentDb.Execute "Insert Into tblSession1(AthleteID, TrampFlight) Values('" & AthleteID & "', " & Flight & ")" 
     rs.MoveNext 
    End If 
Wend 
+0

是。而已。我實際上有點工作,但每次都缺少2條記錄,這很好地解決了這個問題。非常感謝。你搖滾 –