一个郁闷了我很久的问题,高分求助,请高手解答!

liuguomin001 2004-09-12 11:28:41
我用下句实现在ACCESS里的查询
str1="select bianhao,mingchen,gongyingshang,round(sum(shuliang),3) from bz_rk where riqi <=#2004-9-12# group by bianhao,mingchen,gongyingshang"

用下面这个函数提交查询,将结果填充到MSHFlexGrid表格中
Public Sub FillGridByRecord(Grid As MSHFlexGrid, sSql As String, cn As ADODB.Connection)
Dim i, j As Integer
Dim rst As New ADODB.Recordset
If cn.State <> adStateOpen Then cn.Open
rst.Open sSql, cn, adOpenStatic, adLockReadOnly
If rst.RecordCount < 1 Then Exit Sub
Grid.Rows = rst.RecordCount + 1
Grid.Cols = rst.Fields.Count
For i = 1 To Grid.Rows - 1
For j = 0 To Grid.Cols - 1
Grid.TextMatrix(i, j) = IIf(IsNull(rst.Fields(j).Value), "", rst.Fields(j).Value)
Next j
rst.MoveNext
Next i
rst.Close
Set rst = Nothing
If cn.State = adStateClosed Then cn.Close
Exit Sub
End Sub

但是在执行到 rst.Open sSql, cn, adOpenStatic, adLockReadOnly 时却出错了。
但是我在ACCESS里直接执行查询的话,却没有错误。
如果我在查询语句中不用round函数,就不会出错。而在我的查询记录中,存在小数点后9位小数,我要用round()函数将字段四舍五入成两位小数,不知道该如何结果,是不是要安装什么补丁才行。

请高手指教!
...全文
78 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tztz520 2004-09-12
用round是没有问题的,但你还用了sum,sum是返回一个询到的数据的总和,只返回一条数据呀.你可以这样吧
str1="select round(sum(shuliang),3) from bz_rk where riqi <=#2004-9-12# group by bianhao,mingchen,gongyingshang"
回复
阿泰 2004-09-12
建议你在sql里不要使用round,保证正确执行
取出来后,在写入Grid前再处理小数点位数
回复
cqm2099 2004-09-12
up
回复
vbman2003 2004-09-12
SQL语句基本上没问题,多加一个括号,改一下游标试试:
sSql="Select bianhao,mingchen,gongyingshang,Round((Sum(shuliang)),3) "& _
"From bz_rk "& _
"Where riqi <=#2004-9-12# "& _
"Group By bianhao,mingchen,gongyingshang"

rst.Open sSql, cn, adOpenKeyset, adLockOptimistic
回复
helanshan 2004-09-12
不能用sum函数
回复
RUKYO 2004-09-12
SQL语句没有问题,我在vb中查寻Access数据时候也用过round的,是完全可以的。
试试把这句
If cn.State <> adStateOpen Then cn.Open

改为:
If cn.State <> adStateOpen Then
cn.CursorLocation = adUseClient
cn.Open mCnnString 'mCnnString是你的连接Access的字符串
End If
回复
相关推荐
发帖

1187

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
帖子事件
创建了帖子
2004-09-12 11:28
社区公告
暂无公告