0

我有一个带有两个文本框的 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
................

请注意我的开始日期和结束日期是文本数据类型,只有数字,例如 1、2、3、4、5(1 表示 2012 年 7 月 1 日,2 表示 2012 年 7 月 2 日)

我有两个文本框名称“startdate”和“enddate”。当用户在框中输入日期时,它会从查询中返回两个日期之间的数据。如果用户留空,则显示错误。

但我想确保如果用户将两个文本框都留空,它会返回查询中的所有值。如果用户在两个文本框中的任何一个中输入单个值,它应该只返回该日期的数据。

我不确定如何实现它。

4

2 回答 2

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

还有其他方法可以解决这个问题;这只是一个(未经测试的)示例,旨在推动正确的方向。

希望有帮助。

于 2012-07-13T20:31:25.710 回答
0

你说

“请注意,我的开始日期和结束日期是文本数据类型,只有数字,例如 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
于 2012-07-13T20:55:12.953 回答