ACCESS2003 组合框联动查询.docx
组合框之间的联动在设计视图中创建窗体 便用向导创建窗体3.在窗体中加入三个组合框,如下图创建一个"乡镇村屯窗体",新建一个就行了,如下图侑三缓联动二熟据库office中国冷坛QB犒打开叱 戚设计 悔新重切 旦旦W杯杯m4.打开''乡"组合框的属性表,更改名称,例如我将它改名为"乡名"行来源类型设置为:表/查询点击行来源右边的".按钮,目的设置行来源5.加入地址表,双击乡字段,这样乡的行来源就设置完毕了段表序示则成字排显准6,按上面提到的方法设置村组合框的行来源,在这里要添加二个字段,一个是村,另一个是乡,在准则中 写入条件:froms !窗体名!控件名写入条件的目的是以乡组合框的值进行筛选,这是关键!7.以上面同样的方法设置屯组合框的行来源,在这再增加屯字段,在村字段的准则中再增加准则,如下图到止,三个组合框的设置已经完毕,但组合框还不可以联动的,必须在各控件的更新事件写入刷新代码才 能联动,代码在下面讲述8,在乡组合框属性中,点击更新后右边的"."按钮,写入事件过程其更新后事件的代码如下:Private Sub 乡名AfterUpdate()'更新后事件Me.村名.Requery '刷新村组合框的列表数据Me ,村名=清空村组合框,防止数据错乱Me ,屯名=清空屯组合框,防止数据错乱End Sub9.以同样方法打开村组合框更新后事件过程,写入如下代码Private Sub 村名AfterUpdate()Me.屯名.Requery '刷新屯组合框的列表数据Me ,屯名=清空屯组合框,防止数据错乱End SubOK现在各组合框可以联动了,回到窗体视图就可以看到效果以下再说一下组合框中常用的三个技巧技巧一.单纯上面的设置,细心的坛友会发现,组合框展开的列表中为什么会有很多的重复数据?如下图可不可以显示唯一数据呢?答案是:可以的,方法如下:打开行来源设置界面,如下图,在空白处右击,打开一个设置窗体将唯一值的默认值否改为是,如下图,然后关闭赠查询属性offiCE中国论坛E.常规 1Mffllwwg说明输出所有字段. . .否上限值All唯一值昌_d唯一的记录否运行权限用户的源数据库(当前)源连接字符串. . .记录锁定不锁定记录集类型动态集ODBC超时0口厘米 否筛选. . . 排序依据. 最大记录数. 子数据表名称 蕤接子字段. 蕤接主字段. 子数据表高度 子数据表展开再回到窗体视图,看看是不是全部的数据变成唯一值了?技巧二.可不可以当控件获得焦点时自动打开列表呢?这样可以实现纯键盘操作,不用点击箭头,答案也是可以的打开控件的属性,在"获得焦点"的事件过程中写入代码,代码如下:Private Sub乡名GotFocus()'获得焦点事件Me.乡名.Dropdown '展开列表数据End SubOK再回到窗体视图,是不是获得焦点的控件会自动打开列表?再按一下键盘的向下键,是否可以用键盘 选择数据?技巧三.当组合框输入数据时,在打开的列表中可否高亮显示对应的数据?答案同样可以Jd打开控件的属性,将"自动展开"设置为:是,这样在组合框输入数据时,对应最接近的数据就会高亮显示,不 信的话你自己试下就知了f囹乡镇村屯窗体二窗体就0E中国冷坛ZJ叵记录:H14 II r *|1来1共有记录数:1这一节已讲完.组合框使用教程(三)-组合框行来源模糊筛选上一节讲到,利用组合框与组合框之间进行数据筛选,当某 一个组合框的行来源很多数据,而又不能分类再筛选时,能不能在组合框中自筛选呢?如果可行的话相信 在实际应用中有一定的用途,本节就这个问题进行探讨。大家都知道,组合框的行来源可以写入条件的,也可以写入模糊查询条件,如下图昨SQL语句:查询生或表水质生产.段表序示则或字排显推名称水质生产单位Like IlfasNull (forms!单位的输入试验!生产单位),& forms!单位的输入试验!生产单位& '< IlSj这个语句说明当组合框没有数据时,行来源全部列出数据,而当组合框有数据时,模糊显示相关数据条件有了,当组合框输入字符时必须刷新行来源才能模糊显示相关数据,但单纯在组合框的“更改”事件中 写入刷新语句,系统会弹出错误提示,原因是组合框还没有保存数据,这样是不能刷新的,能不能先保存 数据,然后再刷新组合框的行来源呢?本课程关键就是这一点。一个窗体正常情况下是不会只有一个控件的,这样就给我们解决问题提供了便利,我们在组合框的“更改” 事件中写入代码,先将焦点移到别的控件上,然后将组合框进行刷新,最后再将点返回到组合框上,这样 就解决了先保存数据,然后再刷新组合框的行来源的问题了,代码如下: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.生产单位)'如果组合框有数据时将焦点移到字符 的后面焦点返回到组合框后,将焦点移到字符的最后面,没有这句的话,以前输入的数据变成修改状态,这是我 们不想看到的结果,从而使人感觉可以连续地输入数据最后还要进行一个设置,将默认的限于列表"是"改为"否",不然当字段中的第一个字符相同时会直接显示第 一行的数据绑定列列表宽度状态栏文字限于列表自动展开