选择随机记录并将记录标记为已使用

时间:2014-11-22 14:06:21

标签: sql random access-vba ms-access-2007

因此,以下选择要使用的随机团队。选择后,我将此团队标记为已使用字段中的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

1 个答案:

答案 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