以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [分享]实现数值输入范围控制,避免表格不能正常加载 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=123258) |
-- 作者:shenyl0211 -- 发布时间:2018/8/10 17:21:00 -- [分享]实现数值输入范围控制,避免表格不能正常加载 作为开发者,总是需要加载表的所有行。但也偶尔会发生表无法加载的情况,而问题在于数值超过了列类型对应的范围。 今天早上又遇到了借款余额(双精度)高达18位的情况,真是快崩溃了(用了一早上的时间查错纠错)。 于是,不得不修改全局表ValidateEdit事件,增加下列代码,以防出错(高手勿喷): Dim dc As DataCol = e.Col.DataCol Dim v1 As Decimal If dc.IsNumeric Then If e.text > "" Then v1=val(e.text) Else Return End If Select Case dc.Datatype.name ‘Datatype在帮助文档中没介绍,谢谢色版的论坛回复,狐表论坛真好。帮助只能让人入门,论坛虽然不能让人成为像版主一样的高手,但在单位绝对会让人刮目相看 Case "Int32" \'一般用整数,别用微整数和短整数,因为微整数和短整数一旦用于相乘,乘积有可能不是微整数和短整数,就错了(帮助文档没介绍,也算是经验或教训了) If v1>2.1E9 Then e.Cancel=True ElseIf v1<-2.1E9 Then e.Cancel=True End If Case "Int64"\'长整数 If v1>9.2E18 Then e.Cancel=True ElseIf v1<-9.2E18 Then e.Cancel=True End If Case "Single" \'共7位有效数字,考虑保留2位小数,整数最多只能有5位 If v1>=1E5 Then e.Cancel=True ElseIf v1<=-1E5 Then e.Cancel=True End If Case "Double" \'共15位有效数字,考虑保留2位小数,整数最多只能有13位 If v1>1E13 Then e.Cancel=True ElseIf v1<-1E13 Then e.Cancel=True End If Case "Decimal" \'共28位有效数字,考虑保留2位小数,整数最多只能有26位 If v1>1E26 Then e.Cancel=True ElseIf v1<-1E26 Then e.Cancel=True End If End Select End If |