作为开发者,总是需要加载表的所有行。但也偶尔会发生表无法加载的情况,而问题在于数值超过了列类型对应的范围。 今天早上又遇到了借款余额(双精度)高达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