Multiple-Choice Quiz: оценки не суммируются правильно - PullRequest
0 голосов
/ 05 января 2020

Когда мой тест закончен, я вернулся, чтобы проверить его, и обнаружил, что результаты не будут правильно складываться. Я просмотрел код несколько раз, и он кажется нормальным, но я не могу понять, почему он не добавляет правильные результаты. Я создал подпрограмму, которая проверяет правильный ответ и отмечает его, который затем вызывается при нажатии кнопки.

Dim NoQ = ArQOP.NoQ
   Dim n As Integer = 1
   Dim rand As New Random
   Dim dr As OleDbDataReader
   Dim CorrectAnswer As String
   Public Score As Integer = 0
   Dim SelectedAnswer As String
   Dim username = Entry.user
   Dim Percentage As Integer
   Dim Grade As String
   Dim sqlString As String

Private Sub AnsCheck()

       Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login.accdb"),
               cmd As New OleDbCommand("SELECT CorrectAns FROM MCQ WHERE QuestionNumber = '" & n & "'", cn)
           cn.Open()
           CorrectAnswer = cmd.ExecuteScalar
       End Using

       If RadioButton1.Checked Then
           SelectedAnswer = RadioButton1.Text
       End If

       If RadioButton2.Checked Then
           SelectedAnswer = RadioButton2.Text
       End If

       If RadioButton3.Checked Then
           SelectedAnswer = RadioButton3.Text
       End If

       If RadioButton4.Checked Then
           SelectedAnswer = RadioButton4.Text
       End If

       If CorrectAnswer = SelectedAnswer Then
           Score += 1
       Else
           Score = Score
       End If

   End Sub


Private Sub NxtQues_Click(sender As Object, e As EventArgs) Handles NxtQues.Click
       n += 1
       If n <= NoQ Then
           Questions()
           Answers()
           AnsCheck()
       Else
           SkipQues.Hide()
           NxtQues.Hide()
           EndQuiz.Show()
           StatsCalc()
       End If
   End Sub 

1 Ответ

0 голосов
/ 05 января 2020

Возможно, у вас есть несоответствие типов в SELECT CorrectAns FROM MCQ WHERE QuestionNumber = '" & n & "'" Вы объявили n как целое число, но пытаетесь объединить его в строку. Используйте параметры, и вы избежите этих проблем. Если вы проверите свою базу данных, чтобы получить OleDbType, вы сразу увидите, какой тип переменной назначить для .Value.

cmd.ExecuteScalar, возвращающий объект, поэтому его необходимо заменить на строку.

У меня есть маленькая функция, чтобы получить выбранный переключатель. В этом случае вы передаете Me, который является формой. Часто контейнерным элементом управления может быть GroupBox, и вы передаете GroupBox.

На самом деле я не вижу проблемы с кодом, увеличивающим счет.

Private Sub AnsCheck()

    Using cn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=login.accdb"),
           cmd As New OleDbCommand("SELECT CorrectAns FROM MCQ WHERE QuestionNumber = @n;", cn)
        cmd.Parameters.Add("@n", OleDbType.Numeric).Value = n
        cn.Open()
        CorrectAnswer = CStr(cmd.ExecuteScalar)
    End Using

    SelectedAnswer = GetSelectedRadioButton(Me).Text

    If CorrectAnswer = SelectedAnswer Then
        Score += 1
    End If

End Sub

Private Function GetSelectedRadioButton(ctrl As ContainerControl) As RadioButton
    Dim rButton As RadioButton = ctrl.Controls.OfType(Of RadioButton).FirstOrDefault(Function(r) r.Checked = True)
    Return rButton
End Function

Пожалуйста, включите Option Strict , Это процесс, состоящий из двух частей. Сначала для текущего проекта - в Solution Explorer дважды щелкните My Project. Выберите Compile слева. В раскрывающемся списке Option Strict выберите ON. Второй для будущих проектов - Go в Меню инструментов -> Параметры -> Проекты и решения -> VB по умолчанию. В раскрывающемся списке Option Strict выберите ON. Это избавит вас от ошибок во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...