欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    ACCESS窗体查询实例91163.docx

    • 资源ID:10696097       资源大小:448.02KB        全文页数:28页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ACCESS窗体查询实例91163.docx

    1、ACCESS窗体查询实例91163一. 概述作为数据管理程序,统计和查询功能是非常重要的。否如此,就和电子表格没有区别了。所以,在每个ACCESS程序中都不可能缺少查询的功能。本文的目的是由浅入深的介绍几种最常用的利用主/子窗体来实现查询的方法,使初学者和有一定VBA根底的人可以更好的使用窗体查询这种手段。附件中的窗体“,仅包含3个数据表、1个查询和以这个查询为数据源的报表。是为了大家根据后面学习的容作练习用的。我们先看查询中的数据:书籍编号书名类别作者单价进书日期22CHIP-01-08报刊电子计算机与外部设备期刊社电子计算机与外部设备¥2001-9-2825电脑新时代-6光盘光盘UNKNO

    2、WN电脑新时代¥2002-7-827学电脑-7光盘光盘UNKNOWN人民邮电¥2002-7-1328CHIP-02-07光盘光盘电子计算机与外部设备杂志社电子计算机与外部设备¥2002-7-1316MCSE学习指南书籍Syngress Media公司人民邮电¥2001-9-2817局域网原理与架设技术幕大公开书籍蔡昌均中国青年¥2001-9-2819AccessVBA根底书籍EvanCallahan人民邮电¥2001-9-2820中文版Access2001一册通书籍琳等人民邮电¥2001-9-2821书籍SteveBrown电子工业¥2001-9-2823中文版书籍microsoft中国青年¥

    3、2001-9-2824Access中文版开发指南书籍Alison Balter人民邮电¥2002-2-1629Access 2002数据库系统开发实例导航书籍桂思强中国铁道¥2003-3-1030中国名陵集中华古代名陵之大成书籍罗哲文等百花文艺¥2003-5-2031边缘部落福音谷书籍林茨撰文摄影教育¥2003-5-20为了比拟有代表性,这个查询中包含多种字段类型:数字类型:【书籍编号】、【单价】字符类型:【书名】、【类别】、【作者】、【】日期类型:【进书日期】在多条件查询中,我们会使用除了【书籍编号】之外的其他字段作为查询条件。其实,在下面介绍的窗体查询方法中,有些代码或思路也可以应用在其它

    4、窗体查询方法中,你对各种代码、方法和思路越熟练,就越能充分发挥它们的作用。这篇文章我是从4月初开始构思,到5月中旬开始动笔,花费两周时间写成,里面包含了我对ACCESS窗体查询所积累的经验,对初学者和有一定VBA根底的人都有针对性的方法。另外,希望其他精通ACCESS的高手提出意见。二. 制作主/子窗体的步骤1. 利用向导制作主窗体现在的主窗体还太小,要已经以下步骤才能变成我们需要的主窗体如如下图:把窗体面积放大到足以容纳条件输入字段和子窗体,并调整所有控件的字体;把窗体的“记录源和各控件的“数据来源都删除很多初学者很容易犯的错误就是这里,把类别和改为组合框因为这些字段的可能值比拟少,直接选择

    5、就好,不必让用户输入;重新调整各字段的位置,并增加了两个空文本框和标签放在单价和进书日期后面因为我打算使用一个围来作查询条件,而不是一个固定的值,这样比拟符合实际;单价后面的两个文本框改名为“单价开始和“单价截止,进书日期后面的两个文本框改名为“进书日期开始和“进书日期截止;画一个矩形框包住所有查询条件,把矩形框背景设置为常规,背景色为深灰色,特殊样式为凹陷,此时矩形框覆盖了其它控件,要用菜单中“格式“置于底层才能让它们显示出来;在窗体上用向导建立一个按钮,按钮标题是“查询,名称是“cmd查询先不管里面的代码,后面再修改;窗体属性中“记录选定器否,“浏览按钮否。2. 利用向导设计子窗体在主窗体

    6、中用工具箱中的“子窗体/子报表对象建立一个子窗体;以存书查询为记录源,选择所有字段;把子窗体命名为“存书查询子窗体;在主窗体上删除子窗体的标签,并重新调整子窗体的大小;关闭主窗体的设计视图,单独打开子窗体数据表视图,调整字体和行的大小。现在,我们得到了如下的窗体:现在还没有实际的查询功能,我们在后面要根据所使用的方法,修改窗体并增加一些其他的功能。还有一些小的细节要注意,比如:按TAB键后的获得光标的控件的顺序要在设计视图下,视图菜单的“TAB键次序来修改;有些文本框获得焦点后是否要打开输入法,比如输入单价和日期的地方要关闭,输入书名和作者的地方要打开,这些要在控件属性中设置。三. 查询方法1

    7、:在查询中参加条件这种方法对应的实例数据库是:“。1. 设计查询我们打开“存书查询设计视图如下:在字段【书名】的准如此格写入:Like IIf(IsNull(Forms!存书查询窗体!书名),*,* & Forms!存书查询窗体!书名 & *)参加后的设计视图如下:把这个式子解释一下:LIKE:是专门用于查询字符型字段的运算符,一般介绍ACCESS的书中都有它的用法。ISNULL(Forms!存书查询窗体!书名):是用来判断窗体“存书查询窗体上面的“书名这个文本框是否是空的。如果文本框是空的,如此:ISNULL(Forms!存书查询窗体!书名)=TRUE真如果文本框不是空的,如此:ISNULL

    8、(Forms!存书查询窗体!书名)=FALSE假IIF(expr, truepart, falsepart)函数:expr 必要参数。用来判断真伪的表达式。 truepart 必要参数。如果 expr 为 True,如此返回这局部的值或表达式。falsepart 必要参数。如果 expr 为 False,如此返回这局部的值或表达式。所以当我们在窗体“存书查询窗体上面的“书名里写上“ACCESS,整个式子的结果是:LIKE *ACCESS*相当于查询所有书名中包含“ACCESS的书籍,这样可以实现模糊查询。Like IIf(IsNull(Forms!存书查询窗体!书名),*, Forms!存书查

    9、询窗体!书名 & *)Like IIf(IsNull(Forms!存书查询窗体!书名),*, Forms!存书查询窗体!书名)如果把准如此改为上面两句中的一句,同样情况下当我们在窗体“存书查询窗体上面的“书名里写上“ACCESS,整个式子的结果是:LIKE ACCESS*LIKE ACCESS相当于查询以“ACCESS开头的书籍半模糊查询,或者书名就叫“ACCESS的书准确查询。具体使用那一种形式的查询要根据你的实际情况来修改。当我们在窗体“存书查询窗体上面的“书名里什么也没有写,整个式子的结果是:LIKE *相当于查询所有的有书名的书。在书写查询准如此时,Forms!存书查询窗体!书名这样的

    10、窗体控件名很难写,这时你可以在准如此格点鼠标右键,选择生成器,出现如如下图的窗口:在左边的树型列表框里找到控件所在的窗体,在中间列表框出现这个窗体包含的所有控件,双击控件名,就会出现“Forms!存书查询窗体!书名。我们再把其他几个字段的查询准如此写出:【类别】:在窗体上是组合框,所以它肯定是个准确查询,跟【书名】一样,它是文本字段。查询准如此如下:Like IIf(IsNull(Forms!存书查询窗体!类别),*,Forms!存书查询窗体!类别)【作者】:跟【书名】一样,它是文本字段。我也打算用模糊查询。查询准如此如下:Like IIf(IsNull(Forms!存书查询窗体!作者),*,

    11、* & Forms!存书查询窗体!作者 & *)【】:跟【类别】的情况完全一样。查询准如此如下:Like IIf(IsNull(Forms!存书查询窗体!),*,Forms!存书查询窗体!)【单价】:是一个数字字段,我在这里准备让用户可以查询“这样的围。查询准如此如下:Between IIf(IsNull(Forms!存书查询窗体!单价开始),0,Forms!存书查询窗体!单价开始) And IIf(IsNull(Forms!存书查询窗体!单价截止),5000,Forms!存书查询窗体!单价截止)BETWEEN AND:是查询符合某个围之的值所需的条件格式。“BETWEEN 1 AND 5相当

    12、于“【字段】1 AND 【字段】5。根据前面讲解的IIF的容,我用一个表格来解释一下各种情况下这个式子的实际结果,便于大家理解:0和5000是我事先在条件中设定的最小值和最大值单价开始的值单价截止的值整个式子的实际结果空空BETWEEN 0 AND 5000空BETWEEN 1.5 AND 5000空20BETWEEN 0 AND 20【进书日期】:是一个日期型字段,我在这里准备让用户可以查询“#2001-5-1#2002-5-1#这样的围。查询准如此如下:Between (IIf(IsNull(Forms!存书查询窗体!进书日期开始),#2000-1-1#,Forms!存书查询窗体!进书日期

    13、开始) And (IIf(IsNull(Forms!存书查询窗体!进书日期截止),#2099-12-31#,Forms!存书查询窗体!进书日期截止)在这个式子中,#2000-1-1#和#2099-12-31#是我设定的两个默认的开始和截止日期。如果用户不输入,就使用默认值了。这和前面【单价】的情况是一样的。2. 设计按钮与代码2.1 查询按钮查询按钮的代码非常简单,关键局部只有一句:Private Sub cmd查询_Click() Me.存书查询子窗体.Requery 这句是关键End SubRequery:是用来重新查询控件的数据源,这样可以刷新子窗体显示的记录。对于记录源是表或查询的控件

    14、如窗体、列表框、组合框等经常用Requery方法来刷新显示容。2.2 去除按钮有了查询按钮的代码之后,大家就可以自己测试查询的效果了。不过,每次想换一个查询的条件时要去除上一个条件输入的东西,有时候比拟麻烦。我们再来设计一个去除条件的按钮,控件名称是“cmd去除,放在查询按钮的下面。按钮的代码如下:Private Sub cmd去除_Click() 下面这些控件的值要清空 Me.书名 = Null Me.类别 = Null Me.作者 = Null Me. = Null Me.单价开始 = Null Me.单价截止 = Null Me.进书日期开始 = Null Me.进书日期截止 = Nul

    15、l Me.存书查询子窗体.Requery 清空之后一样要重新查询End Sub2.3 打印按钮有了查询结果,想打印出来,很简单。由于报表的记录源就是“存书查询,所以在查询里设计的条件会直接在报表里表现出来。我们只要用按钮向导制作一个预览报表的按钮就可以了。我们把这个按钮放在子窗体下面的右边。控件名称是“cmd预览报表。由于完全是采用向导制作的,不需修改代码,所以我就不在这里列出代码了。2.4 导出EXCEL按钮如果你觉得ACCESS的报表边框太难看,或者你想在报表上加上一些说明什么的。你可能更愿意把数据导出到EXCEL里进展再加工。为了初学者容易理解,我打算用一个宏来解决这个问题。宏的设计如如

    16、下图:现在,宏里“输出文件为空,运行时会自动跳出对话框让你选择保存目录和文件名。如果你想保存在数据库所在目录下的“里,可以在“输出文件一栏里填入:=currentproject.path & 查询结果.xls把这个宏存为“导出查询数据宏。然后再在窗体里参加按钮。当按钮向导出现后,直接取消。在按钮的属性页里,先把按钮名称改为“cmd导出,在按钮的“单击事件里直接用下拉框选择“导出查询数据宏,如如下图。这样就不必编写代码了。3. 增加统计功能经常有人需要在主窗体上显示符合查询条件的记录总数,以与子窗体中某一字段的合计。所以,我们也准备在主窗体上增加记录总数和单价的合计。3.1 子窗体上的设计单独打

    17、开子窗体的设计模式,在窗体页脚局部拉出一段窗体;在上面增加两个文本框:一个是“txt计数,控件来源=Count(*),另一个是“txt单价合计,控件来源=Sum(单价);在子窗体的窗体属性中设置:浏览按钮否,记录集类型快照快照的运行速度快,占用存少,但不能编辑更新,正适合我们的需要;3.2 主窗体上的设计在子窗体下面的地方设计两个文本框“计数和“合计,把它们的标签改为“符合条件记录数:和“单价合计:;“计数文本框的控件来源=存书查询子窗体.Form.txt计数,“合计文本框的控件来源=存书查询子窗体.Form.txt单价合计;由于主窗体上的这两个文本框是自动计算的,为了区别,设置它们的是否有效

    18、否,是否锁定是,背景颜色深灰色。4. 方法总结现在,整个窗体就已经完成了。大家可以使用各种条件组合来测试一下窗体的效果。4.1 本方法优点在查询中参加条件这种方法比拟简单,只要在查询中设计好各字段的条件,那么窗体中的代码就非常少,而且在打印报表和导出数据方面也很容易设计,比拟适合初学ACCESS的人使用。4.2 本方法缺点对查询中的数据有限制,所有设计了条件的字段中必须是每条记录都有数据。即使你在窗体中并没有在这个字段对应的文本框中输入条件。举例来说,假设你在表“tb藏书情况中,把【书籍编号】=16对应的这本书的作者或单价删掉,在“存书查询窗体中,即使你不输入任何条件,【书籍编号】=16对应的

    19、这本书你也看不见。如果在某个查询组合下,子窗体上根本没有符合条件的记录,如此主窗体上的“记录数和“合计会显示“错误。如果把主窗体上的“记录数和“合计的控件来源改为:=IIf(IsError(存书查询子窗体.Form.txt计数),0,存书查询子窗体.Form.txt计数)=IIf(IsError(存书查询子窗体.Form.txt单价合计),0,存书查询子窗体.Form.txt单价合计)如此不会出现“错误,这是我在下面地址学到的:c:iknowdocsharedatacur_workaccesstopic.asp?topic_id=8183&forum_id=44报表不能直接打开,每次打开报表就

    20、会跳出提示框要求输入条件。四. 查询方法2:用VBA生成窗体筛选条件这种方法对应的实例数据库是:“。主窗体的控件与“一样,只是按钮中的代码都改了。子窗体如此完全一样。“存书查询中不需要输入任何条件。1. 按钮代码设计1.1 查询按钮本按钮代码的设计思想是根据主窗体上各个条件输入控件的值,用VBA代码生成一个条件组合的字符串作为子窗体的窗体筛选的条件。 判断【书名】条件是否有输入的值 If Not IsNull(Me.书名) Then 有输入 strWhere = strWhere & (书名 like * & Me.书名 & *) AND End If&:是字符串运算符,它和“不同之处在于“&

    21、两边如果不是字符串表达式,它会自动把表达式的值变成字符串,省了你转换格式了。(书名 like *:英文双引号是VBA用来表示字符串的符号,两个双引号中间是一个字符串。两个双引号中间什么也没有,表示一个空字符串。注意:空字符串NULL空值。所以IsNull()=False。*ACCESS*:英文单引号是SQL语句中用来表示字符串的符号,两个单引号中间是一个字符串。SQL语句中也可以使用双引号来表示字符串,但在VBA代码生成SQL语句时,为了简化格式,一律用单引号表示SQL语句的字符串书名:用明确书名是一个字段名、表名或查询名。使用的作用:可以明确中间是一个名字而不是函数;当字段名、表名或查询名是

    22、ACCESS或VBA保存字如:DATE、NOTE、TYPEOF等时,一定要用来标明;当字段名、表名或查询名中包含特殊字符如停止/截止日期、查询-合计等时,一定要用来标明,否如此特殊字符会被当作算术运算符而导致出错。Me.书名:是“存书查询窗体上文本框“书名的值。Me.书名= Me.书名.Value。Me是对代码所在窗体的引用。如果此时“存书查询窗体上文本框“书名的值是ACCESS,那么此时strWhere的结果就是:(书名 like *ACCESS*) AND 跟查询方法1中一样,我们也可以改为半模糊查询和准确查询,代码如下: strWhere = strWhere & (书名 like &

    23、Me.书名 & *) AND strWhere = strWhere & (书名 like & Me.书名 & ) AND 接着看关于【单价】的代码: 判断【单价】条件是否有输入的值,由于有【单价开始】【单价截止】两个文本框 所以要分开来考虑 If Not IsNull(Me.单价开始) Then 【单价开始】有输入 strWhere = strWhere & (单价 = & Me.单价开始 & ) AND End If If Not IsNull(Me.单价截止) Then 【单价截止】有输入 strWhere = strWhere & (单价 =“= # & Format(Me.进书日期开

    24、始, yyyy-mm-dd) & #) AND End If If Not IsNull(Me.进书日期截止) Then 【进书日期截止】有输入 strWhere = strWhere & (进书日期 = # & Format(Me.进书日期截止, yyyy-mm-dd) & #) AND End If使用Format(Me.进书日期开始, yyyy-mm-dd),而不是直接用,是因为有时候直接用的话,会因为计算机日期格式设置的不同而出现一些奇怪的问题。ACCESS中的日期条件一直都是比拟麻烦的,不管是选择查询、追加查询还是交叉表查询,设置日期字段的条件都是要特别注意的。像查询方法1中直接在查

    25、询准如此中引用控件值虽然不会出现类似问题,但交叉表查询中不能使用控件作为日期字段的条件。 先在立即窗口显示一下strWhere的值,代码调试完成后可以取消下一句 Debug.Print strWhereDebug.Print:是专门用于调试的语句,它会把后面表达式的值显示在VB编辑器的立即窗口里。在适当地地方插入Debug.Print可以检查程序运行的是否正确。等全部调试完毕后,可以把他们都删掉。 让子窗体应用窗体查询 Me.存书查询子窗体.Form.Filter = strWhere Me.存书查询子窗体.Form.FilterOn = True主窗体或单一窗体设置筛选字符串时用:Me.Fi

    26、lter= 或是 Forms!XX窗体.Filter=。 在子窗体筛选后要运行一下自编子程序CheckSubformCount() Call CheckSubformCountCheckSubformCount是一个自编的子程序,CALL是调用子程序的语句,也可以不写CALL直接用CheckSubformCount调用子程序。1.2 去除按钮代码里都有说明,只讲以下的一段代码: 根据ctl的控件类型来选择 Case acTextBox 是文本框,要清空(注意,子窗体下面还有两个锁定的文本框不能赋值) If ctl.Locked = False Then ctl.Value = Null Cas

    27、e acboBox 是组合框,也要清空 ctl.Value = Null 其它类型的控件不处理 End Select Next:意思是把当前窗体所有的控件都逐个引用一次子窗体控件的控件不算在。这种用“For Each 对象或属性 In 对象集合或属性集合的遍历方法在ACCESS编程中属于比拟常见的用法,用处也很多。比如最常见的检查窗体是否打开的代码中也有:Function IsLoaded(strFrmName As String) As Boolean 确定一个窗体是否已被装载。 Const conFormDesign = 0 Dim objForm As Form IsLoaded = F

    28、alse For Each objForm In Forms If objForm.FormName = strFrmName Then If objForm.CurrentView conFormDesign Then 窗体不是设计模式时 IsLoaded = True Exit Function 一旦找到了此窗体,就退出本函数。 End If End If NextEnd Function1.3 预览报表按钮预览报表按钮中关键是如下语句: 在打开报表的同时把子窗体的筛选条件字符串也传递给报表, 这样地话报表也会显示和子窗体一样的记录。 DoCmd.OpenReport stDoame, acPreview, , strWhere在我曾经制作的另一个例子:“打印当前记录的例子里也使用过类似的方法。这个例子可以在 .accxp./club/topic.cgi?forum=2&t


    注意事项

    本文(ACCESS窗体查询实例91163.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开