2

coldfusion で更新クエリを実行する際に問題が発生しています。CFSQLTYPE CF_SQL_NUMERIC の無効なデータ '' というエラーが表示されます。エラーの前に出力したので、データが数値であることはわかっていますが、正しいです。変数を次のように設定します。

<cfset itemID = FORM.itemID * 1> <!--- The * 1 is to force a numeric operation, and
therefore a numeric datatype, and like I said, it outputs right. --->

<!--- This is the line (45) the error says is bad --->
WHERE itemid = <cfqueryparam value="#itemID#" cfsqltype="CF_SQL_NUMERIC">

奇妙なことに、cfqueryparam を varchar に変更しても、同じエラーが発生します。

WHERE itemid = <cfqueryparam value="#itemID#" cfsqltype="CF_SQL_VARCHAR">

さらに奇妙なことに、cfqueryparam を完全に削除して数字を使用すると、BEFORE (44) という行が今は悪いという新しいエラーが表示されます。

WHERE itemid = 20072 <!--- Changing to this produces a new error on the line before --->

<!--- Line 44, which is also using a cfqueryparam numeric. This new error is the same
as before, but on line 44 now instead of 45. --->
min_qty = <cfqueryparam value="#FORM.itemMinQuantity#" cfsqltype="CF_SQL_NUMERIC">

何が起こっているのか分かりますか?

さらにコードを編集...

<cfquery name="qUpdateItem" datasource="#thedb#">
UPDATE items_something
SET
    itemdesc = <cfqueryparam value="#FORM.itemDescription#" cfsqltype="CF_SQL_VARCHAR">,
    room = <cfqueryparam value="#FORM.itemRoom#" cfsqltype="CF_SQL_VARCHAR">,
    value = <cfqueryparam value="#FORM.itemValue#" cfsqltype="CF_SQL_NUMERIC">,
    categoryid = <cfqueryparam value="#FORM.categoryID#" cfsqltype="CF_SQL_NUMERIC">,
    keywords = <cfqueryparam value="#FORM.itemKeywords#" cfsqltype="CF_SQL_VARCHAR">,
    manufact = <cfqueryparam value="#FORM.itemManufacturer#" cfsqltype="CF_SQL_VARCHAR">,
    partno = <cfqueryparam value="#FORM.itemPartNumber#" cfsqltype="CF_SQL_VARCHAR">,
    itemtitle = <cfqueryparam value="#FORM.itemTitle#" cfsqltype="CF_SQL_VARCHAR">,
    qty = <cfqueryparam value="#FORM.itemQty#" cfsqltype="CF_SQL_NUMERIC">,
    assembly_draw_no = <cfqueryparam value="#FORM.itemAssemblyDrawingNo#" cfsqltype="CF_SQL_NUMERIC">,
    bin = <cfqueryparam value="#FORM.itemBin#" cfsqltype="CF_SQL_VARCHAR">,
    shelf = <cfqueryparam value="#FORM.itemShelf#" cfsqltype="CF_SQL_VARCHAR">,
    min_qty = <cfqueryparam value="#FORM.itemMinQuantity#" cfsqltype="CF_SQL_NUMERIC">
WHERE itemid = <cfqueryparam value="#itemID#" cfsqltype="CF_SQL_NUMERIC">

4

1 に答える 1

2

この問題は、queryparam とは関係がない可能性があります。実行中のステートメントの最後の行での Oracle エラー (通常、where、group by、または order by 句)。ORA- エラーとテーブル定義を指定すると、それが役立ちます。

しかし、エラーはおそらく queryparam とはまったく関係がありません。他に何かあります (結合内の同一の列 (たとえば、クエリ内の 2 つのテーブルの ID 列)、カンマの欠落など)。

編集:

cfqueryparamヘルプ ページのテキストに基づいて、CF_SQL_FLOAT または CF_SQL_DECIMAL を試してみることをお勧めします。CF_SQL_NUMERIC は Oracle と直接関係があるようには見えないからです。他の列も確認できます。これで説明がつくかどうかはわかりませんが、過去にこれを見たことを覚えているようです。

于 2012-08-13T15:09:19.260 に答える