《ACCESS窗体查询实例》由会员分享,可在线阅读,更多相关《ACCESS窗体查询实例(23页珍藏版)》请在金锄头文库上搜索。
1、1一一. 概述概述作为数据管理程序,统计和查询功能是非常重要的。否则,就和电子表格没有 区别了。所以,在每个 ACCESS 程序中都不可能缺少查询的功能。本文的目的是由浅入深的介绍几种最常用的利用主/子窗体来实现查询的方法, 使初学者和有一定 VBA 基础的人可以更好的使用窗体查询这种手段。附件中的窗体“常用窗体查询 0.MDB” ,仅包含 3 个数据表、1 个查询和以这 个查询为数据源的报表。是为了大家根据后面学习的内容作练习用的。我们先看查询中的数据:书籍书籍 编号编号书名书名类别类别作者作者出版社出版社单价单价进书日期进书日期22CHIP-01-08报刊电子计算机与外部设 备期刊社电子计
2、算机与外部 设备¥16.802001-9-2825电脑新时代-6 光盘光盘UNKNOWN电脑新时代¥5.002002-7-827学电脑-7 光盘光盘UNKNOWN人民邮电¥5.002002-7-1328CHIP-02-07 光盘光盘电子计算机与外部设 备杂志社电子计算机与外部 设备¥5.002002-7-1316MCSE 学习指南书籍Syngress Media 公司 人民邮电¥62.002001-9-2817局域网原理与架设技 术内幕大公开书籍蔡昌均中国青年¥69.002001-9-2819AccessVBA 基础书籍EvanCallahan人民邮电¥39.002001-9-2820中文版
3、Access2001 一 册通书籍赵琳等人民邮电¥42.002001-9-2821VISUALBASIC5.0 教程 书籍SteveBrown电子工业¥28.002001-9-2823中文版 VisualBasic5.0 程序 员指南书籍microsoft中国青年¥70.002001-9-2824Access 中文版开发指 南书籍Alison Balter人民邮电¥128.002002-2-1629Access 2002 数据库 系统开发实例导航书籍桂思强中国铁道¥25.002003-3-1030中国名陵集中华 古代名陵之大成书籍罗哲文等百花文艺¥14.002003-5-2031边缘部落福音谷
4、书籍林茨(撰文摄影)河北教育¥27.002003-5-20 为了比较有代表性,这个查询中包含多种字段类型:数字类型:【书籍编号】 、 【单价】字符类型:【书名】 、 【类别】 、 【作者】 、 【出版社】2日期类型:【进书日期】在多条件查询中,我们会使用除了【书籍编号】之外的其他字段作为查询条件。其实,在下面介绍的窗体查询方法中,有些代码或思路也可以应用在其它窗体 查询方法中,你对各种代码、方法和思路越熟练,就越能充分发挥它们的作用。这篇文章我是从 4 月初开始构思,到 5 月中旬开始动笔,花费两周时间写成, 里面包含了我对 ACCESS 窗体查询所积累的经验,对初学者和有一定 VBA 基 础
5、的人都有针对性的方法。另外,希望其他精通 ACCESS 的高手提出意见。3二二. 制作主制作主/子窗体的步骤子窗体的步骤1. 利用向导制作主窗体利用向导制作主窗体 现在的主窗体还太小,要已经以下步骤才能变成我们需要的主窗体(如下图):把窗体面积放大到足以容纳条件输入字段和子窗体,并调整所有控件的字体;把窗体的“记录源”和各控件的“数据来源”都删除(很多初学者很容易犯 的错误就是这里) ,把类别和出版社改为组合框(因为这些字段的可能值比较 少,直接选择就好,不必让用户输入) ;重新调整各字段的位置,并增加了两个空文本框和标签放在单价和进书日期 后面(因为我打算使用一个范围来作查询条件,而不是一个
6、固定的值,这样比 较符合实际) ;4单价后面的两个文本框改名为“单价开始”和“单价截止” ,进书日期后面 的两个文本框改名为“进书日期开始”和“进书日期截止” ;画一个矩形框包住所有查询条件,把矩形框背景设置为常规,背景色为深灰 色,特殊样式为凹陷,此时矩形框覆盖了其它控件,要用菜单中“格式” “置于底层”才能让它们显示出来;在窗体上用向导建立一个按钮,按钮标题是“查询” ,名称是“cmd 查询” 先不管里面的代码,后面再修改;窗体属性中“记录选定器”否, “浏览按钮”否。2. 利用向导设计子窗体利用向导设计子窗体 5 在主窗体中用工具箱中的“子窗体/子报表”对象建立一个子窗体;以存书查询为记
7、录源,选择所有字段;把子窗体命名为“存书查询子窗体” ;在主窗体上删除子窗体的标签,并重新调整子窗体的大小;关闭主窗体的设计视图,单独打开子窗体数据表视图,调整字体和行的大小。现在,我们得到了如下的窗体:6现在还没有实际的查询功能,我们在后面要根据所使用的方法,修改窗体并增 加一些其他的功能。还有一些小的细节要注意,比如:按 TAB 键后的获得光标的控件的顺序要在 设计视图下,视图菜单的“TAB 键次序”来修改;有些文本框获得焦点后是否 要打开输入法,比如输入单价和日期的地方要关闭,输入书名和作者的地方要 打开,这些要在控件属性中设置。7三三. 查询方法查询方法 1:在查询中加入条件:在查询中
8、加入条件这种方法对应的实例数据库是:“常用窗体查询 1.MDB” 。1. 设计查询设计查询我们打开“存书查询”设计视图如下:在字段【书名】的准则格内写入:Like IIf(IsNull(Forms!存书查询窗体!书名),*,* 再看一下设置了条件的交叉表查询的 SQL 语句:TRANSFORM Sum(存书查询.单价) AS 单价之 Sum SELECT 存书查询.类别 FROM 存书查询WHERE (存书查询.单价)=5)GROUP BY 存书查询.类别PIVOT Format(进书日期,“yyyy/mm“);可见,WHERE 是被插在中间的,所以我在生成 SQL 语句时要用如下代码:str
9、SQL = “TRANSFORM Sum(存书查询.单价) AS 单价之 Sum SELECT 存书查询.类别 FROM 存书查询 “strSQL = strSQL & “WHERE(“ & strWhere strSQL = strSQL & “) GROUP BY 存书查询.类别 PIVOT Format(进书日期,yyyy/mm)“注意,在字符串中间要留一些空格,比如“FROM 存书查询”的后面,如果不 留,SQL 语句中“存书查询”和“WHERE”会连在一起。这样肯定是错的。显示交叉表的内容,不能直接刷新Me.存书查询子窗体.SourceObject = “Me.存书查询子窗体.Sou
10、rceObject = “查询.存书查询_交叉表“这里也是一些人容易犯错的地方。因为子窗体里是查询对象,用Me.存书查询子窗体.Requery这样的语句是不能更新显示内容的。而要用 SourceObject 才能更新。如果子窗24体对象是窗体,而你又用 DAO 改变了作为子窗体记录源的查询的 SQL 语句, 也要用这种方法来更新显示内容。刷新计数和合计显示Me.计数 = DCount(“*“, “存书查询_交叉表“)Me.合计 = DSum(“单价“, “存书查询“, strWhere)由于子窗体对象不是窗体了,自然就没有什么窗体页脚来让你设计合计字段。 所以用只好用 Dcount 和 Dsu
11、m 来统计了。其他按钮的代码都有注释,我就不专门讲了。2. 报表设计报表设计为了适应交叉表查询列数不固定的情况,我在页面页眉、主体、报表页脚都设 计了一些名称有规律的标签、文本框。打开查询Set rst = CurrentDb.OpenRecordset(“SELECT * FROM 存书查询_交叉表 WHERE 1=2“)记录字段总数intFieldsNum = rst.Fields.Count 可能大家对“WHERE 1=2”这个条件比较迷惑,其实这是为了让这个 rst 没有 任何记录,因为我们需要的不是记录,只是各个字段的名字。这样也可以少占 用一些内存。其他代码已经有注释了,我就不在这里解释。3. 方法总结方法总结在子窗体中直接使用交叉表作为子窗体源对象是最简单的方法。交叉表查询中,日期类型的字段不能引用窗体上的控件作为准则。例如:Between FORMS!存书查询窗体!进书日期开始 And FORMS!存书查询窗体!进书日期截止ACCESS 会报告错误,但是可以用确定的日期常数作为条件,例如:Between #2001-1-1# And #2001-12-31# 所以要用 DAO 的方法来修改交叉表查询的 SQL 语句。以交叉表制作的报表,由于字段数不确定,所以设计起来太麻烦,实用性不 强。最好是把交叉表数据导出到 EXCEL 里再进行处理。