Foxtable(狐表)用户栏目专家坐堂 → [分享]实现数值输入范围控制,避免表格不能正常加载


  共有2293人关注过本帖树形打印复制链接

主题:[分享]实现数值输入范围控制,避免表格不能正常加载

帅哥哟,离线,有人找我吗?
shenyl0211
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[分享]实现数值输入范围控制,避免表格不能正常加载  发帖心情 Post By: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


 回到顶部