Hi to everyone!!
I am having trouble with a database I am making. It's about assigning projects randomly to evaluators. Each project must be evaluated by two people. Each evaluator may be assgined only to one project. Assigning the first evaluator is successful but when it gets to assgin the second evaluator it sometimes skips parts of the code (specifically the one that it considers the 2nd evaluator bound). Why does it do that??
I tried to insert the line tblevaluators.Movefirst before entering the secon Do until..loop about making an evaluator bound.
Please help me...
Code:
Public Sub random_assignment()
Dim dbase As Object
Dim tbltemp_status As Object
Dim tblevaluators As Object
Dim tblproject As Object
Dim rando As Variant
Dim evalregion As String
Dim evalname As String
Dim evalstatus As String
Dim numfak As Integer
Dim apprassign As String
Set dbase = CurrentDb 'Opens database and tables
Set tbltemp_status = dbase.OpenRecordset("Temporary assignments")
Set tblevaluators = dbase.OpenRecordset("Evaluators")
Set tblproject = dbase.OpenRecordset("Projects")
Do Until tbltemp_status.EOF 'Deletes previous assignments
With tbltemp_status
.Delete
.MoveNext
End With
Loop
Do Until tblproject.EOF 'Updates table with projects to be assigned
If tblproject.[Status] = "Ready to be assigned" Then
With tbltemp_status
.AddNew
![Project number] = tblproject.[Project number]
.Update
End With
End If
tblproject.MoveNext
Loop
tbltemp_status.MoveFirst 'Initialize tables
tblproject.MoveFirst
Do Until tbltemp_status.EOF 'Searches table of projects
numfak = tbltemp_status.[Project number]
tblevaluators.MoveFirst
apprassign = 1
Do Until apprassign = "0" 'Function eval is called until its value is 0
rando = Rand(1, DCount("[ID]", "Evaluators", "[Evaluator_Status] = 'Available'"))
evalname = DLookup("[Evaluator name]", "[Evaluators]", "[ID] =" & rando)
evalregion = DLookup("[Evaluator region]", "[Evaluators]", "[ID] =" & rando)
evalstatus = DLookup("[Evaluator_Status]", "[Evaluators]", "[ID] =" & rando)
apprassign = eval(evalregion, evalstatus, numfak)
Loop
With tbltemp_status 'Insert evaluator's name
.Edit
.Fields("Assign to 1st evaluator") = evalname
.Update
End With
Do Until tblevaluators.EOF 'Evaluator is temporarily taken out of the selection group
If tblevaluators.[Evaluator name] = evalname Then
tblevaluators.Edit
tblevaluators![Evaluator_Status] = "Bound"
tblevaluators.Update
Else
tblevaluators.MoveNext
End If
Loop
tblproject.MoveFirst
apprassign = "1"
Do Until apprassign = "0" 'Function eval is called until its value is 0
rando = Rand(1, DCount("[ID]", "Evaluators", "[Evaluator_Status] = 'Available'"))
evalname = DLookup("[Evaluator name]", "[Evaluators]", "[ID] =" & rando)
evalregion = DLookup("[Evaluator region]", "[Evaluators]", "[ID] =" & rando)
evalstatus = DLookup("[Evaluator_Status]", "[Evaluators]", "[ID] =" & rando)
apprassign = eval(evalregion, evalstatus, numfak) ' Καλείται η συνάρτηση που ελέγχει τα κωλύματα του αξιολογητή
Loop
With tbltemp_status
.Edit
.Fields("Assign to 2nd evaluator") = evalname
.Update
End With
Do Until tblevaluators.EOF
If tblevaluators.[Evaluator name] = evalname Then
tblevaluators.Edit
tblevaluators![Evaluator_Status] = "Bound"
tblevaluators.Update
Exit Do
Else
tblevaluators.MoveNext
End If
Loop
tbltemp_status.MoveNext 'Move to next record
Loop
tblevaluators.MoveFirst 'Initialize table
Do Until tblevaluators.EOF 'Restore all evaluators in order to be random selected again on next round of assignments
If tblevaluators.[Evaluator_Status] = "Bound" Then
tblevaluators.Edit
tblevaluators![Evaluator_Status] = "Available"
tblevaluators.Update
End If
tblevaluators.MoveNext
Loop
DoCmd.OpenReport "Assignment", acViewPreview 'Open report with assginments
'Close tables and database
tbltemp_status.Close
tblevaluators.Close
tblproject.Close
Set tblproject = Nothing
Set tbltemp_status = Nothing
Set tblevaluators = Nothing
Set dbase = Nothing
End Sub