2017-12-02 326 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条记录,这很好地解决了这个问题。非常感谢。你摇滚 –