Office中国论坛/Access中国论坛

标题: 数值格式问题,FORMAT不能用! [打印本页]

作者: adge    时间: 2003-11-12 10:30
标题: 数值格式问题,FORMAT不能用!
列表框.rowsource=select num1 , num2 , sum(num3) as num_sum from Table group by num1,num2

我想将num_sum输出的格式为:#,###.00,但是用FORMAT就报错,用ROUND就可以
列表框.rowsource=select num1 , num2 , FORMAT(sum(num3),"#,###.00") as num_sum from Table group by num1,num2
我应该怎么做才得到输出格式为#,###.00的num_sumd,查了帮助和旧贴都找不到答案.
我是用WIN2000+SP4+OFFICEXP+SQL2000

作者: 阿罗    时间: 2003-11-12 20:16
SQL SERVER的format string同access里的不同。请到SQL服务器的联机手册当中查找答案。
作者: adge    时间: 2003-11-12 21:32
查过了,FORMAT_STRING,但不明白怎么用。阿罗站长可以举个例子吗?
作者: 阿罗    时间: 2003-11-12 22:03
按照本题实际情况,round函数可以使用了。否则就用cast或者convert或者str函数(都是sql服务器那边的函数)来格式化,在联机手册中有关这三个函数都有详细的例子,你也可以看看那round函数同access里比较有什么不同。其他的掩码问题,就要使用数据库对象的扩展属性,比如可以在adp创建表的时候定义掩码。一般来讲,具体显示方式最好都在客户端进行。例如你可以将某个显示字段在adp里面定义具体显示方式,这些任务不应该大量在服务器那里进行。
作者: adge    时间: 2003-11-12 22:38
我现在是想格式化列表框中的某一列数值啊,哪只能格在数据源做吧?
作者: 阿罗    时间: 2003-11-14 07:21
是的。如果是复杂的掩码例如身份证、带分割符的包含国家和地区代码的电话号码等要在SQL服务器端处理,就需要使用表定义的扩展属性,BOL中也有详细说明。我没有碰到过这类问题,一般最多碰到的就是数字-字符串转换及日期处理,这个用SQL的函数已经足够了。(例如你的具体情况就是如此)

另外一个替代方法可以使用recordset取得纪录以后在客户端逐条处理要格式化的数据,组成一个很长的字符串, 再给listbox显示,如果确有必要的话。这个我在国外一些编程例子中看见过。不过他是在SQL服务器那边,遍历一个cursor来组成一个nvarchar(8000)送回带分割符‘;’的字符串让access的listbox显示,当然你也可以取得纪录集在客户端作同样的处理。要根据具体情况权衡一下。这种情况下,listbox的行来源类型就是值列表。

客户端处理代码示例
private sub populateListbox()
dim rst as new adodb.recordset, listSource as string
set rst = currentproject.connection.execute ("SELECT id, PhoneNum FROM tblTest")
listSource = ""
While not rst.eof
         listSource =listSource & rst(0) & ", " & Format(rst(1), "000-0000")  & "; "
         rst.movenext
Wend
listbox1.rowsource = listSource
End Sub


[此贴子已经被作者于2003-11-13 23:22:07编辑过]






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3