因此,以下选择要使用的随机团队。选择后,我将此团队标记为已使用字段中的X,稍后将使用更新查询。它最有效,但在运行了几次之后,我开始重复团队,即使它们被标记为X.
我还缺少什么来实现这个目标?
这是SQL语句:
SELECT TOP 1 RandomTeams.[Team Name], RandomTeams.Used
FROM RandomTeams
WHERE (((RandomTeams.Used) Is Null))
ORDER BY Rnd(TeamID);
以下是我如何处理更新以将团队标记为正在使用,这正在按预期工作,我在使用X标记时没有任何问题:
Text214.Text包含正在使用的团队名称
strTeam = (Chr(34) + Text214.Text + (Chr(34)))
strSQLUpdateTeams = "UPDATE RandomTeams SET Used = 'X' WHERE [Team Name] = " & strTeam
DoCmd.SetWarnings (WarningsOff)
DoCmd.RunSQL strSQLUpdateTeams
答案 0 :(得分:2)
作为测试,如何将以下代码抛出到模块中,然后执行它,看看会发生什么。顺便说一下,你如何重置[二手]?
Sub Test_Teams()
Dim strSQL As String
Dim strTeam As String
Dim strSQLUpdateTeams As String
Dim dbs As DAO.Database
Dim rs As DAO.recordSet
Set dbs = CurrentDb
If MsgBox("Do you want to reset all 'Used' flags?", vbYesNo, "Reset?") = vbYes Then
strSQL = "update RandomTeams set [Used] = null;"
dbs.Execute strSQL
End If
MyLoop:
strSQL = "SELECT TOP 1 RandomTeams.[Team Name], RandomTeams.Used " & _
"FROM RandomTeams " & _
"WHERE (((RandomTeams.Used) Is Null)) " & _
"ORDER BY Rnd(TeamID);"
Set rs = dbs.OpenRecordset(strSQL)
If Not rs.EOF Then
strTeam = rs![Team Name]
Debug.Print "Found Team: " & strTeam
Else
MsgBox "EOF! No more teams."
rs.Close
Set rs = Nothing
dbs.Close
Set dbs = Nothing
Exit Sub
End If
strTeam = (Chr(34) + rs![Team Name] + (Chr(34)))
rs.Close
Set rs = Nothing
strSQLUpdateTeams = "UPDATE RandomTeams SET [Used] = 'X' WHERE [Team Name] = " & strTeam
Debug.Print strSQLUpdateTeams
'DoCmd.SetWarnings (WarningsOff)
'DoCmd.RunSQL strSQLUpdateTeams
dbs.Execute strSQLUpdateTeams
If dbs.RecordsAffected <> 1 Then
MsgBox "Whoa! Not good! Update failed!"
End If
GoTo MyLoop
End Sub