我在asp中有一个带有两个文本框的表单。如果用户在其中输入值并提交,则会按用户显示所选日期的MS访问查询数据。如果用户只留下两个文本框空白,我想显示数据库的完整输出 这是我在访问中的示例查询:
select column_date, field1, field2, sum(field3) from table1
where field1 like '*xyz' and
column_date between [@startdate] and [@enddate]
group by column_date, field1, field2
我的asp代码类似于以下内容:
objCmd.CommandText = "Query"
objCmd.CommandType = adCmdStoredProc
Set objParam = objCmd.CreateParameter("@startdate" , adInteger, adParamInput, 0, 0)
objCmd.Parameters.Append objParam
Set objParam = objCmd.CreateParameter("@enddate" , adInteger, adParamInput, 0, 0)
objCmd.Parameters.Append objParam
if request.form ("startdate") = "" Then
objCmd.Parameters ("@startdate") = 1
Else
objCmd.Parameters("@startdate") = request.form("startdate")
objCmd.Parameters("@enddate") = request.form("enddate")
End if
if request.form ("enddate") = "" Then
objCmd.Parameters ("@enddate") = 31
Else
objCmd.Parameters("@startdate") = request.form("startdate")
objCmd.Parameters("@enddate") = request.form("enddate")
End if
................
请注意我的startdate和enddates是文本数据类型,只有数字,例如1,2,3,4,5(1表示2012年7月1日,2表示2012年7月2日)
我有两个文本框名称为“startdate”和“enddate”。当用户在框中输入日期时,它会在查询的两个日期之间返回数据。如果用户留空,则显示错误。
但我想确保用户是否将两个文本框都留空,它会返回查询中的所有值。如果用户在两个文本框中的任何一个中输入单个值,则它应仅返回该日期的数据。
我不确定如何实现它。
答案 0 :(得分:1)
您遇到的一个问题是,您正在为@startdate和@enddate调用CreateParameter,但指定adInteger作为输入类型,我认为它应该是adDate。
对于您的价值问题,一种方法是在提交查询之前检查表单上的startdate和enddate的值。如果startdate为空,您可以将其默认为“魔术”日期,例如“01/01/1900”(或任何可能代表可能在您的应用程序的此字段中表示的最早日期),具有类似的“魔法” enddate的默认日期,表示最新可能代表的日期。这样,如果用户没有输入任何值,您仍将返回一些结果。您还可以添加一些验证,以确保用于捕获日期值的文本框保存 空白值或有效日期。
如何实现默认日期的示例可能如下所示:
if request.form("enddate")="" then
objCmd.Parameters("@enddate")="12/31/2099"
else
objCmd.Parameters("@enddate")=request.form("enddate")
end if
还有其他方法可以解决这个问题;这只是一个(未经测试的)例子,旨在推动正确的方向。
希望有所帮助。
答案 1 :(得分:0)
你说
“请注意我的startdate和enddates是文本数据类型,只有数字,例如1,2,3,4,5。(1表示2012年7月1日,2表示2012年7月2日,依此类推)。”
这表明日期不能小于1或大于31.您可以在日期进行一些预处理吗?
如果第一个日期为空且第二个日期为空,则“日期”应为1和31。 如果两个日期中的任何一个为空但另一个不为空,则“日期”应该彼此相等。
伪代码:
If IsNull(firstdate) Then
If IsNull(seconddate)
firstdate=1
seconddate=31
Else
firstdate=seconddate
End If
End If
If IsNull(seconddate) Then
seconddate=firstdate
End If
这会给你:
BETWEEN 1 And 31 '' All
并说,
BETWEEN 2 And 2 ''A single day