我的事:
我制作了一个工资系统,我们知道工资是分帐套的;我的工资系统中为了便于计算函数的设置进行了这样的结构分布:
--〉1个当月工资计算表[用于计算工资]、
--〉12个工资数据表[用于保存每个月的工资数据]。
系统运作的时候会读取对应的月数据表到计算表中进行计算,然后将计算的整个结果返回到月数据表中[当然会先清除原来的内容]。用到以下函数ClearGrid([%当月表%]) And CopyRows([%当月表%]) And ClearGrid([%计算表%]),意思很简单,比如说我要做3月的工资就先从3月的数据表中读取数据到计算表,计算表是设置了很多刷新公式的,计算完毕刷新数据后将3月的数据表清除然后将现在的计算表数据复制到3月数据表中,最后清空计算表[计算表仅仅是计算功能不保存数据]。
通过这样的设计有以下好处:
1、计算工资设置了很多刷新公式还有工资报表只需要在1个表中做就好了,不需要在12个表中全部设置;
2、更改工资计算公式的时候只要修改计算表,不需要更新很多地方;
3、数据表中仅仅是数字数据没有任何设置,一旦计算表出现故障我们可以不保存计算结果,继续使用原来的数据表中的数据。
4、这也是真正的其他EXE软件的计算保存做法。
可是我花费了很多心血这样设计的系统,虽然在计算上没有问题,但是在数据表之间保存数据的时候却出现了严重问题!!
当用户在计算机表中读取到3月份数据后进行录入修改计算刷新后执行保存,保存的实质就是将3月数据表清空然后将当前计算表的内容复制到3月数据表。ClearGrid这个命令确实屡试不爽,可是CopyRows这个命令在有的时候居然就掉链子了!!竟然没有将计算表的行复制到数据表中,数据丢失!!我大致估计,在100次执行这样的保存,出现的几率约为1-3次左右。
措施:为了弥补或者说是确保CpoyRows这个函数执行,我特地加了判断,在清除数据表后,数据表行数为1,如果CpoyRows后行数还是1的话肯定数据没有复制过去,如果没有复制过去的话将提示保存失败,并停止接下来的删除计算表的函数。经过这样的一道保险,好像没有问题了。可是昨天用户告诉我,还是出现了数据丢失的问题,好在之前做过备份[易表备份的速度是没有话说],只能调用备份了。
我想说:作为软件如果程序或者函数执行过程中没有成功的话将会造成严重的后果,而数据丢失不能不说是失职。靠我们设计者用其他函数来监视函数执行是否成功不能不说是一件可笑的事情。我们可以这样比喻:易表是一套积木,里面的函数都是很多具体的一个个的积木,我们用积木可以搭建城堡,但是如果我们其中积木存在质量问题随时会坍塌,那么整个城堡不是安全的,虽然我们可以用其他积木来稳固已知的个别不稳定的积木,但这不是一件好笑的事情吗,这不是我们的工作。我们是设计者是用积木来搭建的人,不是确保积木质量的人。
其他一个例子:论坛上有一个例子是防止窗口关闭用SendKeys函数来代替键盘操作,用鼠标关闭窗口好像确实不行,那是Sendkeys函数结合Msgbox函数在执行。可真的每次都行吗?不然!!你用鼠标狂点关闭窗口试试看?不多一会,你就可以看见Msgbox的窗口了,这个时候SednKeys函数干吗去了?!执行的结果呢?如果你不是每次都能保证执行的结果我要你这个函数就不是一个安全的事情!出现这个问题是我的计算机有病毒吗?是我的系统没有打补丁吗?
我认为:易表不是从底层编译的计算机指令程序,速度是一个大问题[不然为什么刷新那么慢呢]。在执行过程中会因为各种各样的因素出现函数未执行或者执行失效的情况!所以我有的时候也汗:我编写了很长的函数,让易表先干什么再干什么接着干什么等等,没准到第二步的时候已经掉链子了,之后的操作已经没有意义了,甚至之后的操作会对我的数据构成危害。谁能保证每一个函数都能确实执行到位吗?
我建议:
1、尽量避免使用一些文件操作类的函数,例如删除某个路径的文件,我们知道易表的共享编辑功能是软肋;我的工资软件某个用户登陆后会生成一个USERNAME.txt文件,在用户离开时会删除这个文件,这样其他用户在登陆的时候会提示某个用户在使用暂时拒绝登陆,但是,这样一个删除命令,也是不定期执行失效,这导致其他用户始终认为有人在访问工资系统。
2、尽量将某个按钮内的长函数分解为若干个按钮。
3、把你的系统备份功能做好做强,并敦促用户使用备份!
题外话:
1、在数据处理上我相信易表还是最简单有效便捷迅速自由可靠的!
2、易表网站主页上有个软件联盟,推荐了易语言。我已经学习并设计了一个简单的局域网共享运行的软件,执行效率非常好。都是易字辈,有共性,但是个性上怎么差别这么大呢?
3、我希望易表公司或者各位前辈能改善易表目前的一些缺陷,我希望易表作为一款数据处理的软件[比EXCEL强]能一直存在下去!
自己的观点,没有任何鄙视诋毁易表的意思[我用易表5年了],以上发言如有任何错误的地方,请大家批评指正。最后谢谢大家看我的帖子!