以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]帮忙看下原因,SQL句执行问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=11075) |
-- 作者:dlovef -- 发布时间:2011/7/6 19:05:00 -- [求助]帮忙看下原因,SQL句执行问题 基于独占式编辑设计中的问题 前提: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中仍然有值。
[此贴子已经被作者于2011-7-6 19:08:59编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 8:26:00 -- = "" 和 Is Null 是不一样的 刚开始的条件表达式是正确的,没有结果出也许就是没有符合条件的记录。 你可以在SQL 执行窗口调试一下合成的SQL语句。 |
-- 作者:dlovef -- 发布时间:2011/7/7 8:46:00 -- 我的执行结果就是在命令窗口执行的。 狐爸可以帮忙解释一下问题2的现象吗?
|
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 8:56:00 -- 我是说在SQL执行窗口调试好SQL语句: http://help.foxtable.com/topics/1484.htm
sys_locked = \'\' Or sys_locked = \'xxx\' 检索不到数据,说明此列内容不等于xxx, 留意表中原始内容后面是否有空格回车之类的。
|
-- 作者:dlovef -- 发布时间:2011/7/7 9:30:00 -- 狐爸,因为表里是没有数据的,所以我是想让(sys_locked = \'\') 为True,我比较困惑的是图二有结果,图一没结果。 |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 9:38:00 -- SQL不会撒谎的,有就是有,没有就是没有。 没有数据测试,不能判断具体原因。
你可以:
DataTables("xxx").LoadFilter = "(sys_locked = \'\' Or sys_locked = \'\') And [_Identify] = 3 " DataTables("xxx").Load()
看看加载的这行数据,到底是什么。 |
-- 作者:dlovef -- 发布时间:2011/7/7 9:54:00 -- 狐爸,结果是有的,我想问的就是((sys_locked = \'\' Or sys_locked = \'\') )这个条件的Or的左右看着是完全一样的,可是为什么会出现不一样的判断结果呢? |
-- 作者:狐狸爸爸 -- 发布时间:2011/7/7 9:58:00 -- 呵呵,这个得问微软了。
|
-- 作者:dlovef -- 发布时间:2011/7/7 10:07:00 -- 这个,这个,太高深了。不过还是谢谢了。 |