2011-01-04 11 views
1

このフォームにはあらゆる種類の従業員証明書があります。日付を入力する必要があります。時には、この日付は将来の月であり、日付は未定義となります。Coldfusion:DateフィールドのNull値の扱い

私は私のCFCにnull値を渡すようにしようとするたびに、私はいつものように見えるエラーを取得:addEmployee関数に渡さ

CPRADULTEXP引数がDATE型のではありません。

マイフォームコード:

<!--- If null, set a default if not, set the default to database default ---> 
<cfif not isDefined("certificationsList.cprAdultExp")> 
<cfinput type="datefield" required="no" name="cprAdultExp" value="" > 
<cfelse> 
<cfinput type="datefield" required="no" name="cprAdultExp" value="#dateformat(certificationsList.cprAdultExp, "mm/dd/yyyy")#" > 
</cfif> 

フォーム・プロセッサ:

<!--- Is the date defined? ---> 
<cfif len(Trim("form.cprAdultExp")) EQ 0> 
<cfinvokeargument name="cprAdultExp" value="#CreateODBCDate(Form.cprAdultExp)#"> 
<cfelse> 
<cfinvokeargument name="cprAdultExp" value=""> 
</cfif>  

今、それはデータベースがnullを受け入れる/処理するように設定され、そのヌル値を渡しています。

どうすれば修正できますか?

+1

空の文字列 ""は有効な日付ではありません。 cffunction引数をオプションにし、form.cprAdultExpが日付でない場合は何も渡さない。 – Leigh

+0

CFは(関数に移動すると)CFによって、またはSQLによって(関数の処理後に挿入中に)スローされますか? –

答えて

3

実際のCFCと挿入を行うクエリのうち、最も重要な部分は除外します。あなたの<cfargument>タグは 'date'とタイプされているので、空の文字列を渡すと検証が失敗します。 (これは私の議論を入力しない理由の一つです)。

タイプチェックを無効にするか、引数タイプを 'string'または 'any'に変更する必要があります。あなたがあなたの<cfqueryparam>タグを変更することも必要がありますことを行うときに今、(あなた<cfqueryparam>を使用してている、あなたは?!ではありません)このようなものに:屋を修正します

<cfqueryparam .... null="#not len(trim(arguments.thedate))#" /> 

..

+0

良い答えですが、おそらく私のステートメントはもっと "null ="#isValid( "date"、arguments.theDate)# "'のようなものにするでしょう。そうすれば、非空白だけではなく、日々のことをチェックしています。これにより、CFCはより多様な状況でより有用になります。 –

+1

がまだ「日付」として入力されている場合、それは動作しません。空の文字列が渡された場合でも例外がスローされます。 –

+1

私はcfargumentを使用していますが、cfqueryparamを使用していません。なぜcfqueryparamを使用する必要がありますか? –

関連する問題