обновить таблицу, содержащую символ одинарной кавычки, с другим онлайн-сервером в informix 4 gl

Привет всем, я работаю над informix-4gl. Мои программы собираются добавлять и обновлять информацию о пользователях из одной таблицы во многие таблицы. Таблицы также должны обновляться с другого онлайн-сервера. Основные таблицы работают в онлайн-режиме06 Таблица с именем «crsell», а другие таблицы находятся в таблице с именем «cmpurc» в сети03. Это пример того, как я обновляю таблицы.

      ## update CMPURC with latest purchaser info ##                       
      LET ins_01 = NULL                                                    
      LET ins_01 = "UPDATE bfs@", link_onln_no CLIPPED, ":cmpurc",         
                   " SET cmp_purc_num = ", "'", p_cm_purc_num,             
                   "'",",",                                                
                   " cmp_purc_nme = ", "'",p_cmp_purc_nme,                 
                   "'",",",                                                
                   " cmp_addr_1 = ", "'",p_cmp_addr_1, "'",",",            
                   " cmp_addr_2 = ", "'",p_cmp_addr_2, "'",",",            
                   " cmp_addr_3 = ", "'",p_cmp_addr_3, "'",                
                   " WHERE cmp_proj_cde = ", "'", p_crsell.crse_proj_cde,  
                   "'",                                                    
                   "   AND cmp_phase_num = ", "'", p_crsell.crse_phase_num,
                   "'",                                                    
                   " AND cmp_lot_num = ", "'", p_crsell.crse_lot_num, "'"  

В случае, если была информация от пользователя, которая содержит символ "'" или одинарную кавычку, такую ​​как имя покупателя или адрес пользователя. Моя проблема заключается в том, что когда я обновляю таблицы, информация, содержащая символы одинарной кавычки, не будет обновлена ​​до Таблицы cmpurc на сервере online03. появится сообщение об ошибке SQL-оператора с номером ошибки -201.

Я попытался преобразовать символ "'" в другой символ "^" и обновить таблицы. Затем я снова обновляю таблицу "cmpurc" информацией, содержащей символы "'". Этот шаг также приводит к ошибке. .Это способ преобразования символа.

  LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)    
FOR a = 1 TO rmks_lgth                          
  IF p_crsell.crse_purc_nme[a] = "'" THEN       
    LET p_crsell.crse_purc_nme[a] = "^"        
  END IF                                        
END FOR              

преобразовать обратно в одинарные кавычки

LET rmks_lgth = LENGTH(p_cmp_purc_nme)    
FOR a = 1 TO rmks_lgth                    
  IF p_cmp_purc_nme[a] = "^" THEN         
    LET p_cmp_purc_nme[a] = "'"           
  END IF                                  
END FOR                                   

Я проверил, заменив символ "'" другими значениями, и это не привело к ошибке. Ошибка возникает только тогда, когда символ «'» переносится из таблицы «crsell» в «cmpurc». Я надеюсь, что кто-то может помочь мне решить мои проблемы. Мне жаль, если не хватает информации, которую я дал вы, потому что я не могу опубликовать изображение из-за отсутствия репутации, и я новый пользователь. Я очень признателен, если вы все можете помочь мне решить проблемы. большое спасибо

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

      LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)    
  FOR a = 1 TO rmks_lgth                          
    IF p_crsell.crse_purc_nme[a] = "'" THEN       
     LET p_crsell.crse_purc_nme[a] = "''"        
   END IF                                        
  END FOR              

person Rahim Jaafar    schedule 23.10.2013    source источник
comment
Это пример отображения вывода, которое выдает ошибку при запуске программ. ins_01 UPDATE bfs@onlinet03:cmpurc SET cmp_purc_num = '2411', cmp_purc_nme = 'ИМЯ ПОКУПАТЕЛЯ'', cmp_addr_1 = 'АДРЕС 1'', cmp_addr_2 = 'АДРЕС 2' ', cmp_addr_3 = 'АДРЕС 3'' ГДЕ cmp_proj_cde BE 'И cmp_phase_num = '1' И cmp_lot_num = 'A1001'   -  person Rahim Jaafar    schedule 23.10.2013


Ответы (1)


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

В этом примере я запускаю dbaccess без проблем, я не тестирую код 4gl...

create temp table tp01( desc char(20), desc2 char(20) ) ;
Temporary table created.

insert into tp01 values ( "tst""1", "tst'");
1 row(s) inserted.

insert into tp01 values ( 'tst''1', 'tst"');
1 row(s) inserted.

select * from tp01;
desc                 desc2
tst"1                tst'
tst'1                tst"

2 row(s) retrieved.
person ceinmart    schedule 23.10.2013
comment
Я пытался удвоить кавычки раньше, но я не уверен, правильно ли я поставил или нет, это все еще ошибка. Этот символ может переноситься в другие таблицы, но единственные таблицы cmpurc на другом онлайн-сервере вызовут ошибку. - person Rahim Jaafar; 24.10.2013
comment
Привет, Рахим, хорошо, в этом случае отметьте ответ как приемлемый, только если он действительно работает? Вы можете протестировать эти обновления вручную с помощью dbaccess? чтобы убедиться, что это своего рода ограничение на сервер, как вы сказали. Протестируйте ситуацию при использовании в 4GL, подключитесь к основной базе данных, затем попробуйте выполнить удаленное обновление. Если возникает синтаксическая ошибка, попросите вашего администратора баз данных проверить удаленную сессию с onstat -g ses и посмотреть, как там появляется оператор SQL. - person ceinmart; 24.10.2013
comment
хорошо, спасибо .. Я попытался ввести информацию о пользователе, используя двойные кавычки, и ошибки не было. Но теперь я думаю о том, как сделать «одинарные кавычки» двойными кавычками. - person Rahim Jaafar; 24.10.2013
comment
Вам нужно будет создать функцию 4GL, чтобы найти цитату, затем разделить строку на две части в том месте, где вы ее нашли, и объединить новую цитату с этими двумя частями строки. Это уникальная идея, которая стала для меня сейчас. - person ceinmart; 24.10.2013
comment
Можете ли вы показать пример того, как разделить строку на две строки и объединить новую цитату? - person Rahim Jaafar; 25.10.2013
comment
Я привел пример на другой вопрос, который вы сделали. - person ceinmart; 25.10.2013