2014-11-22 87 views
0

因此,以下選擇要使用的隨機組。一旦被選中,我將這個團隊標記爲Used字段中的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

您是否在RandomTeams表中有重複項?如果您在同一個表中將'Used'設置爲''X',那麼此查詢將不會返回這些值。 – 2014-11-22 14:07:50

+0

您的程序是單個線程/進程還是可以有多個此類查詢並行運行? – Mureinik 2014-11-22 14:08:34

+0

@GordonLinoff沒有重複的團隊,檢查了幾次,都是唯一的 – Muhnamana 2014-11-22 14:18:41

回答

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 
+0

我有一個查詢來計算X的數量。如果等於團隊總數,在這種情況下,總的團隊數爲30,運行更新查詢以用空值填充該字段。 – Muhnamana 2014-11-22 18:48:21

+0

好吧,我試過了,它在整個表中循環,並標記每個團隊與X一起使用。 – Muhnamana 2014-11-22 19:10:25

+0

由於我的代碼通過選擇一個隨機團隊,然後標記爲USED,必須有一些其他代碼或界面是阻止你的工作。單用戶? '使用'定義爲'文字'的類型?如果你的代碼是一個表單,你可以在表單打開時計算這些團隊,然後在每次選擇或設置'Used'之後,再次計算記錄,如果有差異,停止代碼,以便檢查兩個選擇之間發生了什麼。 「重複的團隊」是否確實存在於表格中,還是剛剛從查詢中返回? – 2014-11-22 19:18:28