посчитать конкретную запись из доступа в vb.net - PullRequest
0 голосов
/ 19 декабря 2018

Итак, я делаю программу голосования, но я застрял прямо сейчас.Я искал решения, и я точно следовал им, но все еще не дал результата.

По сути, я хочу подсчитать общее вхождение для каждой конкретной записи из доступа в Visual Basic.

Например, у меня есть кандидат № 1, за которого проголосовали три человека, а кандидат-2 за 7 человек, я хочу показать этот результат голосования в текстовом поле, но каким-то образом оно всегда показывает мне неправильный номер

Итак, вот мой код:

Dim TotalVotes As Integer
myCommand = New OleDbCommand("SELECT CandidateNumber, COUNT (*) FROM Student_Voting GROUP BY CandidateNumber", dbconn)
TotalVotes = myCommand.ExecuteScalar
NovTextBox.Text = TotalVotes

myCommand.Dispose()
myReader.Close()

Этот запрос здесь дает результат первого числа кандидатов, а не общее количество голосов для выбранного числа кандидатов:

SELECT CandidateNumber, COUNT (*) FROM Student_Voting GROUP BY CandidateNumber

Я тоже пробовал это, но все еще неправильный результат:

SELECT COUNT(CandidateNumber) AS NoVotes FROM Student_Voting GROUP BY CandidateNumber

Я не знаю, в чем здесь проблема, это должно быть просто, но пока.

Есликто-нибудь может помочь, я буду очень признателен.

Заранее спасибо

1 Ответ

0 голосов
/ 19 декабря 2018

Прежде всего, исходный запрос, который вы выполняете, вернул бы более одной записи, если у вас было более одного кандидата.ExecuteScaler возвращает только первый столбец первой строки.

Вопрос в том, хотите ли вы все записи или просто запись одного человека?Если вам просто нужна запись одного человека, вам нужно добавить предложение WHERE в оператор SQL, чтобы указать этого кандидата.

Если вы хотите, чтобы все записи выглядели примерно так:

    Using myCommand = New OleDbCommand("SELECT CandidateNumber, COUNT (*) AS CountValue FROM Student_Voting GROUP BY CandidateNumber", dbconn)
        Using dr = myCommand.ExecuteReader
            ' Loops over all the canidate counts one by one.
            While dr.Read
                Dim totalVotes As Integer = CInt(dr("CountValue"))
                Dim candidateNumber As String = dr("CandidateNumber")
            End While
        End Using
    End Using

Если вам нужна только одна запись, вы можете использовать ExecuteScaler примерно так:

    Using myCommand = New OleDbCommand("SELECT COUNT (*) AS CountValue FROM Student_Voting WHERE CandidateNumber = @CandidateNumber GROUP BY CandidateNumber", dbconn)
        myCommand.Parameters.Add("@CandidateNumber", OleDbType.VarChar).Value = "1"
        Dim totalVotes = CInt(myCommand.ExecuteScalar)
    End Using

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

...