如何查询ado记录集中的数值型字段的小数位数是几位呀?我想根据小数点的位数用format(函数设置msflexgrid单元格的格式),谢谢.
是这样,因为后台sql server中数据表中,有的字段是3位小数,而有的字段是2位小数,比如金额必须只能是两位小数才行.这样就存在一个问题,填充表格mshflexgrid时,要进行format设置,比如金额字段,要保留两位小数,不足补0,而对于那些3位小数的字段则要保留三位小数,不足三位也要用0补齐.
关键是我不知道如何通过程序判断一个字段的小数是几位的.(我是指在后台sql中定义的是几位的)
故求教大家.
或者实现我的需求还有什么好办法.谢谢先.
是这样,因为后台sql server中数据表中,有的字段是3位小数,而有的字段是2位小数,比如金额必须只能是两位小数才行.这样就存在一个问题,填充表格mshflexgrid时,要进行format设置,比如金额字段,要保留两位小数,不足补0,而对于那些3位小数的字段则要保留三位小数,不足三位也要用0补齐.
关键是我不知道如何通过程序判断一个字段的小数是几位的.(我是指在后台sql中定义的是几位的)
故求教大家.
或者实现我的需求还有什么好办法.谢谢先.
解决方案 »
- SystemParametersInfo的使用问题
- vb.net 与 sqlserver2000 数据库连接不成功 connection
- 请问:vb下有usb控件吗?
- 解决马上揭贴,在线等!!100分的才鸟问题
- Access中我想设计两个字段一个放超大文本(几千汉字),一个放图片,应该如何作呢: (
- 我的VB源码复制到WORD里后所有汉字都成了乱码,怎么办呢?(英文WIN2000)
- 鼠标按键判断的高手级问题,看似简单,可已捆扰我多时………………
- vb 求教。关于窗体卸载问题unload
- 一个数据报表的问题,急救。
- 如何在程序中实现让combobox控件弹出下拉菜单(它好像没这个方法)
- 是否有办法清空Dropdown List风格的ComboBox?
- 如何从众多存储数据格式为日期的字段中,找到为指定日期的Sql语句?
1. 先填充表格,写入数据
2. len(单元格内容)-instr(单元格内容,"."),得到小数点后的小数位数
3. 根据小数位数,定义一个format的偏移值字符串,如"0.00","0.000"
4. 然后某一个列或某个单元格的format可以写成format(单元格内容,定义的偏移量)当然第3,4步可以合并,用select case语句即可。希望对楼主有帮助。
关键是无法判断这个字段定义的信息,我只能用type属性取到这个字段是什么类型的,
如何取到小数点后定义的是几位呢?
我的通用填充程序如下:
Public Function fillgrid(pGrid As MSHFlexGrid, rs As ADODB.Recordset) As Boolean
'小数型数值保留两位小数
'注:目前填充表格主要使用该函数
'功能:将记录添充到表格中
'接收参数:表格名称和记录集
'表格没有第一列空行,即第一列填实际数据,不做记录指示器使
'表头内容全部居中,其余单元格根据类型居左或居右
Dim i As Integer, j As Integer, str As String 'str用于存放字段内容 On Error GoTo gherr
'判断表格是否在记录
If rs.RecordCount < 1 Then
fillgrid = False
Exit Function
End If
pGrid.Redraw = False '不重绘,目的是提高速度
With pGrid
.Clear
.FixedRows = 1 '固定行
.Row = 1 '活动单元行
.Col = 1 '活动单元列
rs.MoveLast
rs.MoveFirst '移动记录,如果不移动,有时候RecordCount会统计不准确
.Cols = rs.Fields.Count '确定表格列数
.Rows = rs.RecordCount + 1 '该设定决定表格有多少行显示数据,很重要[因为有表头,故总行数为记录数加一]
'添加各个字段的名称[添加表头]
For i = 0 To rs.Fields.Count - 1 '循环显示字段名称,有多少个字段则循环多少次
.Row = 0
.Col = i
.CellAlignment = 4 '表头都设成居中对齐
.TextMatrix(0, i) = rs.Fields(i).Name '显示字段名称
Next
'第一行放字段名,再加上记录数,就是表格应有的总行数
For i = 1 To rs.RecordCount '循环显示记录,有多少条记录则循环多少次
.Row = i '当前行随着添充数据走
For j = 0 To rs.Fields.Count - 1 '循环处理各个列
.Col = j '使第j列成为当前列
'根据不同的类型,设置不同的格式
Select Case rs.Fields(j).Type
Case adDecimal, adDouble, adSingle, adNumeric
.CellAlignment = 7
If Val(rs.Fields(j).Value & "") = 0 Then '为0要不显示
str = ""
Else
'设定至少保留两位小数
str = Format(Trim(rs.Fields(j) & ""), "#0.00#")
End If
Case adBigInt, adInteger, adTinyInt, adSmallInt
.CellAlignment = 7
If Val(rs.Fields(j).Value & "") = 0 Then '为0要不显示
str = ""
Else
str = Trim(rs.Fields(j).Value & "")
End If
Case Else
.CellAlignment = 1
str = Trim(rs.Fields(j).Value & "")
End Select .TextMatrix(i, j) = str
Next
rs.MoveNext '显示下一条记录
Next
'设定第几行显示在最前面(用toprow属性)
.TopRow = 1
fillgrid = True '返回true End With
pGrid.Redraw = True '填完数据后,充许重绘
Exit Function
gherr:
fillgrid = False
End Function