设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 800|回复: 0
打印 上一主题 下一主题

[查询] 用VBA编制Access的查询程序

[复制链接]
跳转到指定楼层
1#
发表于 2002-9-25 20:59:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 Access 中 ,要设计一个查询程序是十分快捷的。它提供的查询向导,可以一步步地引导程序员迅速建立查询 ,并可用 SQL 及 Design 方式查看 。另外 ,它所提供的QueryDefs 对象,则可以方便地用 VBA 编制出基于特殊要求的查询程序。
下面三个例子就是用VBA 实现查询功能的程序。
简单查询
在FORM mainFORM上定义按钮 cmd-qry-status-1,当鼠标点击按钮它时,将创建Query qry-status-1 并打开FORM frm-qry-status-1。定义FORM frm-qry-status-1 的数据源为 Query qry-status-1。
程序1:
Private Sub cmd-qry-status-1-Click()
Dim qry-tmp As QueryDef
Dim dbs-itsr As Database
Dim strsql As String
Dim stDocName As String
Dim stLinkCriteria As String
Set dbs-itsr = CurrentDb()
strsql = ″SELECT * FROM Request WHERE (((Request.Status)=1));″
For Each qry-tmp In dbs-itsr.QueryDefs
If qry-tmp.Name = ″qry-status-1″Then
dbs-itsr.QueryDefs.Delete qry-tmp.Name
End If
Next qry-tmp
Set qry-tmp = dbs-itsr.CreateQueryDef(″qry-status-1″, strsql)
On Error GoTo Err-cmd-q-y-status-1-Click
stDocName =″frm-qry-status-1″
DoCmd.OpenFORM stDocName, , , stLinkCriteria
Exit-cmd-qry-status-1-Click:
For Each qry-tmp In dbs-itsr.QueryDefs
If qry-tmp.Name =″qry-status-1″ Then
dbs-itsr.QueryDefs.Delete qry-tmp.Name
End If
Next qry-tmp
Exit Sub
Err-cmd-qry-status-1-Click:
MsgBox Err.Description
Resume Exit-cmd-qry-status-1-Click
End Sub
参数查询
当要求查询条件可以变更时,需要设计参数查询。例如,希望 Request.Status 的值
可以在执行前输入,定义一查询参数 par-status 。本例中,在FORM mainFORM 上定义
COMMAND 按钮 cmd-qry-par-status, 在其event属性的 on click 项中建立如程序2所示程序,当鼠标点击按钮 cmd-qry-par-status时,将创建Query qry-par-status 并打开Qu
ery qry-par-status。
程序2:
Private Sub cmd-qry-par-status-Click()
Dim qry-par As QueryDef
Dim dbs-itsr As Database
Dim strsql As String
Set dbs-itsr = CurrentDb()
strsql=″PARAMETERS [par-status] Long;″& _
″SELECT * FROM Request WHERE
(((Request.Status)=[par-status]));″
For Each qry-par In dbs-itsr.QueryDefs
If qry-par.Name = ″qry-par_status″ Then
dbs-itsr.QueryDefs.Delete qry-par.Name
End If
Next qry-par
Set qry-par = dbs-itsr.CreateQueryDef(″qry-par-status″, strsql)
On Error GoTo Err-cmd-qry-par-status-Click
DoCmd.OpenQuery qry-par.Name
Exit-cmd-qry-par-status-Click:
Exit Sub
Err-cmd-qry-par-status-Click:
MsgBox Err.Description
Resume Exit-cmd-qry-par-status-Click
End Sub
复杂查询
当查询条件在多个查询中共用时,如果用参数查询,则每个查询执行前需输入参数值,这样很不方便,而将此条件设计成变量则可实现复杂查询的设计。在本例中,在FORMmainFORM上定义TEXT BOX user-num,其值在查询中充当参数的作用。定义按钮cmd-qry-mul-app, 在其event属性的 on click 项中建立程序,执行时,先输入user-num 值,当鼠标点击按钮 cmd-qry-mul-app时,将创建Query qry-mul-app 并打开FORM frm-qry-mul-app。在FORM frm-qry-mul-app上定义 TEXT BOX closed-num,其数据源项填入″=[user-closed-num]″,定义FORM frm-qry-mul-app 的数据源为 Query qry-mul-app,在其event属性的 On load 项中建立如程序3所示程序(其中定义了Public变量 user-closed-num)。FORM frm-qry-mul-app 在Load 时,将创建基于qry-mul-app的查询qry-mul-app-1,并将其记录数赋予变量 user-closed-num。这样,当FORM frm-qry-mul-app 打开时,TEXT BOX closed-num 将获得要求的记录。
程序3:
Option Compare Database
Option Explicit
Public user-close-num As String
Private Sub FORM-Load()
Dim qry-mul As QueryDef
Dim dbs-itsr As Database
Dim strsql As String
Dim rstreq As Recordset
Set dbs-itsr = CurrentDb()
strsql =″SELECT * FROM qry-mul-app WHERE ((Request.Status)=1);″
For Each qry-mul In dbs-itsr.QueryDefs
If qry-mul.Name =″qry-mul-app-1″ Then
dbs-itsr.QueryDefs.Delete qry-mul.Name
End If
Next qry-mul
Set qry-mul = dbs-itsr.CreateQueryDef(″qry-mul-app-1″, strsql)
On Error GoTo Err-qry-mul-app-Click
Set rstreq = qry-mul.OpenRecordset
rstreq.MoveLast
user-close-num = rstreq.RecordCount
rstreq.Close
Exit-qry-m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-21 19:49 , Processed in 0.095496 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表