ColdFusion - 将表单字段插入SQL Server MONEY

时间:2009-05-08 14:14:25

标签: sql-server coldfusion

我正在尝试使用ColdFusion将表单字段中的值插入到SQL Server MONEY字段中。如果金额只是美元,或者如果美分超过12,那么插入就可以了。

但是如果分数小于12,根据抛出的错误,系统似乎在插入之前将金额转换为日期格式,而不是我要求的。然后,当然,它出错了,因为我试图在MONEY字段中插入日期。 (!)

我尝试使用类型为CF_SQL_DECIMAL的CFQUERYPARAM,但这不起作用。任何想法都将不胜感激。

这是表单代码:

<CFFORM ACTION="_execute_project_payment.cfm?action=Add" METHOD="post" NAME="FormX">
<CFOUTPUT>
<INPUT TYPE="hidden" NAME="projectID" VALUE="#projectID#">
<TR>
<TD CLASS="label" ALIGN="right" VALIGN="top">Payments:</TD>

<TD>

$<CFINPUT NAME="payment" TYPE="TEXT" VALIDATE="FLOAT" SIZE="15" REQUIRED="YES" MESSAGE="You must enter a payment amount.">&nbsp;&nbsp;&nbsp;Date:


<CFINPUT TYPE="text" name="payment_date" id="payment_date" SIZE="12" VALIDATE="DATE" REQUIRED="YES" MESSAGE="You must enter a payment date.">


<img src="cal_icon.gif" id="trigger_payment_date"
style="cursor: pointer; border: 0px;"
title="Date selector"
onmouseover="this.style.background=’red’;"
onmouseout="this.style.background=’’" />
<script type="text/javascript">
Calendar.setup({
inputField : "payment_date",
ifFormat : "%m/%d/%Y",
button : "trigger_payment_date",
align : "Tl",
singleClick : false
});
</script>


<INPUT TYPE="Submit" VALUE="Add">

<BR> 

</TD>
</TR>

</CFOUTPUT>
</CFFORM>

这是插入内容:

<CFSET paydateODBC = CreateODBCDate(FORM.payment_date)>

<CFQUERY NAME="add_project_payment" DATASOURCE="#dsource#" USERNAME="#usern#" PASSWORD="#passw#">
INSERT INTO project_payments (
                        projectID,
                        payment,
                        payment_date
                    )
            VALUES (
                        #projectID#,
                        #FORM.Payment#,
                        #paydateODBC#
                    )
</CFQUERY>

这是错误,试图输入666.10付款:

[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting datetime from character string.

The error occurred in C:\Websites\qrpqiy\toubltracker\_execute_project_payment.cfm: line 21

19 :                        #projectID#,
20 :                         #FORM.payment#,
21 :                         #paydateODBC#
22 :                    )
23 : </CFQUERY>

SQLSTATE      22007
SQL        INSERT INTO project_payments ( projectID, payment, payment_date ) VALUES ( 433, {d '0666-10-01'}, {d '2009-05-15'} )
VENDORERRORCODE       241

3 个答案:

答案 0 :(得分:3)

嗯,根据Adobe,问题是我的字段名称。显然在CF中有一个模糊的旧功能,当你还包含一个“payment_date”字段时,你可以得到像“支付”这样的字段作为日期进行评估。哎呀。我更改了字段名称,现在可以使用了。

Adob​​e的文档: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=validateData_10.html#1154690

答案 1 :(得分:2)

就个人而言,我从不在SQL中使用Money类型。如果我使用Decimal字段类型,我发现我有更好的控制程度。

答案 2 :(得分:2)

<cfqueryparam value="#theamount#" cfsqltype="cf_sql_money">

这就是我使用的东西,我从未遇到过问题。如果你可以发布你的查询和一些存根数据,这将有助于更好地确定原因。