Foxtable(狐表)用户栏目专家坐堂 → 同样的条件,为什么在table和datalist中执行效果不一样?


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

主题:同样的条件,为什么在table和datalist中执行效果不一样?

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
同样的条件,为什么在table和datalist中执行效果不一样?  发帖心情 Post By:2009/8/3 13:46:00 [显示全部帖子]

有个条件表达式为:规格 like '*16*8*',目的是筛选规格包含16*8的所有记录。
在table中,把Filter设置为这个条件,可以正常执行;
但在datalist中,把RowFilter设置为这个条件,就执行出错。什么原因呢?怎样解决?

图片点击可在新窗口打开查看此主题相关图片如下:snap1.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2009-8-3 13:57:09编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/3 14:50:00 [显示全部帖子]

以下是引用kylin在2009-8-3 14:20:00的发言:
分成2个Like,用and连接

这是个办法。但这样一改的话,查询结果就不精确了:本来是要查询包含16*8的记录,现在变成只要包含16和8这两个数字就都符合条件了,外延明显扩大。
不知还有没有更好的办法?关键就是字符间的那个*号。


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/3 15:10:00 [显示全部帖子]

以下是引用yangming在2009-8-3 14:57:00的发言:
Dim dst As WinForm.DataList = e.Form.Controls("DataList1")
Dim
txt As String
txt = "'*" & 16*8 & "*'"
dst.RowFilter = "规格 Like " & txt
这样试试

呵呵,这样肯定不对。查询条件变成'*128*'了。
16*8是一种字符查询条件。


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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/3 18:47:00 [显示全部帖子]

    呵呵,七、八楼的说法有点太简单了。实际应用中,各种想不到的数据格式都是可能碰到的;用Replace替换,查询结果就不再是想要的结果;用辅助列确实可以解决问题,但好象有点动静太大了 图片点击可在新窗口打开查看

    目前看来,唯一的解决办法,就是老六说的:把格式和table统一起来!
    如果统一的话,尽量把各种Filter也和SQL的格式统一吧。比如,sql语句里的like查询用的是%,而table里是*;把%用到filter里不行,把*用到sql里更不行。
[此贴子已经被作者于2009-8-3 18:56:33编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/19 16:39:00 [显示全部帖子]

在老版本中,如果把table的Filter设置为:规格 like '*16*8*'(目的是筛选规格包含16*8的所有记录),还是可以正常执行的。
怎么到新版反而不行了?
请老六查查。。。。。。。。。

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/19 17:42:00 [显示全部帖子]

那查询关键字中包含*的情况怎么处理?总要有个解决办法啊。
关键字是由用户手工输入的,实际应用中各种情况都可能出现。
就像sql语句中的'可以用''代替一样,必须考虑一下解决办法。如果关键字里包含*,希望可以用转义符代替。
[此贴子已经被作者于2009-8-19 17:43:12编辑过]

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/19 17:49:00 [显示全部帖子]

看看我目前做的项目,这种情况太常见了。一定要想个办法解决才行啊:

图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/20 6:43:00 [显示全部帖子]

自己顶一下。
Filter的统一,应该选择更兼容的方式才行

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


加好友 发短信 一级勋章
等级:版主 帖子:1993 积分:19397 威望:0 精华:20 注册:2008/9/2 10:09:00
  发帖心情 Post By:2009/8/20 9:27:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-8-20 8:05:00的发言:
其实这个不是我能决定的,就像我们不能决定SQL SERVER的语法一样。

    晕,老六非要逼着我自己去找资料。原来这样就可以解决:只要在代码中将关键字中的*号,用[]括起来就OK了。如:
    **** like '*22[*]33*'     '查找包含22*33的所有记录。
    以下是在网上找到的相关说明,其它狐友有兴趣也可以关注一下:
    vb中的LIKE操作符:为了与左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。

[此贴子已经被作者于2009-8-20 9:30:59编辑过]

 回到顶部