Я использую указанный ниже код для выбора идентификатора записи из базы данных доступа, которая еще не была выбрана в последний день и добавлена в массив.Access SQL Randomizer Не работает по назначению
Общая цель заключается в том, что запись, соответствующая исходным критериям «Трудности», будет получена, если либо запись никогда не была выбрана до того, как запись не была выбрана за последние 2 дня. По завершении цикла я должен иметь количество уникальных идентификаторов записи и добавить их в массив для обработки в другом месте.
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
, и мне дали худшие результаты, чем раньше.
_OR запись не была выбрана за последние 2 дня_ критически смотришь на это **> = ** – Steve