ColdFusion - вставка поля формы в SQL Server ДЕНЬГИ - PullRequest
1 голос
/ 08 мая 2009

Я пытаюсь вставить значение из поля формы в поле ДЕНЬГИ SQL Server, используя ColdFusion. Если сумма всего в долларах или центы больше 12, вставка идет нормально.

Но если сумма центов меньше 12, то, согласно сгенерированной ошибке, система конвертирует сумму денег в формат даты перед вставкой, без моего запроса об этом. И затем, конечно, он выдает ошибку, потому что я пытаюсь вставить дату в поле ДЕНЬГИ. (!)

Я пытался использовать CFQUERYPARAM с типом CF_SQL_DECIMAL, но это не сработало. Любые мысли будут с благодарностью.

Вот код формы:

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

3 голосов
/ 08 мая 2009

Ну, по словам Adobe, проблема была в именах моих полей. Очевидно, в CF есть неясная старая функция, в которой вы можете получить поле типа «оплата», которое будет оцениваться как дата, если вы также включите поле «payment_date». Argh. Я изменил имена полей, и теперь это работает.

Документы Adobe по этому вопросу: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=validateData_10.html#1154690

2 голосов
/ 08 мая 2009
<cfqueryparam value="#theamount#" cfsqltype="cf_sql_money">

это то, что я использую, и у меня никогда не было проблем. если вы можете опубликовать свой запрос и некоторые данные-заглушки, это поможет лучше определить причину.

2 голосов
/ 08 мая 2009

Лично я никогда не использую тип Money в SQL. Я нахожу, что у меня есть лучшая степень контроля, если я использую тип поля Decimal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...