ACCESS窗体查询实例.docx
《ACCESS窗体查询实例.docx》由会员分享,可在线阅读,更多相关《ACCESS窗体查询实例.docx(24页珍藏版)》请在冰豆网上搜索。
ACCESS窗体查询实例
一.概述
作为数据管理程序,统计和查询功能是非常重要的。
否如此,就和电子表格没有区别了。
所以,在每个ACCESS程序中都不可能缺少查询的功能。
本文的目的是由浅入深的介绍几种最常用的利用主/子窗体来实现查询的方法,使初学者和有一定VBA根底的人可以更好的使用窗体查询这种手段。
附件中的窗体“〞,仅包含3个数据表、1个查询和以这个查询为数据源的报表。
是为了大家根据后面学习的容作练习用的。
我们先看查询中的数据:
书籍编号
书名
类别
作者
单价
进书日期
22
CHIP-01-08
报刊
电子计算机与外部设备期刊社
电子计算机与外部设备
¥
2001-9-28
25
电脑新时代-6光盘
光盘
UNKNOWN
电脑新时代
¥
2002-7-8
27
学电脑-7光盘
光盘
UNKNOWN
人民邮电
¥
2002-7-13
28
CHIP-02-07光盘
光盘
电子计算机与外部设备杂志社
电子计算机与外部设备
¥
2002-7-13
16
MCSE学习指南
书籍
SyngressMedia公司
人民邮电
¥
2001-9-28
17
局域网原理与架设技术幕大公开
书籍
蔡昌均
中国青年
¥
2001-9-28
19
AccessVBA根底
书籍
EvanCallahan
人民邮电
¥
2001-9-28
20
中文版Access2001一册通
书籍
琳等
人民邮电
¥
2001-9-28
21
书籍
SteveBrown
电子工业
¥
2001-9-28
23
中文版
书籍
microsoft
中国青年
¥
2001-9-28
24
Access中文版开发指南
书籍
AlisonBalter
人民邮电
¥
2002-2-16
29
Access2002数据库系统开发实例导航
书籍
桂思强
中国铁道
¥
2003-3-10
30
中国名陵——集中华古代名陵之大成
书籍
罗哲文等
百花文艺
¥
2003-5-20
31
边缘部落——福音谷
书籍
林茨〔撰文摄影〕
教育
¥
2003-5-20
为了比拟有代表性,这个查询中包含多种字段类型:
数字类型:
【书籍编号】、【单价】
字符类型:
【书名】、【类别】、【作者】、【】
日期类型:
【进书日期】
在多条件查询中,我们会使用除了【书籍编号】之外的其他字段作为查询条件。
其实,在下面介绍的窗体查询方法中,有些代码或思路也可以应用在其它窗体查询方法中,你对各种代码、方法和思路越熟练,就越能充分发挥它们的作用。
这篇文章我是从4月初开始构思,到5月中旬开始动笔,花费两周时间写成,里面包含了我对ACCESS窗体查询所积累的经验,对初学者和有一定VBA根底的人都有针对性的方法。
另外,希望其他精通ACCESS的高手提出意见。
二.制作主/子窗体的步骤
1.利用向导制作主窗体
现在的主窗体还太小,要已经以下步骤才能变成我们需要的主窗体〔如如下图〕:
①把窗体面积放大到足以容纳条件输入字段和子窗体,并调整所有控件的字体;
②把窗体的“记录源〞和各控件的“数据来源〞都删除〔很多初学者很容易犯的错误就是这里〕,把类别和改为组合框〔因为这些字段的可能值比拟少,直接选择就好,不必让用户输入〕;
③重新调整各字段的位置,并增加了两个空文本框和标签放在单价和进书日期后面〔因为我打算使用一个围来作查询条件,而不是一个固定的值,这样比拟符合实际〕;
④单价后面的两个文本框改名为“单价开始〞和“单价截止〞,进书日期后面的两个文本框改名为“进书日期开始〞和“进书日期截止〞;
⑤画一个矩形框包住所有查询条件,把矩形框背景设置为常规,背景色为深灰色,特殊样式为凹陷,此时矩形框覆盖了其它控件,要用菜单中“格式〞→“置于底层〞才能让它们显示出来;
⑥在窗体上用向导建立一个按钮,按钮标题是“查询〞,名称是“cmd查询〞先不管里面的代码,后面再修改;
⑦窗体属性中“记录选定器〞=否,“浏览按钮〞=否。
2.利用向导设计子窗体
①在主窗体中用工具箱中的“子窗体/子报表〞对象建立一个子窗体;
②以存书查询为记录源,选择所有字段;
③把子窗体命名为“存书查询子窗体〞;
④在主窗体上删除子窗体的标签,并重新调整子窗体的大小;
⑤关闭主窗体的设计视图,单独打开子窗体数据表视图,调整字体和行的大小。
现在,我们得到了如下的窗体:
现在还没有实际的查询功能,我们在后面要根据所使用的方法,修改窗体并增加一些其他的功能。
还有一些小的细节要注意,比如:
按TAB键后的获得光标的控件的顺序要在设计视图下,视图菜单的“TAB键次序〞来修改;有些文本框获得焦点后是否要打开输入法,比如输入单价和日期的地方要关闭,输入书名和作者的地方要打开,这些要在控件属性中设置。
三.查询方法1:
在查询中参加条件
这种方法对应的实例数据库是:
“〞。
1.设计查询
我们打开“存书查询〞设计视图如下:
在字段【书名】的准如此格写入:
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[书名]),'*','*'&[Forms]!
[存书查询窗体]!
[书名]&'*')
参加后的设计视图如下:
把这个式子解释一下:
LIKE:
是专门用于查询字符型字段的运算符,一般介绍ACCESS的书中都有它的用法。
ISNULL([Forms]!
[存书查询窗体]!
[书名]):
是用来判断窗体“存书查询窗体〞上面的“书名〞这个文本框是否是空的。
如果文本框是空的,如此:
ISNULL([Forms]!
[存书查询窗体]!
[书名])=TRUE〔真〕
如果文本框不是空的,如此:
ISNULL([Forms]!
[存书查询窗体]!
[书名])=FALSE〔假〕
IIF(expr,truepart,falsepart)函数:
expr必要参数。
用来判断真伪的表达式。
truepart必要参数。
如果expr为True,如此返回这局部的值或表达式。
falsepart必要参数。
如果expr为False,如此返回这局部的值或表达式。
所以当我们在窗体“存书查询窗体〞上面的“书名〞里写上“ACCESS〞,整个式子的结果是:
LIKE*ACCESS*
相当于查询所有书名中包含“ACCESS〞的书籍,这样可以实现模糊查询。
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[书名]),'*',[Forms]!
[存书查询窗体]!
[书名]&'*')
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[书名]),'*',[Forms]!
[存书查询窗体]!
[书名])
如果把准如此改为上面两句中的一句,同样情况下当我们在窗体“存书查询窗体〞上面的“书名〞里写上“ACCESS〞,整个式子的结果是:
LIKEACCESS*
LIKEACCESS
相当于查询以“ACCESS〞开头的书籍〔半模糊查询〕,或者书名就叫“ACCESS〞的书〔准确查询〕。
具体使用那一种形式的查询要根据你的实际情况来修改。
当我们在窗体“存书查询窗体〞上面的“书名〞里什么也没有写,整个式子的结果是:
LIKE*
相当于查询所有的有书名的书。
在书写查询准如此时,[Forms]!
[存书查询窗体]!
[书名]这样的窗体控件名很难写,这时你可以在准如此格点鼠标右键,选择生成器,出现如如下图的窗口:
在左边的树型列表框里找到控件所在的窗体,在中间列表框出现这个窗体包含的所有控件,双击控件名,就会出现“[Forms]!
[存书查询窗体]!
[书名]〞。
我们再把其他几个字段的查询准如此写出:
【类别】:
在窗体上是组合框,所以它肯定是个准确查询,跟【书名】一样,它是文本字段。
查询准如此如下:
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[类别]),'*',[Forms]!
[存书查询窗体]!
[类别])
【作者】:
跟【书名】一样,它是文本字段。
我也打算用模糊查询。
查询准如此如下:
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[作者]),'*','*'&[Forms]!
[存书查询窗体]!
[作者]&'*')
【】:
跟【类别】的情况完全一样。
查询准如此如下:
LikeIIf(IsNull([Forms]!
[存书查询窗体]!
[]),'*',[Forms]!
[存书查询窗体]!
[])
【单价】:
是一个数字字段,我在这里准备让用户可以查询“〞这样的围。
查询准如此如下:
BetweenIIf(IsNull([Forms]!
[存书查询窗体]!
[单价开始]),0,[Forms]!
[存书查询窗体]!
[单价开始])AndIIf(IsNull([Forms]!
[存书查询窗体]!
[单价截止]),5000,[Forms]!
[存书查询窗体]!
[单价截止])
BETWEENAND:
是查询符合某个围之的值所需的条件格式。
“BETWEEN1AND5〞相当于“【字段】≥1AND【字段】≤5〞。
根据前面讲解的IIF的容,我用一个表格来解释一下各种情况下这个式子的实际结果,便于大家理解:
〔0和5000是我事先在条件中设定的最小值和最大值〕
[单价开始]的值
[单价截止]的值
整个式子的实际结果
空
空
BETWEEN0AND5000
空
BETWEEN1.5AND5000
空
20
BETWEEN0AND20
【进书日期】:
是一个日期型字段,我在这里准备让用户可以查询“#2001-5-1#~#2002-5-1#〞这样的围。
查询准如此如下:
Between(IIf(IsNull([Forms]!
[存书查询窗体]!
[进书日期开始]),#2000-1-1#,[Forms]!
[存书查询窗体]!
[进书日期开始]))And(IIf(IsNull([Forms]!
[存书查询窗体]!
[进书日期截止]),#2099-12-31#,[Forms]!
[存书查询窗体]!
[进书日期截止]))
在这个式子中,#2000-1-1#和#2099-12-31#是我设定的两个默认的开始和截止日期。
如果用户不输入,就使用默认值了。
这和前面【单价】的情况是一样的。
2.设计按钮与代码
2.1查询按钮
查询按钮的代码非常简单,关键局部只有一句:
PrivateSubcmd查询_Click()
Me.存书查询子窗体.Requery'这句是关键
EndSub
Requery:
是用来重新查询控件的数据源,这样可以刷新子窗体显示的记录。
对于记录源是表或查询的控件如窗体、列表框、组合框等经常用Requery方法来刷新显示容。
2.2去除按钮
有了查询按钮的代码之后,大家就可以自己测试查询的效果了。
不过,每次想换一个查询的条件时要去除上一个条件输入的东西,有时候比拟麻烦。
我们再来设计一个去除条件的按钮,控件名称是“cmd去除〞,放在查询按钮的下面。
按钮的代码如下:
PrivateSubcmd去除_Click()
'下面这些控件的值要清空
Me.书名=Null
Me.类别=Null
Me.作者=Null
Me.=Null
Me.单价开始=Null
Me.单价截止=Null
Me.进书日期开始=Null
Me.进书日期截止=Null
Me.存书查询子窗体.Requery'清空之后一样要重新查询
EndSub
2.3打印按钮
有了查询结果,想打印出来,很简单。
由于