访问 SQL Randomizer 未按预期工作

Posted

技术标签:

【中文标题】访问 SQL Randomizer 未按预期工作【英文标题】:Access SQL Randomizer Not working as intended 【发布时间】:2015-08-14 19:21:38 【问题描述】:

我正在使用下面提到的代码从 Access 数据库中选择一个在最后一天尚未选择的记录 ID,并将其添加到数组中。

一般目标是只要之前从未选择过该记录或在过去 2 天内未选择过该记录,就会检索符合初始“难度”标准的记录。循环完成后,我应该拥有 x 数量的唯一记录 ID,并将它们添加到数组中以便在其他地方处理。

 Private Function RetrieveQuestionID(questionCount As Integer)

    ' We're using this retrieve the question id's from the database that fit our arrangements.
    Dim intQuestArray(0 To questionCount) As Integer
    Dim QuestionConnection As New OleDb.OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = |DataDirectory|\Database\MillionaireDB.accdb;")

    QuestionConnection.Open()

    For i As Integer = 1 To intNoOfQuestions
        'TODO: If there are no valid questions, pull up any of them that meets the difficulty requirement....

        Dim QuestionConnectionQuery As New OleDb.OleDbCommand("SELECT Questions.QuestionID FROM Questions WHERE (((Questions.QuestionDifficulty)=[?])) AND (((Questions.LastDateRevealed) Is Null)) OR (Questions.LastDateRevealed >= DateAdd('d',-2,Date())) ORDER BY Rnd((Questions.QuestionID) * Time());", QuestionConnection)
        QuestionConnectionQuery.Parameters.AddWithValue("?", intQuestionDifficulty(i - 1).ToString)
        Dim QuestionDataAdapter As New OleDb.OleDbDataAdapter(QuestionConnectionQuery)
        Dim QuestionDataSet As New DataSet

        QuestionDataAdapter.Fill(QuestionDataSet, "Questions")
        intQuestArray(i - 1) = QuestionDataSet.Tables("Questions").Rows(0).Item(0)

        Dim QuestionConnectionUpdateQuery As New OleDb.OleDbCommand("UPDATE Questions SET Questions.LastDateRevealed = NOW() WHERE Questions.QuestionID = [?]", QuestionConnection)
        QuestionConnectionUpdateQuery.Parameters.AddWithValue("?", intQuestArray(i - 1).ToString)
        QuestionConnectionUpdateQuery.ExecuteNonQuery()

    Next

    QuestionConnection.Close()
    Return intQuestArray
End Function

但是,循环遍历数组将显示有记录以某种方式重复,即使记录在循环期间更新。

还有其他方法可以遍历数据库并提取这些记录吗?我什至试图将.Open().Close() 语句移到For...Next 循环中,结果却比以前更糟。

【问题讨论】:

或者在过去 2 天内没有选择记录 仔细看看 >= 【参考方案1】:

正如史蒂夫所写,>= 应该是

此外,您的 WHERE 子句在 OR 部分周围缺少括号。 它应该是(没有所有不必要的括号):

SELECT Questions.QuestionID 
FROM Questions 
WHERE Questions.QuestionDifficulty=[?] 
  AND ( Questions.LastDateRevealed Is Null 
     OR Questions.LastDateRevealed < DateAdd('d',-2,Date()) ) 
  ORDER BY Rnd(Questions.QuestionID * Time());

还可以查看How to get random record from MS Access database - 建议使用负值作为Rnd() 的参数。

【讨论】:

以上是关于访问 SQL Randomizer 未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

Django urls.py。未按预期工作

SQL 查询未按预期给出结果

SQL Server STRING_AGG 函数排序未按预期工作

Sql 语句:在要插入的字段中未指定主键时,插入键更新未按预期工作

SQL Server:具有软删除功能的 Graph-DB 未按预期工作

选择内部功能未按预期工作