好久没有用delphi 7写小程序了,今天偶发兴致,写了一个简单的数据处理程序。本来似乎很简单的一个批量导入数据的程序,没想到竟然触发了internal error:sy576错误!老实说这种错误很少见到,网上查找了一下,感觉语焉不详。经过反复的断点测试,终于知道了引起这个错误的一个问题点。在此供大家参考,也希望得到高手的指点。
我的IDE是Delphi 7,数据库是dbisam,程序功能是从excel表批量导入记录到数据库。为了控制异常,在导入操作之前先对记录作判断,防止不规范的记录被导入。判断条件有8个类似Excelid.worksheets[1].cells[r1,1].value数值判断条件语句,由于过长,所以依据pascal语言规范,起了8行录入,万万没想到的居然就是这个触发了internal error:sy576错误!
由于internal error:sy576错误出现之后,IDE在编译的时候就随机的开始报各种莫名其妙的错误——哪怕几乎将所有语句注释掉,甚至直接将IDE给弄崩溃了。如是关闭程序,关闭IDE,再来,还是报错!反复针对性的调试后,尝试新开8个变量逐条将对应excel记录值替换,将条件判断语句进行缩减到1行,不再报错!
细思这一问题,应该是编译器在处理超长字符串的时候(不仅原变量字符串过长,再加上视觉原因并排排版,中间又无意加入那么多空字符串),导致编译器撑傻了!不知道这算不算编译器的一个bug。当然编译器必尽只是人脑思维的产物,不可能将所有的情况考虑进去,再加上为了程序开发的便利,减少了约束,以至不经意间就形成了这个漏洞。当然也提醒编写程序要尽量规范简洁。