2013-10-25 149 views
1

我正在致力於informix-4gl.my程序即將添加和更新從一個表到多個表的用戶信息。如果有來自用戶的信息包含「'」符號或單引號,如買方名稱或用戶地址。我的問題是當我更新表格時,包含單引號符號的信息不會更新。現在我發現必須有雙引號才能輸入值是在不同的在線服務器。現在,我打算將單引號更改爲雙引號。我試圖更改這樣的代碼,但它只讀單引號。在informix中將一個引號替換爲兩個引號

  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    

我曾試圖改變以生產雙引號quotes.the必須爲包含「'」符號報價每雙輸入了代碼。

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

以上驗證碼只會產生輸出

''

在沒有其它值。 有人的名字ceinmark曾建議「我需要創建一個4GL函數來創建報價,然後在你找到它的地方剝掉兩個字符串,然後用這兩個字符串將新的報價拼接起來。」

回答

1

Rahim,解決方案波瀾只適用於4GL代碼,不適用於Informix SQL Statement。 輕鬆這可以改寫到Informix存儲過程(但我知道作爲SP這不會解決你的問題):

MAIN 
    DEFINE p_sql varCHAR(200) 
    DEFINE p_dest varCHAR(200) 
    DEFINE i,x,z INTEGER 

    LET p_sql = arg_val(1) 

    LET x=1 
    LET p_dest='' 
    FOR i = 1 TO length(p_sql) 
    IF p_sql[i,i] = '"' THEN 
     LET p_dest=p_dest,p_sql[x,i],'"' 
     LET x=i+1 
    END IF 
    END FOR 

    LET i=length(p_sql) 
    IF x < i THEN 
    LET p_dest=p_dest,p_sql[x,i] 
    END IF 

    DISPLAY p_sql 
    DISPLAY p_dest 
END MAIN 

測試結果:

$ fglgo x "test 'one' " 
test 'one' 
test 'one' 

$ fglgo x 'test "one" ' 
test "one" 
test ""one"" 

$ fglgo x 'test "one"' 
test "one" 
test ""one"" 

$ fglgo x 'test "one" x' 
test "one" x 
test ""one"" x 
+0

謝謝你..我會嘗試! –

+0

它的作品!謝謝先生 ! –

+0

嗨Ceinmart,我想問.. 實際上LET p_sql = arg_val(1)的功能是什麼? –

相關問題