Как выбрать случайную запись из MS Access после подключения к проекту VS2017? - PullRequest
1 голос
/ 13 апреля 2019

Мне было интересно, есть ли способ выбрать случайную запись после использования инструмента «Подключение к базе данных» в Visual Studio 2017. Я пытаюсь выбрать случайную запись в диапазоне от 1 до 21. В базе данных MS Access есть QNumber ( Первичный ключ), Вопрос, Ответ1, Ответ2, Ответ3 и Ответ4. QNumber - это число, тогда как все остальные - это текст.

Я пытался использовать этот код с официального сайта Microsoft.

Dim MyValue As Integer
MyValue = Int((6 * Rnd) + 1)    ' Generate random value between 1 and 6. 

Однако я не был уверен, как применить это к моей ситуации.

После использования инструмента «Подключение к базе данных» я использовал этот код для вставки данных из базы данных MS Access для заполнения текстовых полей:

txtQNumber.DataBindings.Add("Text", QuizDataSet, "Quiz.QNumber")
txtQ.DataBindings.Add("Text", QuizDataSet, "Quiz.Question")
txtAnswer.DataBindings.Add("Text", QuizDataSet, "Quiz.Answer1")
txtAnswer2.DataBindings.Add("Text", QuizDataSet, "Quiz.Answer2")
txtAnswer3.DataBindings.Add("Text", QuizDataSet, "Quiz.Answer3")
txtAnswer4.DataBindings.Add("Text", QuizDataSet, "Quiz.Answer4")

Приведенный ниже код показывает, что я сделал, чтобы остановить тест после того, как на 10 вопросов были даны ответы. Бит с «BindingContext ..» - это то, как вопросы развиваются после нажатия кнопки «Вперед».

Answered = 0

Private Sub cmdForward_Click(sender As Object, e As EventArgs) Handles cmdForward.Click

        BindingContext(QuizDataSet, "Quiz").Position = BindingContext(QuizDataSet, "Quiz").Position + 1

Answered = Answered + 1

If Answered = 10 Then
    End
End If 

Пока что вывод текстовых полей был очень линейным - он начинается с QNumber 1, переходит на QNumber 2 и т. Д. И переходит к QNumber 10. Я хочу, чтобы он был случайным. Например, он начинается с QNumber 15, переходит на QNumber 6, а затем заканчивается на QNumber 19 или что-то в этом роде.

Я бы предположил, что мне придется использовать .Position, показанный заранее, но опять же, я не совсем уверен, поэтому любая помощь будет очень цениться.

1 Ответ

0 голосов
/ 13 апреля 2019

Вы можете изменить свой SQL-запрос, добавив псевдослучайное значение для каждой записи:

Select *, Rnd(-Timer() * [ID]) As RandomNumber 
From YourTable

, где ID - это первичный ключ.Затем выполните сортировку по RandomNumber.

Или вы можете разрешить сортировку запроса:

Select *
From YourTable
Order By Rnd(-Timer() * [ID]);
...