上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 46 樓
|
發表於: 星期三 九月 16, 2009 2:51 pm 文章主題: |
|
|
這兩天我試出了比較暫時的解決方法了!
當使用者在輸完按儲存時,我在這個字串前面加個特殊字元(目前試用'(單引號)及*(星號)這兩個),
儲存完是ok的!
在讀出時,判斷若第一個字元是這個特殊字元(我後來是用*號)
則取其substr(str1,2,len(str1)-1)置入editbox欄位!
這樣就完全不會當了耶!
真是太吊詭了!!
不過能暫時解決這個當機問題,我也對使用者有個交代!
而且使用端不會發覺任何異狀,
謝謝各位的協助,
Saint兄,可否將google中查到問題的網址貼給我,我之前有Google找過,但沒有看到相同的問題討論,
謝啦! |
|
回頂端 |
|
|
saint
註冊時間: 2003-07-14 文章: 211
第 47 樓
|
發表於: 星期二 九月 22, 2009 9:52 am 文章主題: |
|
|
你點選我那個..SP1 那就是超連結啦..^_^ 能解決就好.. |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 48 樓
|
發表於: 星期二 九月 22, 2009 10:39 am 文章主題: |
|
|
saint 寫到: | 你點選我那個..SP1 那就是超連結啦..^_^ 能解決就好.. |
嗯!當初我在測試英文內容時,我有貼到9000以上個字母,並沒有遇到當機狀況,
所以直覺認為是中文字碼的問題!
感覺上狀況有些不大一樣!
謝謝你及其他狐友這段時間的幫忙~~ |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 49 樓
|
發表於: 星期三 三月 09, 2011 2:30 pm 文章主題: |
|
|
經過了這一段時間,這個問題其實還是偶爾會發生,共通點都是,這個editbox型態的欄位的字數超過2000個中文字。但最近我想到了一個可能性,因為我作了一個快速選單(ShortCut),讓使用者在editbok欄位按右鍵可以複製及貼上文字,有些同仁會先在Word編輯再貼到editbok物件上,會不會是從Word複製過來的資料有什麼奇怪的碼導致的? |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 50 樓
|
發表於: 星期三 三月 09, 2011 3:24 pm 文章主題: |
|
|
是不是試試看在SQLUPDATE之前
將EDITBOX的資料先存到CURSOR裡面查看看到底有沒有怪字元
另外再用CURSOR的資料用迴圈分次SQLUPDATE試試看 |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 51 樓
|
發表於: 星期三 三月 09, 2011 5:10 pm 文章主題: |
|
|
LiuRambo 寫到: | 是不是試試看在SQLUPDATE之前
將EDITBOX的資料先存到CURSOR裡面查看看到底有沒有怪字元
另外再用CURSOR的資料用迴圈分次SQLUPDATE試試看 |
您是指將editbox的內容值拆成數份,分次存入嗎?
如果我在cursor中看起來是正常的,會不會有看不到的隱藏字元,該如何檢查呢? |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 52 樓
|
發表於: 星期三 三月 09, 2011 10:04 pm 文章主題: |
|
|
我是這樣想
為了測試釐清到底是字數還是字本身的問題
所以分為兩個方向去測試
一為字本身 二為字數
要測試是否有怪字
FOR I = 1 TO LENC(XX)&&由左至右開始檢查
IF ISLEADBYTE(LEFTC(xx,1))
&&沒事,跳過
ELSE
IF ! ("a" <= LEFTC(xx,1) <= "Z" or "1" <= LEFTC(xx,1) <= "0")
&&不屬於正常字元
ENDIF
ENDIF
ENDFOR
XX = SUBSTRC(XX,2)
NEXT
迴圈寫入測試就簡單了 自己試試(試試少於2000字,1000或更少) |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 53 樓
|
發表於: 星期一 三月 14, 2011 5:12 pm 文章主題: |
|
|
LiuRambo 寫到: | 我是這樣想
為了測試釐清到底是字數還是字本身的問題
所以分為兩個方向去測試
一為字本身 二為字數
要測試是否有怪字
FOR I = 1 TO LENC(XX)&&由左至右開始檢查
IF ISLEADBYTE(LEFTC(xx,1))
&&沒事,跳過
ELSE
IF ! ("a" <= LEFTC(xx,1) <= "Z" or "1" <= LEFTC(xx,1) <= "0")
&&不屬於正常字元
ENDIF
ENDIF
ENDFOR
XX = SUBSTRC(XX,2)
NEXT
迴圈寫入測試就簡單了 自己試試(試試少於2000字,1000或更少) |
我用了這個方式,找出特別的字元,用空白取代掉,測試其中一個案例,真的不會當機了耶!所以以後我在該欄位valid method中,逐字檢查這個欄位的內容值,再去取代掉即可嘍!不知這樣會不會影響記錄存檔效能? |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 54 樓
|
發表於: 星期一 三月 14, 2011 5:47 pm 文章主題: |
|
|
是不是多測幾個案例
說實在的我不太敢確定你的問題一定是字元的問題
而且"理論上" SQL的TEXT應該可以接受+-*/_=這類的符號
建議還是多測測看能不能找出"規則" |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 55 樓
|
發表於: 星期二 三月 15, 2011 9:11 am 文章主題: |
|
|
LiuRambo 寫到: | 是不是多測幾個案例
說實在的我不太敢確定你的問題一定是字元的問題
而且"理論上" SQL的TEXT應該可以接受+-*/_=這類的符號
建議還是多測測看能不能找出"規則" |
我的想法是作交叉測試,
先找出幾個有問題的記錄資料來作上述檢查及移除字元測試,
再試不透過word複製,直接用文字檔寫入foxpro、
以及直接寫入SQL Server測試是否一樣有特殊字元,
以及移除字元後對欄位內容有什麼差別;
最後再針對加入這一段程式對維護資料的效能上是否有明顯影響來評估。
令我納悶的是,通常(大部分情況)我只要在這個字串開頭加一星號就可解決當機問題,不明白為什麼會如此? |
|
回頂端 |
|
|
LiuRambo
註冊時間: 2007-11-27 文章: 481
第 56 樓
|
發表於: 星期二 三月 15, 2011 9:41 am 文章主題: |
|
|
catfish 寫到: |
令我納悶的是,通常(大部分情況)我只要在這個字串開頭加一星號就可解決當機問題,不明白為什麼會如此? |
或者是任一個字?
假如是 那我猜是某個地方切斷字串時 把中文字給切半了
試試看用LEFTC RIGHTC SUBSTRC來處理字元
===============
題外話
最近在給一個10年前自己在某家公司所寫的ASP做百年蟲處理
發現ASP上不需要特別指定中文字為兩個字元
例如:aa="12三4"
left(aa,3) ="12三"
left(aa,4) = "12三4"
LiuRambo 在 星期五 三月 18, 2011 6:09 pm 作了第 1 次修改 |
|
回頂端 |
|
|
jerryclt
註冊時間: 2009-03-10 文章: 334 來自: 佛心來的
第 57 樓
|
發表於: 星期五 三月 18, 2011 5:30 pm 文章主題: |
|
|
原來如此...
我一直以為
left(aa,3) ='12三'
left(aa,4) ='12三4'
看來我該再去進修了 QQ~ |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 58 樓
|
發表於: 星期四 三月 24, 2011 1:25 pm 文章主題: |
|
|
還是不行,即變檢查出有問題的字元,將之移除(清除)後再執行,只要進入該editbox物件,按向下鍵讓游標向下移動到將近尾端就當了!我在editbox中用不同字數來測,在2048中文字一切都ok,第2049個中文字會被改成亂碼(將最後一個中文字改成英文字測時,第4097個字元還ok,第4098個字元就有問題),然後在逐一輸入到第2053個中文字時碼的字後就當了(輸入第2052個中文字時存檔還不會檔),是透過SPT抓出來的資料欄位字數不能超過4097個字元嗎? |
|
回頂端 |
|
|
catfish
註冊時間: 2003-05-29 文章: 45 來自: 台中
第 59 樓
|
發表於: 星期四 三月 24, 2011 4:48 pm 文章主題: |
|
|
用檢查怪字元的程式,找出第2049中文字處有怪字元,將它清掉後再重檢查一次,還是同樣在2049有怪字,這樣重覆清除怪字的動作,直到剩餘的欄位字數少於2049中文字後,終於不再檢查出有怪字元了,此時進入FORM中的該欄位移動游標,也不會當掉了~~ |
|
回頂端 |
|
|
yoncen
註冊時間: 2005-08-29 文章: 33
第 60 樓
|
發表於: 星期六 六月 04, 2011 7:15 pm 文章主題: |
|
|
建议这样:
(1)既然输入2000多个字符时会当掉,那就每个editbox只允许输入1000个字符,多加几个editbox;
(2)保存资料前,将editbox内容用strconv(,13)函数转换一下再保存 ;
(3)读出资料时,用strconv(,14)恢复出来。 _________________ 從事企業ERP開發,學會止境,精益求精。 |
|
回頂端 |
|
|
|