我目前正在研究一个应该是一个相对简单的数据库,这个数据库非常接近于它,直到我遇到了不可避免的问题。
我使用全局变量和表单来收集参数以传递到查询的Criteria部分,这对前两个工作正常,它们是基本的字符串和整数。
只要您从DatePicker中选择了一个输入查询的日期,那么日期就会起作用。
例如,如果查询字段占用6/1 / 2014,6 / 3/2014和6/8/2014,并且选择了日期6/5/2014,则表单将崩溃并变为空白,但如果您选择2014年6月8日,那么它将继续进行。
我曾尝试过各种不同形式的代码,但最简单的形式是:
Between Get_Global('GBL_Start_Date_ID') AND Get_Global('GBL_End_Date_ID')
我不确定是否应该根据查询中输入的值限制DatePicker,或者是否有更强大的解决方法,或者我只是完全错过了一个简单的复选框
修改
我的全局变量代码如下所示:
Option Compare Database
Global GBL_Start_Date_ID As Date
Global GBL_End_Date_ID As Date
Global GBL_Customer_ID As Long
Global GBL_Engineer_ID As Long
Public Function Init_Globals()
GBL_Start_Date_ID = #6/1/2014#
GBL_End_Date_ID = #6/30/2014#
GBL_Customer_ID = 1
GBL_Engineer_ID = 1
End Function
Public Function Get_Global(gbl_parm)
Select Case gbl_parm
Case "GBL_Customer_ID"
Get_Global = GBL_Customer_ID
Case "GBL_Engineer_ID"
Get_Global = GBL_Engineer_ID
Case "GBL_Start_Date_ID"
Get_Global = GBL_Start_Date_ID
Case "GBL_End_Date_ID"
Get_Global = GBL_End_Date_ID
End Select
End Function
我只是在ComboBoxes和TextBoxes的AfterUpdate事件中添加一个简单的行来分配变量:
GBL_Engineer_ID = Me.EngineerSelection
提前致谢,
亚伦
答案 0 :(得分:0)
你可以做两件事。修复查询,或使其更加健壮。
以书面形式修复
Between "#" & Get_Global('GBL_Start_Date_ID') & "#" AND "#" & Get_Global('GBL_End_Date_ID') & "#"
OR
更改Get_Global
功能
Public Function Get_Global(gbl_parm)
Select Case gbl_parm
Case "GBL_Customer_ID"
Get_Global = GBL_Customer_ID
Case "GBL_Engineer_ID"
Get_Global = GBL_Engineer_ID
Case "GBL_Start_Date_ID"
Get_Global = "#" & GBL_Start_Date_ID & "#"
Case "GBL_End_Date_ID"
Get_Global = "#" & GBL_End_Date_ID & "#"
End Select
End Function
您在创建日期时使用GBL_Start_Date_ID
正确指定GBL_End_Date_ID
和#
的值是日期,但是当您在查询中使用它们时,它们会在没有它们的情况下显示。您可以通过在即时窗口中键入?#1/1/2014#
向自己证明这是正在发生的事情。日期打印为1/1/2014
,当您在查询中使用时,Between 6/1/2014 AND 6/30/2014
会出现语法错误。
为了使事情变得更好,您需要参数化查询的这一部分。改变这个
Between Get_Global('GBL_Start_Date_ID') AND Get_Global('GBL_End_Date_ID')
到这个
Between pStartDate AND pEndDate
在调用查询之前,您需要进行常规检查:这些是否为null?是pStartDate
< pEndDate
?
通过执行这些检查并对其进行参数化,您可以确保永远不会得到这样的查询。调用查询意味着您需要使用DAO或ADO填充参数。
Between AND