以文本方式查看主题

-  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