
前天我测试完成的程序,尤其是比对那部分,经比对基础数据库和目标数据库,轻松得到对比结果。
为了验证程序的严密性,我用目标数据库的一条记录手在基础数据库中查询,令人不解的是,所得记录竟然多于程序自动分析的结果!
程序中的命令是这样的:select * from a,b where AT(b.品名,a.品名)>0 and AT(b.产地,a.产地)>0。
而手工查询,我是这样做的:select * from a where AT([具体品名名称],品名)>0 and AT([具体产地名称],产地)>0。
仔细分析一下这两个代码,我也没发现差异之处,可是为什么运行的结果却又不一样呢?
百思不得其解之后,我求助于网络,在CSDN的VFP板块上发了一个询问帖。
郁闷的是,我都贴了N个小时,居然都没有人回应,难道今天高手都很忙?
在等待的同时,我不停百度相关资料,也试过用不同的语句,可结果都是程序分析所得远远少于人工查询所得……
一整天,我都在研究这个问题,可是一直得不到解决,而网上的提问又是一直没有人回应,郁闷啊!
快下班的时候,我在网上注意到一个问题:怎么删除字符串前后的空格?脑中灵光一闪:难道是空格问题?B表中部分记录字段值中可能存在空格,程序分析没作相应处理,而手工输入查询的时候,是不会存在空格的,是不是这样的差异导致最终查询结果的差异?
我打开VFP命令窗口,准备验证一下:
*********
set defa to E:\对比目录
use b
stopm=品名
stocd=产地
pm2=alltrim(stopm)
cd2=alltrim(stocd)
use
select * from a where at(pm2,品名)>0 and at(cd2,产地)>0
*********
Good!这次运行结果和手工查询结果完全一致,果然是空格在干扰,这下就好办了,程序的语句稍微改一下就行了:select * from a,b where AT(alltrim(b.品名),a.品名)>0 and AT(alltrim(b.产地),a.产地)>0。再次运行,一切Ok了!
呵呵,这个小小的空格问题困扰了我一整天,让我上下求索不得解;再想想以前写HTML,也有类似的情况出现过。
看来,每一个细节往往都是很重要的,绝对不可忽视!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。