以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于表达式列,公式怎么老是出错?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=22347)

--  作者:胃小饱
--  发布时间:2012/8/9 17:16:00
--  [求助]关于表达式列,公式怎么老是出错?

下图是表结构,其中字段“节能补贴GS”是表达式列,拟设定的计算方式是“补帖标准×数量”、数据类型是“整数”:字段“节能补贴”数据类型也是“整数”。


图片点击可在新窗口打开查看此主题相关图片如下:yw1.jpg
图片点击可在新窗口打开查看
下图是字段属性:其中“数量”、“补贴标准”设为“短整型”,“节能补贴GS”因数值较大,设为整型,


图片点击可在新窗口打开查看此主题相关图片如下:yw2.jpg
图片点击可在新窗口打开查看
下图是字段“节能补贴GS”所设的公式。


图片点击可在新窗口打开查看此主题相关图片如下:yw3.jpg
图片点击可在新窗口打开查看

但是狐表直接给出错误信息:“Value is either too large or too small for Type \'Int16\'.”
刚开始以为是计算结果会溢出,所以在“节能补贴GS”旁边又多加了一个数据列“节能补贴”,仍设为和表达式列相同的整型,然后,用SQL命令:

update {table} set 节能补贴=补帖标准×数量;

执行通过,无异常,这说明计算结果并未超出整型所允许的最大值。

 

于是我就不解了,为何数据列都可以装下的数值,表达式列就会出错?数据类型完全一致,计算结果也未溢出,到底哪错了?

[此贴子已经被作者于2012-8-9 17:17:00编辑过]

--  作者:狐狸爸爸
--  发布时间:2012/8/9 17:22:00
--  

我也不能理解,我测试正常。

你做个例子发上来,我来测试看看。


--  作者:胃小饱
--  发布时间:2012/8/9 18:09:00
--  

你是说把“补帖标准”  和 “ 数量”  的类型由短整型全改为整型?

我是因为这两个字段都用不到那么大的值,想节约内存,才故意这样设置的,

你既然这样说,那我改来试试。


--  作者:胃小饱
--  发布时间:2012/8/9 18:33:00
--  

按muhua的要求改了,现在把经过说一下:

先把“补帖标准”  和 “ 数量”  的类型由短整型全改为整型,然后在表达式列设置公式,成功。看来他的方法可行。

然后,由于数量这列不太可能是很大的数量,用短整型足矣,于是又把“数量”改回短整型,表达式列未报错。

最后,报着“锲而不舍”的精神,把“补贴标准”一列再改回短整型(因这列其实也不会有很大的数字),这次又出错了,错误提示跟以前是一样的。表达式列数据被清空。

只好把“补贴标准”一列再改回整型,再重新设置表达式列,这次成功了。

 

把经过说一下的目的是让开发人员注意,这个不知道算不算bug?


--  作者:woiz
--  发布时间:2012/8/10 12:27:00
--  
用 cint([数量])* cint([补贴标准]) 应该能解决这个问题