2015-03-20 1 views
-2

Данные выбираются из одной таблицы и вставляются в другую таблицу. Эти данные являются ключевыми для первой таблицы, но являются внешним ключом ко второй таблице. Используя cfquery, выберите и вставьте работы без каких-либо проблем. Но когда эти данные содержат более одного пространства, например, "XXX ZZZ" (есть три пространства в середине), я получу ошибку внешнего ключа при вставке данных. Используя db2, ошибка равна -530.Как сохранить пробелы при выполнении вставки в cfquery?

Я создал запись с 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," ","&nbsp;","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," ","&nbsp;","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 Error: SQLCODE = -530, SQLSTATE = 23503, SQLERRMC = category1, ВОДИТЕЛЬ = 3.63.123

Обновление от комментариев:

Я попробовал, добавив это, но не сделал этого:

<cfqueryparam cfsqltype="cf_sql_char" value="#form.category#"> 
+3

, пожалуйста, обратите внимание на вопрос, который задает вопрос – Vikrant

+1

. Я понятия не имею, что вы просите. –

+3

Нам нужно увидеть код. Если он использует переменные, укажите образцы значений, которые вы пытаетесь вставить, и полное сообщение об ошибке. Также публикация [DDL] (https://en.wikipedia.org/wiki/Data_Definition_Language) (только соответствующие поля) не повредит. – Leigh

ответ

-1

Эй bs2009, насколько что вы описали в своем вопросе, похоже, что проблема связана с размером вашего Внешнего ключа. Проверьте, есть ли внешний стол во второй таблице того же размера, что и Первичный ключ в первой таблице. Для примера. если ваш первичный ключ в первой таблице определяется как CHARACTER(10), тогда внешний ключ во второй таблице также должен быть определен как CHARACTER(10).

+0

Код ошибки указывает, в чем проблема - «Операция вставки или обновления пыталась поместить значение во внешний ключ таблицы объектов; однако это значение не было равно некоторому значению родительского ключа родительской таблицы. ' от https://www-304.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.codes/src/tpc/n530.dita –

+0

[Scott Stroz] (/ users/789209/scott -stroz). Если вы прочтете первый абзац своего вопроса, он ясно упомянул, что он получает ошибку при размещении большего количества этого пробела между символами и что данные не вставлены. Он получает ошибку внешнего ключа. – Pankaj

+0

@ Pankaj, а не проблема размера, он отлично работает, если значение данных имеет не более одного пробела в нем. И никогда не работайте, когда у него больше одного пространства, соединенного вместе. – BS2009

Смежные вопросы