2012-07-13 53 views
0

我在asp中有一個窗體,帶有兩個文本框。如果用戶在其中輸入值並提交,則會顯示來自用戶所選日期的MS訪問查詢的數據。如果用戶只是將兩個文本框留空,我想顯示數據庫的完整輸出。
這是在訪問我的樣本查詢:asp或ado命令對象中的空參數

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 
................ 

請注意我的開始日期和enddates是文本數據類型與只是數字如1,2,3,4,5(1表示2012年7月1日,2表示2012年7月2日)

我有兩個文本框名稱「startdate」和「enddate」。當用戶在框中輸入日期時,它會在查詢中的兩個日期之間返回數據。如果用戶留空,則顯示錯誤。

但我想確保用戶是否將兩個文本框留空,它將返回查詢中的所有值。如果用戶在兩個文本框中的任何一個文本框中輸入單個值,它應該僅返回該日期的數據。

我不知道我該如何實現它。

回答

0

你說

「請注意我的開始日期和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 
+0

@ Remou,謝謝。你是對的。你有我。但我不確定你想讓我把你的代碼放在「1到31之間」,「全部」。 – user1449596 2012-07-13 21:01:25

+0

我建議你在進入sql之前進行處理,然後分配值。 – Fionnuala 2012-07-13 21:02:51

+0

很多謝謝@remou。我只是跟着你的僞代碼 – user1449596 2012-07-13 21:34:21

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 

還有其他的方法,你可以解決這個問題;這僅僅是一個(未經測試的)例子,意在推動正確的方向。

希望有所幫助。

+0

Thanks.using你的祕訣,現在我可以看到,如果用戶完整的結果將兩個文本框留空。我更新了原始帖子中的代碼。 但我仍然不確定如果用戶在任何一個框中輸入日期,我如何才能檢索數據。 – user1449596 2012-07-13 20:59:00