sql - fields - recordset vb6
Looping a través de recordset con VBA (1)
rsSalespeople.EOF no indica cuando estás en la última fila, sino que indica cuándo estás PASADO en la última fila.
Así que cuando tus hits condicionales el último vendedor EOF es falso, entonces hace un movenext (haciendo que EOF sea verdadero), entonces el siguiente pase a través del bucle está operando en la "fila EOF" de rsSalespeople de la que no puedes extraer valores, de ahí el error .
Pruebe esto en su lugar:
rsSalespeople.MoveNext
If (rsSalespeople.EOF) Then
rsSalespeople.MoveFirst
End If
Intento asignar vendedores (rsSalespeople) a los clientes (rsCustomers) en forma de turno rotativo de la siguiente manera:
- Navegue al primer cliente, asigne el primer SalesPerson al cliente.
- Mover a Siguiente Cliente. Si rsSalesPersons no está en EOF, pase a Next SalesPerson; si rsSalesPersons está en EOF, MoveFirst regresa al primer SalesPerson. Asigne este (actual) SalesPerson al Cliente (actual).
- Repita el paso 2 hasta que rsCustomers esté en EOF (EOF = True, es decir, End-Of-Recordset).
Ha pasado un tiempo desde que lidié con VBA, así que estoy un poco oxidado, pero esto es lo que se me ocurrió, hasta ahora:
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
Mis tablas se definen así:
Customers
--CustomerID
--Name
--SalespersonID
Salespeople
--SalespersonID
--Name
Con diez clientes y 5 vendedores, mi resultado previsto sería como:
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
El código anterior funciona para el ciclo inicial a través del conjunto de registros Salespeople, pero se produce un error cuando se encuentra el final del conjunto de registros. Independientemente del EOF, parece que todavía intenta ejecutar el comando rsSalespeople.MoveFirst.
¿No estoy revisando correctamente el rsSalespeople.EOF? ¿Alguna idea para hacer que este código funcione?