从一个表中选择数据并将其插入另一个表中。这个数据碰巧是第一个表的关键,但是第二个表的外键。使用cfquery
,选择并插入工作没有任何问题。但是当这些数据碰巧包含多个空格时,例如"XXX ZZZ"
(中间有三个空格),插入数据时会出现外键错误。使用db2,错误是-530。
我创建了一个包含2个空格,同样错误的记录。创建了一个空格,没有错误。这似乎证明,当使用cfquery插入时,ColdFusion会保留一个空格,并删除任何其他空格(如果存在)。
我甚至尝试使用replace(data," "," ","all")
或chr(32)
来替换空间,但仍然没有运气通过多个空间并成功插入。
希望你们能帮忙解决这个问题。谢谢!
<cfquery name="GetCategories" datasource="#DbSource#" username = "#DbUserId#" password = "#DbUserPswd#">
SELECT category, rtrim(category) as tcategory
FROM role_category
ORDER BY category
FOR FETCH ONLY
</cfquery>
Populate dropdown, tried following 3 ways, neither works
1
<select name="category" id="category" size = "4" onChange="someFunction();">
<cfoutput query="GetCategories">
<option value ="#category#" >#category#</option>
</cfoutput>
</select>
2
<select name="category" id="category" size = "4" onChange="someFunction();">
<cfoutput query="GetCategories">
<cfset cat = replace(GetCategories.category," "," ","all")>
<option value ="#cat#" >#cat#</option>
</cfoutput>
</select>
3
<select name="category" id="category" size = "4" onChange="someFunction();">
<cfoutput query="GetCategories">
<cfset tcat = replace(GetCategories.tcategory," "," ","all")>
<option value ="#tcat#" >#tcat#</option>
</cfoutput>
</select>
in the action file:
<cfquery name="InsertUserRole" datasource="#DbSource#" username = "#DbUserId#" password = "#DbUserPswd#">
INSERT INTO role(role,desc, category)
VALUES ('#_role#','#form.desc#','#form.category#')
</cfquery>
来自Coldfusion的错误消息是: DB2 SQL错误:SQLCODE = -530,SQLSTATE = 23503,SQLERRMC = CATEGORY1,DRIVER = 3.63.123
从评论中更新:
我尝试添加这个,但是没有这样做:
<cfqueryparam cfsqltype="cf_sql_char" value="#form.category#">
答案 0 :(得分:-1)
嘿bs2009,就您在问题中描述的内容而言,问题似乎与外键的大小有关。请检查第二个表中的外键是否与第一个表中的主键大小相同。
例如。如果第一个表中的主键定义为CHARACTER(10)
,则第二个表中的外键也应定义为CHARACTER(10)
。