Foxtable(狐表)用户栏目专家坐堂 → [求助]帮忙看下原因,SQL句执行问题


  共有11414人关注过本帖树形打印复制链接

主题:[求助]帮忙看下原因,SQL句执行问题

帅哥哟,离线,有人找我吗?
dlovef
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
[求助]帮忙看下原因,SQL句执行问题  发帖心情 Post By:2011/7/6 19:05:00 [只看该作者]

基于独占式编辑设计中的问题
前提: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编辑过]

 回到顶部
帅哥,在线噢!
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 8:26:00 [只看该作者]

= "" 和 Is Null 是不一样的

刚开始的条件表达式是正确的,没有结果出也许就是没有符合条件的记录。

你可以在SQL 执行窗口调试一下合成的SQL语句。


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 8:46:00 [只看该作者]

我的执行结果就是在命令窗口执行的。
狐爸可以帮忙解释一下问题2的现象吗?

 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 8:56:00 [只看该作者]

我是说在SQL执行窗口调试好SQL语句:

http://help.foxtable.com/topics/1484.htm

 

sys_locked = '' Or sys_locked = 'xxx'

检索不到数据,说明此列内容不等于xxx, 留意表中原始内容后面是否有空格回车之类的。

 


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 9:30:00 [只看该作者]

狐爸,因为表里是没有数据的,所以我是想让(sys_locked = '') 为True,我比较困惑的是图二有结果,图一没结果。


 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 9:38:00 [只看该作者]

SQL不会撒谎的,有就是有,没有就是没有。

没有数据测试,不能判断具体原因。

 

你可以:

 

DataTables("xxx").LoadFilter = "(sys_locked = '' Or sys_locked = '') And [_Identify] = 3 "

DataTables("xxx").Load()

 

看看加载的这行数据,到底是什么。


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 9:54:00 [只看该作者]

狐爸,结果是有的,我想问的就是((sys_locked = '' Or sys_locked = '') )这个条件的Or的左右看着是完全一样的,可是为什么会出现不一样的判断结果呢?

 回到顶部
帅哥,在线噢!
狐狸爸爸
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/7 9:58:00 [只看该作者]

呵呵,这个得问微软了。

 

图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
dlovef
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:172 积分:1323 威望:0 精华:0 注册:2011/6/6 12:22:00
  发帖心情 Post By:2011/7/7 10:07:00 [只看该作者]

这个,这个,太高深了。不过还是谢谢了。

 回到顶部