从 vb.net 中的访问中计算特定记录

Posted

技术标签:

【中文标题】从 vb.net 中的访问中计算特定记录【英文标题】:count the specific record from access in vb.net 【发布时间】:2018-12-19 15:52:49 【问题描述】:

所以我正在制作一个投票程序,但我现在卡住了。 我已经搜索了解决方案,并且我已经精确地遵循了它们,但仍然没有结果。

基本上,我想从 Visual Basic 访问中计算每个特定记录的总出现次数。

例如,我有 1 号候选人由 3 人投票,而候选人 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

我不知道这里有什么问题,这应该很简单。

如果有人能提供帮助,我将不胜感激。

提前致谢

【问题讨论】:

ExecuteScalar 返回第一行第一列的值。您的第一列是 CandidateNumber,第一行是表中输入的第一行。显然不是你想要的。这就是它不起作用的原因。 【参考方案1】:

首先,如果您有多个候选人,您正在运行的初始查询将返回多个记录。 ExecuteScaler 只返回第一行的第一列。

问题是,您想要所有记录还是只想要一个人的记录?如果你只想要一个人的记录,你需要在你的 sql 语句中添加一个 WHERE 子句来指定那个候选人。

如果你想要所有的记录,它看起来像这样:

    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 以适合您的表设置,也许还有一些演员表。

【讨论】:

非常感谢您的询问,但为了回答您的问题,我想显示所选候选人的总票数,因此只有一条记录(每位候选人)..而且我想在文本框中显示它所以我将 novtextbox.text = totalVotes 添加到您的代码中,但结果为 0 ..这是图片的链接:link @AliefAchmad 您的 CandidateNumber 在哪里被选中?只需将包含所选数字的变量替换为 1 作为参数值。 如果数据类型是 .VarChar 那么 .Value 应该是“1”

以上是关于从 vb.net 中的访问中计算特定记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vb.net 从查询创建访问报告

如何从 vb.net 中的子表单访问父表单属性

ASP.NET 登录以授予对特定类型人群的访问权限

vb.net 中 MS 访问数据库中的行数

使用 vb.net 2010 锁定后端访问数据库中的表

VB.NET 中的文件夹被拒绝访问