为什么会出现此错误: 提供程序无法确定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()
答案 0 :(得分:2)
您的列目标包含零值。在这种情况下,正确的错误消息应为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)
不确定这是否比数据库引擎执行的排序更好(性能明智)。当您需要订购许多行时,需要对此进行测试。