Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何实现多个关键词对应一个字段的查询呢?

dryang  发表于:2010-10-24 18:24:25  
复制

一个文本框对应一个字段的查询容易实现,论坛上有很多教程,但是多个文本框对应一个字段的查询如何实现呢?

 

举个例子,某一个字段的值是多个关键字,A+B+C或者B+C+D或者A+C+D,这样的

 

有三个文本框,不考虑顺序,输入C+B+A就可以搜到相应的记录

 

如何实现呢?和一对一的模糊查询一个做法可以吗?

 

Top
杜 发表于:2010-10-29 21:06:34

看来基础比我还差.

 

或 [Forms]![窗体名]![控件1] or [Forms]![窗体名]![控件2]  or [Forms]![窗体名]![控件3]

 

与 [Forms]![窗体名]![控件1] and [Forms]![窗体名]![控件2]  and [Forms]![窗体名]![控件3] 这个应该是你要的

 

模糊查询:在必要时加上 like "*" & [Forms]![窗体名]![控件1] & "*"



dryang 发表于:2010-10-31 22:04:46

不好意思啊,我是研究人脑的,对电脑懂的不多啊

 

谢谢,我试试看



煮江品茶 发表于:2010-11-01 09:08:05

 

 

dim str as string
str="True"
if isnull(me.A.value)=false then
   str=str & " And 查询字段名 Like '*" & me.A.value & "*'"
end if
if isnull(me.B.value)=false then
   str=str & " And 查询字段名 Like '*" & me.B.value & "*'"
end if
if isnull(me.C.value)=false then
   str=str & " And 查询字段名 Like '*" & me.C.value & "*'"
end if
me.子窗体名称.form.filter=str
me.子窗体名称.form.filteron=true



wyh99999 发表于:2010-11-06 21:22:45

针对楼主的问题(但是多个文本框对应一个字段的查询如何实现呢?),我有一个想法:

 老师和煮江品茶 老师都是根据楼主三个文本框去解决问题。我想,能不能用一个文本中的多个子字符串的内容在一个字段中去查询呢?(象百度搜索中那样字符加空格)

一、文本框输入:(内容加空格....)

二、按键(回车键)事件中的语句:1、判断文本框的值有几个子字符串;2、根据子字符串的个数,利用循环语句与煮江品茶老师的 str=str & " And 查询字段名 Like '*" & me.(循环中的值I).value & "*'"

望老师指教:能实现我这个想法吗?更希望有实现的实例。



wyh99999 发表于:2010-11-06 22:58:23
请老师关注并赐教!

wyh99999 发表于:2010-11-07 11:38:00

顶起来!



wyh99999 发表于:2010-11-10 17:29:23

此问题,煮江老师有很好的示例,望大家去学习一下:http://www.accessoft.com/blog/article-show.asp?userid=10802&id=4983



wyh99999 发表于:2010-11-10 18:52:22

请楼主给“煮江”老师的贴子“结贴”



wyh99999 发表于:2010-11-12 13:52:10

在循环与取舍中折腾字符,可在同一字段中多内容查询。望老师给予斧正。(这里引用了 钱玉炜老师的  [示例] 求特定字符出现在字符串中的次数。在此致谢)

czf = LTrim(czf) ' 把字符串头部的空格去掉
  kgs = CSNumber(Me.czf, " ") '字符中空符的个数
 
'Do While I = kgs '
For I = 1 To kgs + 1 '根据空字符的个数循环
    If I = 1 Then zf3 = LTrim(czf) ' 把字符串头部的空格去掉
  
   For ii = 1 To Len(zf3)
    If Mid(zf3, ii, 1) = " " Then
      zf2 = LTrim(Mid(zf3, 1, ii - 1))
      strWhere = strWhere & "([题名] Like '*" & zf2 & "*')  or "
      zf1 = Right(zf3, Len(zf3) - ii)  ' Mid(zf3, ii, Len(zf3))
      Exit For
    End If
 
  Next ii
   zf3 = LTrim(zf1)
   zf4 = zf4 + Left(zf3, ii - 1)
 
Next I
zf2 = LTrim(zf2) + zf3
strWhere = strWhere & "([题名] Like '*" & zf3 & "*') and "
If kgs = 0 Then strWhere = "([题名] Like '*" & czf & "*') and "
End If

点击下载此附件

煮江品茶 发表于:2010-11-12 14:21:09
代码过于复杂,有点瞎折腾的味道。

wyh99999 发表于:2010-11-12 16:40:09

所以请大师斧正,请“煮江”教师煮一煮,蒸开水价。



煮江品茶 发表于:2010-11-12 17:07:33

要我搞的话,我就用一个文本框中输入若干词组,用某个符号分割开来。然后用函数将该词组分解为数组,进行循环。其循环体为:

str=str & " And 查询字段名 Like '*" & me.B.value & "*'"

估计用到你现有代码行数的一半到三分之二就足够了。


 



wyh99999 发表于:2010-11-12 17:56:51
"煮江“老师,您的《【Access小品】一塌糊涂---通用模糊筛选实例》我已看了,因我的知识限制就是整不明白其中的代码,所以我就以我的想法就这样做的,您及坛中友人们怎样说我都许可的,因我的想法不能用我的知识去实现。在此,敬请“煮江”老师在忙中抽点时间帮我修改我的那一部分。

wyh99999 发表于:2010-11-13 16:52:49

请“煮江”老师抽点火力帮我的那里水份蒸一下。



dryang 发表于:2010-12-01 11:17:07

我只想知道在ACCESS里,那个查询字段如何写啊,和只含有单个内容字段的模糊查询有何区别?

 

大家一引申貌似越来越复杂了



总记录:15篇  页次:1/1 9 1 :