以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  不得不说的经历,花了几小时才解决的。  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=9357)

--  作者:wcs
--  发布时间:2011/3/31 21:38:00
--  不得不说的经历,花了几小时才解决的。

有这样一段代码:


  Dim drzxhspz As DataRow  
  Dim s7 = "PZRQN = " & drkhmx("年") & "And PZRQY = " & drkhmx("月") & " and PZRQR = " & drkhmx("日")
      s7 = s7 & "and PZDM = " & drkhmx("凭证编号") & "and FLXH = " & drkhmx("sys_序号") & "and PZLX = " & drkhmx("sys_凭证类型")
      s7 = s7 & "and JDFX = " & drkhmx("sys_借贷方向")& "and FLJE = " & drkhmx("sys_金额") & "And KMDM = & drkhmx("sys_kmdm")
  drzxhspz = DataTables("yg_专项核算凭证").find(s7)
  If drzxhspz IsNot Nothing Then

......

 

其中:s7 中有9个判断条件,这类似的条件,在我的项目中存在很多,没出过问题,总能正确的找到我想要的记录。

 

可是,昨天突然不行了,100多行中,有三行是nothing,取不到值。

 

我仔细核对条件,把SQL数据源打开手工比对9个条件,都是满足的,可就是有三行nothing,我的系统中这样的9条件查找有多个,没有出过问题。

 

没有办法,我试着随便减少一个判断条件,这样就正常了可以查找到想要的记录了,可这不是我想要的结果。

 

无奈,我只有从数据类型方面检查:

1、DataTables("yg_专项核算凭证")是一个用sql的select查询出来的数据,我跟踪到数据库中的源表,一个个核对源表和目标表的9个字段数据类型是不是匹配。

 

2、结果发现源表KMDM字段同字符类型的,而我的drkhmx("sys_kmdm")是整数型的,实际上,这个字段中只会有  112203 这样的数据,看着是整数的。

 

3、没办法,我只有将目标表字段的数据类型改为字符型,再\'"&drkhmx("sys_kmdm")&"\'修改一下表达式,结果一试就正常了。

 

通过这个经历,我想说:

1、项目有时测试了,正常的运行了一段时间,并不代表你的代码就是正确的,比如昨天我就有三条记录不正常了。

 

2、条件表达式中,用于比较的字段的数据类型一定要一致。比如像 112203 这样的字符,系统大多数时候是会自动转换为整数的,但有时不会。

 

3、有时减少一个条件,这样的问题就隐藏了,比如我随便减少一个条件。


--  作者:狐狸爸爸
--  发布时间:2011/3/31 21:49:00
--  

呵呵,不单单是你,经常有同学犯同样的错误,今天一个同学为此折腾很久了:

 

http://www.datasoft.com.cn/dispbbs.asp?boardid=2&Id=9337

 


--  作者:wcs
--  发布时间:2011/3/31 21:58:00
--  

关键是,这个九条件判断用了一段时间,没有发现问题。

 

本次也是只有三条记录不正常,其他都正常的。

 

而且要到sql查询表在数据库中的源表,来比对!

 

所以费了不少神。


--  作者:mr725
--  发布时间:2011/3/31 23:37:00
--  
呵呵,正常来说,科目代码(或编码)都不可能是整数型的,否则,排序就是个问题了。