2012-09-12 29 views
0

我有一個Sybase SP,它將日期作爲唯一參數並返回有關訂單的信息。我從CF頁面上的JQuery datepicker獲取日期 - 格式爲yy-mm-dd。當沒有輸入時,SP默認爲getDate()。當我在表單上輸入日期時,一切正常。當我不發送日期 - 日期字段留空 - 我得到一個CF錯誤告訴我,該參數不是類型的日期。我知道SP正在發送日期時間值,但是如何讓CF功能識別它?JQuery日期類型,發送到CF函數的Sybase日期類型

在SP ...

declare @order_dt datetime 

If @order_dt IS NULL 
BEGIN 
SELECT @order_dt = getDate() 
END 

在CFC ...

<cfargument name="order_dt" type="date" required="true" hint="order date to search for" > 

<cfprocparam type="In" cfsqltype="CF_SQL_DATE" dbvarname="@order_dt" value="#order_dt#" null="No"> 

在.CFM頁面...

<!--JQuery datepicker --> 
<script type="text/javascript"> 
    $(function() { 
      $("#datepicker").datepicker({ dateFormat: "yy-mm-dd" }).val() 
    }); 

而且形式如下:

<form id="xxxxForm"> 
<label for="date1">Pick a Date... </label> 
<br> 
<p><input type="text" id="datepicker" value="" name="date1"></p> 
Then choose 'Search'...<br> 
<input type="submit" name="submit" value="Search"> 
<br> 
<br> 

</form> 

我怎樣才能獲得CF認識到這是一個很好的價值?我在想也許如果我宣佈@order_dt只是一個日期?

+1

如果您沒有發送日期到cfc方法,您將繼續得到該錯誤,因爲date參數是必需的,並且必須是date類型的。如果你想讓它沒有日期,那麼不要求它,並給它一個默認值,這是一個日期,以便它通過procparam檢查。 –

+0

同意。在你的''中設置'required ='false''或者使用'default =「#now()#」'。 –

+0

另外,我假設你只想要一個來自CF的日期,而不是日期時間?對於日期時間值,您需要在'' –

回答

2
> <cfargument name="order_dt" type="date" required="true" 

當您將日期字段留空時,提交的值爲空字符串「」。空字符串不是有效的date。這就是爲什麼當你嘗試和調用函數時CF會抱怨。

正如評論中所述,您可以使用required="false"default="#now()#"。但爲了使其按照您的預期工作,您必須當日期留空時省略參數。如果你將任何東西傳遞給函數,即使是一個空字符串,default也不會啓動。但驗證會。所以你仍然會得到同樣的錯誤。

另一種選擇是將參數類型更改爲string。然後在函數內部驗證。如果提供的值不是一個有效的日期,要麼now()

<cfargument name="order_dt" type="string" default=""> 

    <!--- simplistic date validation for illustration ---> 
    <cfif NOT isDate(arguments.order_dt)> 
     <cfset arguments.order_dt = now()> 
    </cfif> 

或只是通過NULL存儲過程

<cfargument name="order_dt" type="string" default=""> 
    ... 

    <cfprocparam type="In" value="#arguments.order_dt#" 
     null="#not isDate(arguments.order_dt)#" ....> 

在一個側面說明替換它,dbvarname被廢棄而回。在最近的版本中它什麼都不做。僅支持位置參數。

+0

我想我們仍然在運行CFMX7,所以也許它仍然是必要的?我現在可以很好地使用()來思考它。而且NULL可以工作,因爲我默認到SP中的getDate(),一旦它到達那裏。這從用戶的角度來看是有道理的......通常他們會想要當前的日期值。謝謝 – djailer

+0

文檔說它在MX中被棄用:*「更改了dbvarname屬性的行爲:現在所有驅動程序都忽略它,ColdFusion使用JDBC 2.2並且不支持命名參數。」*因此它可能在您的版本中也沒有任何作用。 – Leigh