0

こんにちは、私はinformix-4glに取り組んでいます.私のプログラムは、1つのテーブルから多くのテーブルにユーザー情報を追加して更新しようとしています.テーブルも別のオンラインサーバーから更新する必要があります.メインテーブルは「crsell」という名前のonline06で作業しています. ' テーブルと他のテーブルは、'cmpurc' テーブルという名前の online03 にあります。これは、テーブルを更新する方法の例です。

      ## 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              
4

1 に答える 1

0

構文エラーなしで引用符または二重引用符を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.
于 2013-10-23T21:18:33.460 に答える