Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 一个先进先出计算出库成本的..
  • Access算出每个月的天..
  • 给代码回把“锁”
  • 文本框判断是否录入连续四个..
  • Access取混合字符串的..
  • VB程序中实现字节移位操作

最新文章

  • Access或VB VBA..
  • 关于VBA的0、""(空字..
  • Access导出函数Out..
  • Access日期与日期区间..
  • RecordSource ..
  • Access子窗体事件控制..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > VBA基础
VBA基础

ACCESS-VBA编程 第六章 ACCESS查询1

分段统计人数
这样一个表 tblScore:
班级 姓名 总分 语文 数学
1班 a 601 108 120
2班 b 589 112 133
3班 C 551 98 145
2班 D 502 80 124
1班 E 508 90 85
3班 F 561 97 135
TRANSFORM Count(tblScore.总分) AS 总分OfCount
Select tblScore.班级
FROM tblScore
GROUP BY tblScore.班级
PIVOT Switch([总分]>=600,">=600",[总分]>=550 And [总分]<600,"550-599",[总分]>=500 And [总分]<550,"500-549",True,"Other") In (">=600","550-599","500-549","Other");
可得到第一個查詢
班级 总分600分以上人数 总分550-600人数 总分550以下人数
1班 1 0 1
2班 0 1 1
3班 0 2 0
用代码在access中生成永久查询
来源:竹笛整理的技巧集
dim strSQL as string
dim qdf as QueryDef
strSQL = "Select * from tblaa" 'tblaa为表
Set qdf = CurrentDb.CreateQueryDef("创建的查询", strSQL)
DoCmd.OpenQuery qdf.Name
用代码删除一个已存在的查询
来源:爱赛思应用俱乐部 wxjgw
Dim Query1 As QueryDef
CurrentDb.QueryDefs.Refresh
For Each Query1 In CurrentDb.QueryDefs
If Query1.Name = "想要删除的查询名称" Then
CurrentDb.QueryDefs.Delete Query1.Name

Exit For
End If
Next Query1
使用ADO和SQL语句建立一个新查询

Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command
Set cat.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "Select * FROM 表1"
cat.Views.Append "newView", cmd
以窗体的文体框为条件进行模糊查询时查询的设计视图中准则:
Like IIf(IsNull([Forms]![存书查询窗体]![作者]),'*','*' & [Forms]![存书查询窗体]![作者] & '*')
用VBA代码生成一个条件组合的字符串作为子窗体的窗体筛选的条件来实现窗体的多条件查询。
Option Compare Database

'由浅入深的介绍几种最常用的利用主/子窗体来实现查询的方法,
'使初学者和有一定VBA基础的人可以更好的使用窗体查询这种手段。
'
'本例程是讲解用VBA代码生成一个条件组合的字符串作为子窗体的
'窗体筛选的条件来实现窗体的多条件查询。
'

Private Sub cmd查询_Click()
On Error GoTo Err_cmd查询_Click
Dim strWhere As String '定义条件字符串
strWhere = "" '设定初始值-空字符串
'判断【书名】条件是否有输入的值
If Not IsNull(Me.书名) Then
'有输入
strWhere = strWhere & "([书名] like '*" & Me.书名 & "*') AND "
End If
'判断【类别】条件是否有输入的值
If Not IsNull(Me.类别) Then
'有输入
strWhere = strWhere & "([类别] like '" & Me.类别 & "') AND "
End If
'判断【作者】条件是否有输入的值
If Not IsNull(Me.作者) Then
'有输入
strWhere = strWhere & "([作者] like '*" & Me.作者 & "*') AND "
End If
'判断【出版社】条件是否有输入的值

If Not IsNull(Me.出版社) Then
'有输入
strWhere = strWhere & "([出版社] like '" & Me.出版社 & "') AND "
End If
'判断【单价】条件是否有输入的值,由于有【单价开始】【单价截止】两个文本框
'所以要分开来考虑
If Not IsNull(Me.单价开始) Then
'【单价开始】有输入
strWhere = strWhere & "([单价] >= " & Me.单价开始 & ") AND "
End If
If Not IsNull(Me.单价截止) Then
'【单价截止】有输入
strWhere = strWhere & "([单价] <= " & Me.单价截止 & ") AND "
End If
'判断【进书日期】条件是否有输入的值,由于有【进书日期开始】【进书日期截止】两个文本框
'所以要分开来考虑
If Not IsNull(Me.进书日期开始) Then
'【进书日期开始】有输入
strWhere = strWhere & "([进书日期] >= #" & Format(Me.进书日期开始, "yyyy-mm-dd") & "#) AND "
End If
If Not IsNull(Me.进书日期截止) Then
'【进书日期截止】有输入
strWhere = strWhere & "([进书日期] <= #" & Format(Me.进书日期截止, "yyyy-mm-dd") & "#) AND "
End If
'如果输入了条件,那么strWhere的最后肯定有" AND ",这是我们不需要的,
'要用LEFT函数截掉这5个字符。
If Len(strWhere) > 0 Then
'有输入条件
strWhere = Left(strWhere, Len(strWhere) - 5)
End If
'先在立即窗口显示一下strWhere的值,代码调试完成后可以取消下一句
Debug.Print strWhere
'让子窗体应用窗体查询
Me.存书查询子窗体.Form.Filter = strWhere
Me.存书查询子窗体.Form.FilterOn = True
'在子窗体筛选后要运行一下自编子程序CheckSubformCount()
Call CheckSubformCount
Exit_cmd查询_Click:
Exit Sub
Err_cmd查询_Click:
MsgBox Err.Description

Resume Exit_cmd查询_Click
End Sub
Private Sub cmd导出_Click()
On Error GoTo Err_cmd导出_Click

'这里将使用DAO来改变查询的SQL语句,必须先在“工具”→“引用”中选择
'Microsoft DAO 3.6 Object Library.
'================================
Dim qdf As DAO.QueryDef 'qdf被定义为一个查询定义对象
Dim strWhere, strSQL As String
strWhere = Me.存书查询子窗体.Form.Filter
If strWhere = "" Then
'没有条件
strSQL = "Select * FROM [存书查询]"
Else
'有条件
strSQL = "Select * FROM [存书查询] Where " & strWhere
End If
Set qdf = CurrentDb.QueryDefs("查询结果")
qdf.SQL = strSQL
qdf.Close
Set qdf = Nothing
DoCmd.OutputTo acOutputQuery, "查询结果", acFormatXLS, , True
Exit_cmd导出_Click:
Exit Sub
Err_cmd导出_Click:
MsgBox Err.Description
Resume Exit_cmd导出_Click
End Sub
Private Sub cmd清除_Click()
On Error GoTo Err_cmd清除_Click

'这里将使用FOR EACH CONTROL的方法来清除控件的值
'这在控件比较多的时候非常有用。
'================================
Dim ctl As Control
For Each ctl In Me.Controls
'根据ctl的控件类型来选择
Select Case ctl.ControlType
Case acTextBox '是文本框,要清空(注意,子窗体下面还有两个锁定的文本框不能赋值)
If ctl.Locked = False Then ctl.Value = Null
Case acComboBox '是组合框,也要清空
ctl.Value = Null
'其它类型的控件不处理
End Select
Next
'取消子窗体的筛选
Me.存书查询子窗体.Form.Filter = ""
Me.存书查询子窗体.Form.FilterOn = False
'在子窗体取消筛选后要运行一下自编子程序CheckSubformCount()
Call CheckSubformCount
Exit_cmd清除_Click:
Exit Sub
Err_cmd清除_Click:
MsgBox Err.Description
Resume Exit_cmd清除_Click
End Sub
Private Sub cmd预览报表_Click()
On Error GoTo Err_cmd预览报表_Click
Dim stDocName, strWhere As String
stDocName = "藏书情况报表"
strWhere = Me.存书查询子窗体.Form.Filter
'在打开报表的同时把子窗体的筛选条件字符串也传递给报表,
'这样地话报表也会显示和子窗体相同的记录。
DoCmd.OpenReport stDocName, acPreview, , strWhere
Exit_cmd预览报表_Click:
Exit Sub
Err_cmd预览报表_Click:
MsgBox Err.Description
Resume Exit_cmd预览报表_Click
End Sub
Private Sub CheckSubformCount()

'这是一个自编子程序,专门用来检查子窗体上的记录数,
'以便修改主窗体上的“计数”和“合计”的控件来源,
'以防止出现“#错误”。
'================================
If Me.存书查询子窗体.Form.Recordset.RecordCount > 0 Then
'子窗体的记录数>0
Me.计数.ControlSource = "=[存书查询子窗体].[Form].[txt计数]"

Me.合计.ControlSource = "=[存书查询子窗体].[Form].[txt单价合计]"
Else
'子窗体的记录数=0
Me.计数.ControlSource = "=0"
Me.合计.ControlSource = "=0"
End If
End Sub


(界面_窗体_子窗体-相关文章技巧链接):
[原创]Access窗体多条件复合查询[源码]
发布人:网络文章  
分享到:
点击次数:  更新时间:2009-02-26 14:29:31  【打印此页】  【关闭】
上一条:ACCESS-VBA编程 第六章 ACCESS 查询2  下一条:ACCESS-VBA编程 第五章 ACCESS 表2



相关文章

  • • Access或VB VBA判断数组的值是否为空的几种方法
  • • 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别
  • • Access导出函数OutPutto解释
  • • Access日期与日期区间的筛选
  • • RecordSource SourceObject ControlSource属性的区别
  • • Access子窗体事件控制父窗体
  • • 事件​change和AfterUpdate的区别
  • • 代码修改完善方法示例(初学者必读)

热门文章

  • [2013-09-14] access数据集recordset打开的各个参数说明access数据库
  • [2009-05-08] VBA语句集400句(4部分)access数据库
  • [2005-06-09] Access如何判断字符串中包含双字节字符access数据库
  • [2009-05-15] Access报表补空行另类打印方法access数据库
  • [2017-06-16] 代码修改完善方法示例(初学者必读)access数据库
  • [2004-02-01] 如何判断日期处在第几周access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn