私は選択問題の質問に問題があります。私が次と戻るをクリックすると、データベースとは異なる質問は表示されません。ラジオボタンとラベルは、異なる質問や回答を表示するように変更されません。これは混乱している場合はごめんなさい。データベースからデータを取得する多肢選択式のクイズ - 質問を繰り返す問題
コードが
あなたの元のコードでOKOption Strict On
Imports System.Data.OleDb
Public Class Form1
Dim ConnectString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
" Data Source= C:\Users\Sales\Documents\Visual Studio 2010\Normalised Database.accdb"
Dim dr As OleDbDataReader
Dim cm As New OleDbCommand
Dim cn As New OleDbConnection
Dim provider As String
Dim dataFile As String
Dim no As Integer
' Dim q(no) As String
Dim quesnum As Integer = 1
Dim answer As String
Dim selected As String
Dim score As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
no = CInt(InputBox("Input the number of questions you want. You can choose from 1 to 10."))
QuesNo.Hide()
QuesLabel.Hide()
Label3.Hide()
RadioButton1.Hide()
RadioButton2.Hide()
RadioButton3.Hide()
RadioButton4.Hide()
NextBtn.Hide()
BackBtn.Hide()
BackBtn.Hide()
SaveBtn.Hide()
ReturnBtn.Hide()
For i = 1 To no
question()
mark()
Next
'End
End Sub
Private Sub question()
cn.ConnectionString = ConnectString
cn.Open()
' quesnum = 0
' quesnum = quesnum + 1
QuesNo.Text = "Question " & quesnum & " of " & no
cm.CommandText = "SELECT Question, Answer1, Answer2, Answer3, CorrectAnswer FROM Question"
cm.Connection = cn
dr = cm.ExecuteReader
Dim answerList As New List(Of String)
If dr.HasRows Then
dr.Read()
QuesLabel.Text = CStr(dr.Item("Question"))
answerList.Add(CStr(dr.Item("Answer1")))
answerList.Add(CStr(dr.Item("Answer2")))
answerList.Add(CStr(dr.Item("Answer3")))
answerList.Add(CStr(dr.Item("CorrectAnswer")))
answerList = RandomizeListOrder(answerList)
RadioButton1.Text = answerList(0)
RadioButton2.Text = answerlist(1)
RadioButton3.Text = answerList(2)
RadioButton4.Text = answerlist(3)
dr.Close()
End If
cn.Close()
End Sub
Private Sub mark()
If RadioButton1.Checked = True Then selected = RadioButton1.Text
If RadioButton2.Checked = True Then selected = RadioButton2.Text
If RadioButton3.Checked = True Then selected = RadioButton3.Text
If RadioButton4.Checked = True Then selected = RadioButton4.Text
cn.ConnectionString = ConnectString
cn.Open()
cm.CommandText = "SELECT CorrectAnswer FROM Question"
cm.Connection = cn
dr = cm.ExecuteReader
If dr.HasRows Then
dr.Read()
answer = CStr(dr.Item("CorrectAnswer"))
dr.Close()
End If
cn.Close()
If selected = answer Then
score = score + 1
End If
' question()
Label3.Text = "score is " & score
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NextBtn.Click
For i = 1 To no
question()
mark()
Next
quesnum = quesnum + 1
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartBtn.Click
QuesNo.Show()
QuesLabel.Show()
Label3.Show()
RadioButton1.Show()
RadioButton2.Show()
RadioButton3.Show()
RadioButton4.Show()
NextBtn.Show()
BackBtn.Show()
SaveBtn.Show()
ReturnBtn.Show()
StartBtn.Hide()
End Sub
Private Function RandomizeListOrder(ByVal answers As List(Of String)) As List(Of String)
Dim answer2 As Integer
Dim rnd As New Random
'loop though each item in the list
For answer1 As Integer = 0 To answers.Count - 1
'pick a random answer
answer2 = rnd.Next(0, answers.Count - 1)
'If answer1 and answer2 are the same then skip the rest of the code
'in the loop and go onto the next question
If answer1 = answer2 Then
Continue For
End If
'swap the questions over
Dim temp As String
temp = answers(answer1)
answers(answer1) = answers(answer2)
answers(answer2) = temp
Next
'return the list of answers
Return answers
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BackBtn.Click
End Sub
End Class
次と戻るボタンを使用すると、質問の前後に進むことができます。また、問題サブの周りの2つのループの目的は何ですか?彼らが質問を通してループするのであれば、質問を通過するコードは本当に書き直す必要があります。 –
'次をクリックすると、データベースとは異なる質問は表示されません。 ' - これは問題ではありません。それはタスクです。あなたは自分で時間を費やし、調査し、私たちがあなたを助けるための具体的な技術的な詳細を提供する必要があります。 – Neolisk
また、あなたのSELECTクエリを変更する必要があるかもしれません - 私のプロファイルのアドレスに質問データベースを私にメールすることができますか? –