Я пытаюсь назначить продавцов (rsSalespeople) клиентам (rsCustomers) следующим образом:
- Перейдите к первому клиенту, назначьте первого SalesPerson клиенту.
- Перейти к следующему клиенту. Если rsSalesPersons не находится в EOF, перейдите к Next SalesPerson; если rsSalesPersons находится в EOF, MoveFirst, чтобы вернуться к первому SalesPerson. Назначьте этого (текущего) SalesPerson (текущему) клиенту.
- Повторяйте шаг 2 до тех пор, пока rsCustomers не достигнет значения EOF (EOF = True, т. Е. End-Of-Recordset).
Прошло некоторое время с тех пор, как я имел дело с 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
Имея десять клиентов и 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
Приведенный выше код работает для начального цикла через набор записей Salespeople, но выдает ошибки при обнаружении конца набора записей. Независимо от EOF кажется, что он все еще пытается выполнить команду rsSalespeople.MoveFirst.
Правильно ли я проверяю rsSalespeople.EOF? Есть идеи, как заставить этот код работать?