ACCESS常用的窗体查询方法及实例
Me.出版社 = Null Me.单价开始 = Null Me.单价截止 = Null Me.进书日期开始 = Null Me.进书日期截止 = Null Me.存书查询子窗体.Requery '清空之后一样要重新查询 End Sub 2.3 打印按钮
有了查询结果,想打印出来,很简单。由于报表的记录源就是“存书查询”,所以在查询里设计的条件会直接在报表里体现出来。
我们只要用按钮向导制作一个预览报表的按钮就可以了。我们把这个按钮放在子窗体下面的右边。控件名称是“cmd预览报表”。 由于完全是采用向导制作的,不需修改代码,所以我就不在这里列出代码了。 2.4 导出EXCEL按钮
如果你觉得ACCESS的报表边框太难看,或者你想在报表上加上一些说明什么的。你可能更愿意把数据导出到EXCEL里进行再加工。
为了初学者容易理解,我打算用一个宏来解决这个问题。宏的设计如下图:
现在,宏里“输出文件”为空,运行时会自动跳出对话框让你选择保存目录和文件名。如果你想保存在数据库所在目录下的“查询结果.xls”里,可以在“输出文件”一栏里填入:
=[currentproject].[path] & \查询结果.xls\刘小军(Alex)2003-5
11
ACCESS常用的窗体查询方法及实例
把这个宏存为“导出查询数据宏”。
然后再在窗体里加入按钮。当按钮向导出现后,直接取消。在按钮的属性页里,先把按钮名称改为“cmd导出”,在按钮的“单击事件”里直接用下拉框选择“导出查询数据宏”,如下图。这样就不必编写代码了。
3. 增加统计功能
经常有人需要在主窗体上显示符合查询条件的记录总数,以及子窗体中某一字段的合计。所以,我们也准备在主窗体上增加记录总数和单价的合计。 3.1 子窗体上的设计
①单独打开子窗体的设计模式,在窗体页脚部分拉出一段窗体;
②在上面增加两个文本框:一个是“txt计数”,控件来源=Count(*),另一个是
刘小军(Alex)2003-5
12
ACCESS常用的窗体查询方法及实例
“txt单价合计”,控件来源=Sum([单价]);
③在子窗体的窗体属性中设置:浏览按钮=否,记录集类型=快照(快照的运行速度快,占用内存少,但不能编辑更新,正适合我们的需要); 3.2 主窗体上的设计
①在子窗体下面的地方设计两个文本框“计数”和“合计”,把它们的标签改为“符合条件记录数:”和“单价合计:”; ②“计数”文本框的控件来源=[存书查询子窗体].[Form].[txt计数],“合计”文本框的控件来源=[存书查询子窗体].[Form].[txt单价合计];
③由于主窗体上的这两个文本框是自动计算的,为了区别,设置它们的是否有效=否,是否锁定=是,背景颜色=深灰色。
4. 方法总结
现在,整个窗体就已经完成了。大家可以使用各种条件组合来测试一下窗体的效果。
刘小军(Alex)2003-5
13
ACCESS常用的窗体查询方法及实例
4.1 本方法优点
在查询中加入条件这种方法比较简单,只要在查询中设计好各字段的条件,那么窗体中的代码就非常少,而且在打印报表和导出数据方面也很容易设计,比较适合初学ACCESS的人使用。 4.2 本方法缺点
①对查询中的数据有限制,所有设计了条件的字段中必须是每条记录都有数据。即使你在窗体中并没有在这个字段对应的文本框中输入条件。
举例来说,假设你在表“tb藏书情况”中,把【书籍编号】=16对应的这本书的作者或单价删掉,在“存书查询窗体”中,即使你不输入任何条件,【书籍编号】=16对应的这本书你也看不见。
②如果在某个查询组合下,子窗体上根本没有符合条件的记录,则主窗体上的“记录数”和“合计”会显示“#错误”。 如果把主窗体上的“记录数”和“合计”的控件来源改为:
=IIf(IsError([存书查询子窗体].[Form].[txt计数]),0,[存书查询子窗体].[Form].[txt计数]) =IIf(IsError([存书查询子窗体].[Form].[txt单价合计]),0,[存书查询子窗体].[Form].[txt单价合计]) 则不会出现“#错误”,这是我在下面地址学到的:
http://www.erpbus.net/access/topic.asp?topic_id=8183&forum_id=44 ③报表不能直接打开,每次打开报表就会跳出提示框要求输入条件。
刘小军(Alex)2003-5 14
ACCESS常用的窗体查询方法及实例
四. 查询方法2:用VBA生成窗体筛选条件
这种方法对应的实例数据库是:“常用窗体查询2.MDB”。
主窗体的控件与“常用窗体查询1.MDB”相同,只是按钮中的代码都改了。子窗体则完全相同。
“存书查询”中不需要输入任何条件。
1. 按钮代码设计
1.1 查询按钮
本按钮代码的设计思想是根据主窗体上各个条件输入控件的值,用VBA代码生成一个条件组合的字符串作为子窗体的窗体筛选的条件。
'判断【书名】条件是否有输入的值 If Not IsNull(Me.书名) Then '有输入 strWhere = strWhere & \书名] like '*\书名 & \ End If &:是字符串链接运算符,它和“+”不同之处在于“&”两边如果不是字符串表达式,它会自动把表达式的值变成字符串,省了你转换格式了。
\书名] LIKE '*\:英文双引号是VBA用来表示字符串的符号,两个双引号中间是一个字符串。\两个双引号中间什么也没有,表示一个空字符串。 注意:空字符串≠NULL(空值)。所以IsNull(\。
'*ACCESS*':英文单引号是SQL语句中用来表示字符串的符号,两个单引号中间是一个字符串。(SQL语句中也可以使用双引号来表示字符串,但在VBA代码生成SQL语句时,为了简化格式,一律用单引号表示SQL语句内的字符串) [书名]:用[]表明书名是一个字段名、表名或查询名。使用[]的作用:①可以明确中间是一个名字而不是函数;②当字段名、表名或查询名是ACCESS或VBA保留字(如:DATE、NOTE、TYPEOF等)时,一定要用[]来标明;③当字段名、表名或查询名中包含特殊字符(如[停止/截止日期]、[查询-合计]等)时,一定要用[]来标明,否则特殊字符会被当作算术运算符而导致出错。
ME.书名:是“存书查询窗体”上文本框“书名”的值。Me.书名= Me.书名.Value。Me是对代码所在窗体的引用。
刘小军(Alex)2003-5
15