为什么会出现此错误?提供商无法确定 Double 值

Why do I get this error? The provider could not determine the Double value

为什么会出现此错误: 提供者无法确定 Double 值。例如,该行刚刚创建,Double 列的默认值不可用,并且消费者尚未设置新的 Double 值。

    ElseIf cb_Stat.Text = "Highest Goal/min" Then
        SQL = "SELECT Goals, Mins_Played, ((Mins_Played * 1.0) / Goals) AS gpm FROM PlayerDatabase"
        Dim da As New OleDbDataAdapter(SQL, Connection)
        da.Fill(ds, "PlayerDatabase")
        lbl_Result.Text = ds.Tables("PlayerDatabase").Rows(0).Item(2)
    End If

    Me.lbl_Result.Left = Me.ClientSize.Width \ 2 - Me.lbl_Result.Width \ 2
    Connection.Close()

您的“目标”列包含零值。在这种情况下,正确的错误消息应该是 Division by Zero,但 Access 返回的错误消息不是很有用。

尝试使用此查询文本。

Dim cmdText = "SELECT Goals, Mins_Played, " & _
              "iif([Goals] = 0, 0, (([Mins_Played]*1)/[Goals])) AS gpm " & _
              "FROM PlayerDatabase;"

并且如果您需要和排序依据,那么您应该重复用于构建 gpm 字段的表达式

....
"FROM PlayerDatabase " & _
"ORDER BY (iif([Goals] = 0, 0, (([Mins_Played]*1)/[Goals]))) DESC;"

相反,如果您想从代码中对数据进行排序(这样就不会让数据库对 gpm 执行两次计算),您可以编写

da.Fill(ds, "PlayerDatabase")
ds.Tables("PlayerDatabase").DefaultView.Sort = "gpm DESC"
lbl_Result.Text = ds.Tables("PlayerDatabase").DefaultView(0).Item(2)

不确定这是否比由数据库引擎执行排序更好(性能方面)。当您有很多行要订购时,需要对此进行测试。