ACCESS 交叉查询 中Between and 窗体上的时间问题?
情况是这样的,交叉表查询可以让字段值进行纵向与横向组合汇总展示,其效果类似EXCEL的数据透视表。交叉表查询不属于严格意义上的SQL查询,受其背后算法实现上的限制,ACCESS数据库Jet引擎无法在含有Transform语句的SQL交叉表查询中直接识别对“窗体控件值的引用”。
如果需要在交叉表查询中引用窗体控件值,可以使用两种办法来予以实现。
一种是用VBA代码动态拼写Transform SQL交叉表查询语句,将窗体控件中的具体值引入到查询语句中从而规避数据库引擎无法识别窗体控件引用的限制。这种方法的弹性很高,但是编程量比较大且来得复杂,除了要解决SQL语句的拼接问题外,更加麻烦的是要解决查询结果集的展示与输出问题。
另一种方法是编写全局自定义函数,通过相关自定义函数读取相应的窗体控件值,而在交叉表查询中引用该等全局自定义函数,从而迂回实现在交叉表查询中引用窗体控件中的值。这种办法相对简单,缺点是比较死板。下面提供这种办法的具体方案供大家参考:
1) 创建一个模块,取名“模块1”,在该模块下编写下列两个全局自定义函数
Public Function TimeBegin() As Date
TimeBegin = Forms!时间测试个数统计!起始日期
End Function
Public Function TimeEnd() As Date
TimeEnd = Forms!时间测试个数统计!结束日期
End Function
保存模块的有关设计;
2)在相关的交叉表查询设计视图中的字段“送样时间”的条件栏填写
Between TimeBegin() and TimeEnd()
也就是分别用全局自定义函数"TimeBegin() "和 "TimeEnd()"替代对窗体控件"Forms!时间测试个数统计!起始日期"和"Forms!时间测试个数统计!结束日期"的引用。
请保存有关交叉表查询设计
注意:运行该交叉表查询前,窗体“时间测试个数统计”必须打开且文本框“起始日期
”和“结束日期”必须填写了正确的日期