Office中国论坛/Access中国论坛

标题: 组合框使用教程(三)----组合框行来源模糊筛选 [打印本页]

作者: 一点通    时间: 2007-8-18 17:03
标题: 组合框使用教程(三)----组合框行来源模糊筛选
上一节讲到,利用组合框与组合框之间进行数据筛选,当某一个组合框的行来源很多数据,而又不能分类再筛选时,能不能在组合框中自筛选呢?如果可行的话相信在实际应用中有一定的用途,本节就这个问题进行探讨。

大家都知道,组合框的行来源可以写入条件的,也可以写入模糊查询条件,如下图
[attach]25845[/attach]

这个语句说明当组合框没有数据时,行来源全部列出数据,而当组合框有数据时,模糊显示相关数据

条件有了,当组合框输入字符时必须刷新行来源才能模糊显示相关数据,但单纯在组合框的“更改”事件中写入刷新语句,系统会弹出错误提示,原因是组合框还没有保存数据,这样是不能刷新的,能不能先保存数据,然后再刷新组合框的行来源呢?本课程关键就是这一点。

一个窗体正常情况下是不会只有一个控件的,这样就给我们解决问题提供了便利,我们在组合框的“更改”事件中写入代码,先将焦点移到别的控件上,然后将组合框进行刷新,最后再将点返回到组合框上,这样就解决了先保存数据,然后再刷新组合框的行来源的问题了,代码如下:

Private Sub 生产单位_Change()  '组合框的更改后事件
    Me.列表142.SetFocus     '先将焦点移到别的控件上
    Me.生产单位.Requery     '更新组合框的源数据
    Me.生产单位.SetFocus    '然后再将焦点返回到原组合框
    If Nz(生产单位) <> "" Then Me.生产单位.SelStart = Len(Me.生产单位) '如果组合框有数据时将焦点移到字符的后面
    Me.生产单位.Dropdown   '展开组合框的列表数据
End Sub

这里有一句代码
If Nz(生产单位) <> "" Then Me.生产单位.SelStart = Len(Me.生产单位) '如果组合框有数据时将焦点移到字符的后面
焦点返回到组合框后,将焦点移到字符的最后面,没有这句的话,以前输入的数据变成修改状态,这是我们不想看到的结果,从而使人感觉可以连续地输入数据

[attach]25846[/attach]

最后还要进行一个设置, 将默认的限于列表"是"改为"否",不然当字段中的第一个字符相同时会直接显示第一行的数据
[attach]25871[/attach]


例子如下,大家动下手,看能不能制作成同样的效果?(上次传错例子,请重新下载)
[attach]25872[/attach]

提供另一种直接用代码生成的方法
[attach]25956[/attach]
作者: fannky    时间: 2007-8-18 20:04

交作业!

虽然实现了,自我感觉应该有更简单的方法
作者: fannky    时间: 2007-8-18 20:16
标题: 回复 #2 fannky 的帖子
老师!我的作业有错误
当关键字是字段第一个字时,执行筛选出错,我倒是有办法但是太复杂,我向老师肯定布置的不是那么复杂的作业
作者: ly    时间: 2007-8-19 12:13
标题: 在空的框内,输入查询字符的问题?
谢谢一点通老师给我们讲解的课程。
在第三课做作业发现
在模糊查询中,我试图输入一个“卫”字符,想筛选出和“卫”有关的记录。
可是当我输入一个“卫”字符,以“卫”开头的记录就直接选出来了,而不是将与“卫”有关的记录筛选出来。
后来,我发现只要在框内有字符时(先前已操作其它查询留在框内的字符),重新输入“卫”字符,却能筛选出记录,将框内清空后,就会发生不能筛选的情况。
请老师指点。
作者: duomu    时间: 2007-8-19 15:36
谢谢一点通老师的教程.

提点意见,
当组合框输入"河",按空格,直接将"河口镇富丽厂"选择在文本框上,而下拉框内也只有"河口镇富丽厂"一项,这样的话,假如以"河"开头的项有其他的话,而我又不是要选择"河口镇富丽厂",只得重新将"口镇富丽厂"后删除,影响输入效率.
作者: 一点通    时间: 2007-8-19 18:07
上面各位, 由于传错例子, 现在已改正, 对此带来错误深表遗憾
二楼fannky所作的例子可作同样的修改,另:因行来源直接用代码完成,刷新语句可以不用
作者: wang1950317    时间: 2007-8-20 07:50
谢谢一点通老师!非常好!
如果再加上表中没有的地址输入后这个新地址自动存入表中(当然不能重复)则更好了!
(再进一步,如果表中的地址在半年(或一年)没有使用过则自动删除那就更更好了(为了防止表越来越大)当然这已不是组合框的内容了。)
可能这样的要求太苛刻了吧!谢谢!

[ 本帖最后由 wang1950317 于 2007-8-20 10:34 编辑 ]
作者: goto2008    时间: 2007-8-22 16:07
我想提个建议

