有这样一段代码:
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、有时减少一个条件,这样的问题就隐藏了,比如我随便减少一个条件。