Очень новое для VB, так что извиняйтесь, если я не очень понимаю. У меня есть база данных вопросов о пустяках с тремя полями: вопрос, ответ и время. Я хочу, чтобы у вас была возможность нажать кнопку и получить случай из базы данных случайным образом из числа записей с наименьшим запрошенным значением Times Asked, а затем добавить одно к значению Times Asked. Может ли кто-нибудь помочь мне? Вот что у меня до сих пор:Выберите случайную запись в базе данных с самым низким значением
Private DBCon As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; "Data Source=Trivia.accdb;")
Public Sub GenerateQuestion()
DBCon.Open()
'grab how many questions there are total
Dim QuestionsQuery As String = "SELECT COUNT(*) FROM Questions"
Dim QuestionsCmd As New OleDbCommand(QuestionsQuery, DBCon)
Dim NumOfQuestions As Integer = QuestionsCmd.ExecuteScalar()
'grab the lowest number from Times Asked
Dim SeenQuery As String = "SELECT MIN(`Times`) FROM Questions"
Dim SeenCmd As New OleDbCommand(SeenQuery, DBCon)
Dim SeenReader As OleDb.OleDbDataReader = SeenCmd.ExecuteReader
SeenReader.Close()
End Sub
Эта подпрограмма вызывается с помощью кнопки на другую форму, и когда я нажимаю кнопку, я получаю исключение для каких-либо существующих в строке/столбце данных. Даже если мне удастся получить эту ценность, хотя я понятия не имею, что следующий шаг заключается в том, чтобы на самом деле схватить случайный вопрос из числа минимальных значений Times и добавить значение One в значение Times для этого вопроса.
Для справки Вот таблица я работаю с ата: http://i.imgur.com/2vwlVQR.jpg
EDIT: Для тех, кто находя это в будущем здесь код, который исправил проблему:
Imports System.Data.OleDb
Dim rng As New Random
Dim connection As OleDb.OleDbConnection
Private Function GetQuestionWithAnswer() As Tuple(Of String, String)
'Use XML literals for the SQL statements.
Dim selectSql = <sql>
SELECT *
FROM Questions
WHERE Times =
(
SELECT MIN(Times)
FROM Questions
)
</sql>
Dim updateSql = <sql>
UPDATE Questions
SET Times = @Times
WHERE ID = @ID
</sql>
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Trivia.accdb;")
Dim adapter As New OleDbDataAdapter(selectSql.Value, connection)
Dim updateCommand = New OleDbCommand(updateSql.Value, connection)
With updateCommand.Parameters
.Add("@Times", OleDbType.Integer, 0, "Times")
.Add("@ID", OleDbType.Integer, 0, "ID")
End With
adapter.UpdateCommand = updateCommand
Dim table As New DataTable
'Getall the questions that have been asked the fewest number of times.
adapter.Fill(table)
'Select a question at random.
Dim record = table.Rows(rng.Next(table.Rows.Count))
'Increment the number of times the question has been asked and save the change.
record("Times") = CInt(record("Times")) + 1
adapter.Update(table)
'Package up the selected question.
LblQuestion.Text = record(1)
Return Tuple.Create(CStr(record("Question")), CStr(record("Answer")))
End Using
End Function