2011-01-04 12 views
1

Ich habe dieses Formular mit allen Arten von Mitarbeiter-Zertifizierungen, ich muss ein Datum eingeben. Manchmal wird dieses Datum Monate in der Zukunft sein, zu anderen Zeiten ist das Datum nicht definiert, null.Coldfusion: Umgang mit Null-Werten im Datumsfeld

Jedes Mal, wenn ich versuche, einen Nullwert zu meinem CFC zu passieren, habe ich immer eine Fehlermeldung erhalten, die wie folgt aussieht:

Das CPRADULTEXP Argument an die Funktion übergeben addEmployee ist nicht vom Typ Datum.

Mein Formular Code:

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

Formular Prozessor:

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

jetzt ist es, dass die Null-Wert vorbei, wird die Datenbank eingestellt nulls zu handhaben/nehmen.

Wie kann ich reparieren?

+1

Eine leere Zeichenfolge "" ist kein gültiges Datum. Machen Sie das Argument cffunction optional und übergeben Sie nichts, wenn form.cprAdultExp * kein * Datum ist. – Leigh

+0

Wird der Fehler von CF (beim Verschieben in die Funktionen) oder von SQL (beim Einfügen, nachdem er von der Funktion verarbeitet wurde) ausgegeben? –

Antwort

3

Sie lassen den wichtigsten Teil - den eigentlichen CFC und die Abfrage, die die Einfügung ausführt - weg. Was passiert, ist Ihr <cfargument> Tag wird als "Datum" eingegeben, wenn Sie also eine leere Zeichenfolge übergeben, schlägt die Validierung fehl. (Dies ist einer der Gründe, warum ich meine Argumente nicht eintippe).

Sie müssen entweder die Typprüfung ausschalten oder den Argumenttyp in 'string' oder 'any' ändern. Nun, wenn Sie das tun, werden Sie auch Ihre <cfqueryparam> Tag ändern müssen (Sie sind<cfqueryparam> verwenden, nicht wahr ?!) zu so etwas wie dieses:

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

Das wird ya beheben ..

+0

Gute Antwort, obwohl ich wahrscheinlich meine Aussage eher wie 'null = "# nicht isValid (" date ", arguments.theDate) #"' machen würde. Auf diese Weise suchen Sie nach dem Datum und nicht nur nach der Leerheit. Dies macht den CFC in einer größeren Vielfalt von Situationen nützlicher. –

+1

Das funktioniert nicht, wenn die noch als 'Datum' eingegeben wird. Die Ausnahme wird weiterhin ausgelöst, wenn eine leere Zeichenfolge übergeben wird. –

+1

Ich verwende das cfargument, verwende aber kein cfqueryparam. Warum sollte/will ich cfqueryparam verwenden? –

Verwandte Themen