Office中国论坛/Access中国论坛

标题: 用VBA编制Access的查询程序 [打印本页]

作者: WTM1    时间: 2002-9-25 20:59
标题: 用VBA编制Access的查询程序
在 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




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3