在informix 4 gl中包含具有不同在线服务器的单引号的更新表

时间:2013-10-23 15:48:39

标签: informix 4gl

大家好,我正在研究informix-4gl.my程序即将添加和更新用户信息从一个表到多个表。这些表也必须从不同的在线服务器更新。主表是在online06上工作,名为'crsell'表,其他表在online03上名为'cmpurc'表。这是一个关于我如何更新表的例子。

      ## 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, "'"  

如果有来自用户的信息包含“'”符号或单引号,例如购买者名称或用户地址。我的问题是当我更新表格时,包含单引号符号的信息不会更新到online03服务器上的'cmpurc'表。将显示错误消息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              

1 个答案:

答案 0 :(得分:0)

我相信您需要复制引号或双引号才能获得一个没有语法错误...

这个例子我没有问题就遇到了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.