基于独占式编辑设计中的问题
前提:t_yg表中的sys_locked字段没有值
问题:
1,开始是用的条件(sys_locked Is Null Or sys_locked = '" & _UserName & "'),始终检索不出结果。什么原因呢?
2,改用条件(sys_locked Is Null Or sys_locked = '" & _UserName & "')检索时奇怪的事情发生了。
如下图一,当_UserName不为空时,字符串拼接成的条件为(sys_locked = '' Or sys_locked = 'xxx') And [_Identify] = 3) 检索结果为0
如下图二,当_UserName为空串时,字符串拼接成的条件为(sys_locked = '' Or sys_locked = '') And [_Identify] = 3 检索结果为1
问题点在于,前提是sys_locked没有值,所以理论上来说,对于图一和图二中的条件,(sys_locked = '')应该都满足,检索结果应该都为1,
可是为什么只有图二中的检索结果为一呢?也就是说图二中Or后面的(sys_locked = '')条件生效了,而Or前面的却不满足。很困惑,求解。
3,在保存时(Tables("t_yg").Current("sys_locked") = Nothing)这句执行结果也不能生效。即保存后,sys_locked中仍然有值。
图一

此主题相关图片如下:截图02.jpg

图二

此主题相关图片如下:截图03.jpg

[此贴子已经被作者于2011-7-6 19:08:59编辑过]
= "" 和 Is Null 是不一样的
刚开始的条件表达式是正确的,没有结果出也许就是没有符合条件的记录。
你可以在SQL 执行窗口调试一下合成的SQL语句。
我是说在SQL执行窗口调试好SQL语句:
http://help.foxtable.com/topics/1484.htm
sys_locked = '' Or sys_locked = 'xxx'
检索不到数据,说明此列内容不等于xxx, 留意表中原始内容后面是否有空格回车之类的。
SQL不会撒谎的,有就是有,没有就是没有。
没有数据测试,不能判断具体原因。
你可以:
DataTables("xxx").LoadFilter = "(sys_locked = '' Or sys_locked = '') And [_Identify] = 3 "
DataTables("xxx").Load()
看看加载的这行数据,到底是什么。