Sql 使用VBA在记录集中循环
我试图通过以下方式以循环方式将销售人员(RSSalesoper)分配给客户(rsCustomers):Sql 使用VBA在记录集中循环,sql,ms-access,vba,loops,recordset,Sql,Ms Access,Vba,Loops,Recordset,我试图通过以下方式以循环方式将销售人员(RSSalesoper)分配给客户(rsCustomers): 导航到第一个客户,将第一个销售人员分配给该客户 转到下一个客户。如果销售人员不在EOF,则转到下一个销售人员;如果RSSalesons处于EOF,则移动first以返回到第一个销售人员。将此(当前)销售人员分配给(当前)客户 重复步骤2,直到rsCustomers处于EOF(EOF=True,即记录集结束) 我已经有一段时间没有处理VBA了,所以我有点生疏,但到目前为止,我已经想到了以下几点:
Private Sub Command31_Click()
'On Error GoTo ErrHandler
Dim intCustomer As Integer
Dim intSalesperson As Integer
Dim rsCustomers As DAO.Recordset
Dim rsSalespeople As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT CustomerID, SalespersonID FROM Customers WHERE SalespersonID Is Null"
Set rsCustomers = CurrentDb.OpenRecordset(strSQL)
strSQL = "SELECT SalespersonID FROM Salespeople"
Set rsSalespeople = CurrentDb.OpenRecordset(strSQL)
rsCustomers.MoveFirst
rsSalespeople.MoveFirst
Do While Not rsCustomers.EOF
intCustomer = rsCustomers!CustomerID
intSalesperson = rsSalespeople!SalespersonID
strSQL = "UPDATE Customers SET SalespersonID = " & intSalesperson & " WHERE CustomerID = " & intCustomer
DoCmd.RunSQL (strSQL)
rsCustomers.MoveNext
If Not rsSalespeople.EOF Then
rsSalespeople.MoveNext
Else
rsSalespeople.MoveFirst
End If
Loop
ExitHandler:
Set rsCustomers = Nothing
Set rsSalespeople = Nothing
Exit Sub
ErrHandler:
MsgBox (Err.Description)
Resume ExitHandler
End Sub
我的表格定义如下:
Customers
--CustomerID
--Name
--SalespersonID
Salespeople
--SalespersonID
--Name
有10名客户和5名销售人员,我的预期结果如下:
CustomerID--Name--SalespersonID
1---A---1
2---B---2
3---C---3
4---D---4
5---E---5
6---F---1
7---G---2
8---H---3
9---I---4
10---J---5
上述代码适用于Salesopers记录集的初始循环,但在找到记录集的结尾时出错。不管EOF如何,它似乎仍然尝试执行rssaleopers.MoveFirst命令
我没有正确检查RSSalesopers.EOF吗?有没有办法让这段代码正常工作?rsSalespeople.EOF不表示您何时在最后一行,它表示您何时超过最后一行 因此,当您的条件命中最后一个销售人员EOF为false时,它会执行movenext(使EOF为true),然后循环的下一次传递将在RSSalesopers的“EOF行”上运行,您无法从中提取值,因此会出现错误 请尝试以下方法:
rsSalespeople.MoveNext
If (rsSalespeople.EOF) Then
rsSalespeople.MoveFirst
End If
不是你的问题的答案,但是为什么在你的循环中运行一个更新语句,如果你已经有一个开放的DAO记录集,而不是仅仅用RSUSER更新当前行!salersonid=rsSalespeople!销售人员分配取决于您添加新客户并必须运行此批处理的次数,列表中的前几个销售人员分配的客户数量不成比例。也许你可以按现有客户的数量对销售人员名单进行排序?哦。。。客户和销售人员不是我在应用程序中使用的实际实体;我只是用它们作为例子,显然在转换我的实际代码时忽略了这一点!无论如何,谢谢你抓住了它。我会编辑我的作品。编辑我的答案,为您的核心问题添加解决方案。