当组合框里筛选得只剩下最后一个时。能不能让它自动就填入到组合框里
省得人为再下拉这一个。
作者: wang1950317    时间: 2007-8-23 08:34
楼上朋友建议有道理。如示例中如果我们输入一个“奥”或“富”或“丽”或“秦”“岛”等字符,只有一条符合条件的记录,那么,它就会自动显示在组合框中,这样又省力了不少,输入时可考虑挑拣子符串中比较特别(不易重复)的字符输入。
作者: eyewitnes    时间: 2007-8-23 13:36
If Nz(生产单位) <> "" Then Me.生产单位.SelStart = Len(Me.生产单位)

这个好,从来没有想到过这种方法
作者: tmtony    时间: 2007-8-23 20:57
不错,不错!!
作者: 一点通    时间: 2007-8-25 12:05
原帖由 goto2008 于 2007-8-22 16:07 发表
我想提个建议

当组合框里筛选得只剩下最后一个时。能不能让它自动就填入到组合框里
省得人为再下拉这一个。


这个提议很好, 其实在原基础上增加一句代码就能实现,代码如下
Private Sub 生产单位_Change()  '组合框的更改后事件
    Me.列表142.SetFocus     '先将焦点移到别的控件上
    Me.生产单位.Requery     '更新组合框的源数据
    Me.生产单位.SetFocus    '然后再将焦点返回到原组合框
    If Nz(生产单位) <> "" Then Me.生产单位.SelStart = Len(Me.生产单位) '如果组合框有数据时将焦点移到字符的后面
    Me.生产单位.Dropdown   '展开组合框的列表数据
    If Me.生产单位.ListCount = 1 Then Me.生产单位 = Me.生产单位.ItemData(0) '当只有一个符合条件时,直接提取数据到组合框
End Sub

例子
[attach]25958[/attach]
作者: fannky    时间: 2007-8-25 16:30
原帖由 一点通 于 2007-8-25 12:05 发表


这个提议很好, 其实在原基础上增加一句代码就能实现,代码如下
Private Sub 生产单位_Change()  '组合框的更改后事件
    Me.列表142.SetFocus     '先将焦点移到别的控件上
    Me.生产单位.Requery     ...

发现一个问题,在Win2000+Access2003环境下出错!包括我之前发布的作业也一样。
现象如下:
假如我输入“河”他会自动在后面加n个河(根据记录条数而变化)……
在Xp下没有发现,该怎么改?
作者: ranor    时间: 2008-8-1 12:21
学习下
作者: wjw8216    时间: 2008-8-28 14:37
学习!支持
作者: tytill    时间: 2008-9-2 16:06
组合框和有用处,相当感谢,顶
作者: yxf320123    时间: 2008-10-28 13:34
谢谢分享
作者: zdjzdr    时间: 2008-12-5 15:39
学习了,谢谢管理员
作者: dai1216    时间: 2009-2-24 15:50
这个不错,要好好学习一下
作者: shangrilar    时间: 2009-3-13 12:54
真是长知识!!!!!!!!!!!!!
作者: siminn    时间: 2009-4-7 17:44
先下载回去仔细学习
作者: assassin    时间: 2009-5-9 09:32
解压密码是什么?
作者: cookyliang    时间: 2009-6-24 14:39
能提供解压密码吗?
打不开,学不了了
作者: mztao1993    时间: 2009-7-12 16:10
好好跟老师学习一下!
作者: allthing    时间: 2009-8-8 06:32
谢谢!!
作者: kpsimon    时间: 2009-8-8 12:37
谢谢分享
作者: sagemeyou    时间: 2009-8-8 12:41
来学习。
作者: sagemeyou    时间: 2009-8-8 12:44
好帖 支持~~
作者: abuding    时间: 2009-9-4 15:53
谢谢,太巧妙了!
作者: yjjamesband    时间: 2009-9-23 10:01
学习了
作者: lovelaceliu    时间: 2010-2-3 22:47
教程二学习完,前来学习第三,但第二最后那个高亮没弄懂.实在太笨
作者: xie16abc    时间: 2010-2-23 22:47
妙极
作者: cjssxo    时间: 2010-2-28 01:40
太好了
作者: 小何    时间: 2010-6-17 15:01
这个好,从来没有想到过这种方
作者: 小何    时间: 2010-6-17 15:01
这个好,从来没有想到过这种方
作者: 小何    时间: 2010-6-17 15:08
妙极
作者: oybj18    时间: 2010-6-20 16:13
不错
作者: snddzxb    时间: 2010-11-13 11:25
强悍
作者: xie62    时间: 2010-11-13 13:55
谢谢分享
作者: liu.jw    时间: 2011-7-11 07:28
一点通老师:
      我有个小问题,为什么当窗体打开时组合框下拉列表是这样的
[attach]46054[/attach]
怎样可以让组合框打开时为这种状态:
[attach]46055[/attach]

作者: yanghua1900363    时间: 2011-8-20 08:40
太给力了 谢谢!
作者: wuzipan    时间: 2011-10-10 16:53
我也来学习。谢谢
作者: zhy074    时间: 2014-4-7 21:33
密码是多少?
作者: msyangyi    时间: 2014-5-23 16:13
老师,谢谢
作者: csi中国    时间: 2014-8-19 10:36
11111
作者: eaglezqq77    时间: 2018-5-10 13:41
真的很好!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3