设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12345下一页
返回列表 发新帖
查看: 18398|回复: 45
打印 上一主题 下一主题

组合框使用教程(三)----组合框行来源模糊筛选

[复制链接]
跳转到指定楼层
1#
发表于 2007-8-18 17:03:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上一节讲到,利用组合框与组合框之间进行数据筛选,当某一个组合框的行来源很多数据,而又不能分类再筛选时,能不能在组合框中自筛选呢?如果可行的话相信在实际应用中有一定的用途,本节就这个问题进行探讨。

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


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

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

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

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.生产单位) '如果组合框有数据时将焦点移到字符的后面
焦点返回到组合框后,将焦点移到字符的最后面,没有这句的话,以前输入的数据变成修改状态,这是我们不想看到的结果,从而使人感觉可以连续地输入数据



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



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


提供另一种直接用代码生成的方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-8-18 20:04:47 | 只看该作者

交作业!

虽然实现了,自我感觉应该有更简单的方法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
发表于 2007-8-18 20:16:44 | 只看该作者

回复 #2 fannky 的帖子

老师!我的作业有错误
当关键字是字段第一个字时,执行筛选出错,我倒是有办法但是太复杂,我向老师肯定布置的不是那么复杂的作业
4#
发表于 2007-8-19 12:13:59 | 只看该作者

在空的框内,输入查询字符的问题?

谢谢一点通老师给我们讲解的课程。
在第三课做作业发现
在模糊查询中,我试图输入一个“卫”字符,想筛选出和“卫”有关的记录。
可是当我输入一个“卫”字符,以“卫”开头的记录就直接选出来了,而不是将与“卫”有关的记录筛选出来。
后来,我发现只要在框内有字符时(先前已操作其它查询留在框内的字符),重新输入“卫”字符,却能筛选出记录,将框内清空后,就会发生不能筛选的情况。
请老师指点。
5#
发表于 2007-8-19 15:36:43 | 只看该作者
谢谢一点通老师的教程.

提点意见,
当组合框输入"河",按空格,直接将"河口镇富丽厂"选择在文本框上,而下拉框内也只有"河口镇富丽厂"一项,这样的话,假如以"河"开头的项有其他的话,而我又不是要选择"河口镇富丽厂",只得重新将"口镇富丽厂"后删除,影响输入效率.
6#
 楼主| 发表于 2007-8-19 18:07:24 | 只看该作者
上面各位, 由于传错例子, 现在已改正, 对此带来错误深表遗憾
二楼fannky所作的例子可作同样的修改,另:因行来源直接用代码完成,刷新语句可以不用

点击这里给我发消息

7#
发表于 2007-8-20 07:50:15 | 只看该作者
谢谢一点通老师!非常好!
如果再加上表中没有的地址输入后这个新地址自动存入表中(当然不能重复)则更好了!
(再进一步,如果表中的地址在半年(或一年)没有使用过则自动删除那就更更好了(为了防止表越来越大)当然这已不是组合框的内容了。)
可能这样的要求太苛刻了吧!谢谢!

[ 本帖最后由 wang1950317 于 2007-8-20 10:34 编辑 ]
8#
发表于 2007-8-22 16:07:08 | 只看该作者
我想提个建议

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

点击这里给我发消息

9#
发表于 2007-8-23 08:34:02 | 只看该作者
楼上朋友建议有道理。如示例中如果我们输入一个“奥”或“富”或“丽”或“秦”“岛”等字符,只有一条符合条件的记录,那么,它就会自动显示在组合框中,这样又省力了不少,输入时可考虑挑拣子符串中比较特别(不易重复)的字符输入。
10#
发表于 2007-8-23 13:36:33 | 只看该作者
If Nz(生产单位) <> "" Then Me.生产单位.SelStart = Len(Me.生产单位)

这个好,从来没有想到过这种方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 15:34 , Processed in 0.097534 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表