Возможно, у вас есть несоответствие типов в 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. Это избавит вас от ошибок во время выполнения.