==26個日文片假名導致clearcase/" target="_blank" >cc>Access搜索(80040e14/內存溢出)的解決辦法==
ゴ ガ ギ グ ゲ ザ ジ ズ ヅ デ ド ポ ベ プ ビ パ ヴ ボ ペ ブ ピ バ ヂ ダ ゾ ゼ
當字段內包含了這26個日文字符任意一個多個時,就會導致在執行SQL語句中包含了
[字段] like '%aaaaa%' 或 inStr(1,[字段],'aaaaa',1)>0
這樣的查詢時,毫無道理的出現了
"Microsoft JET Database Engine 錯誤 '80040e14' 內存溢出"的錯誤
其他Jet SQL函數命令未作測試,大概與字符搜索定位匹配相關的都可能出錯
搜索相關資料得知被微軟工程師證實是Access的bug,可能是語法關系都是微軟的東東
在VBs中 執行inStr(1,日文平假名變量,"aaaaa",1)依然要出現錯誤
Microsoft VBScript 運行時錯誤 錯誤 '800a0005' 無效的過程調用或參數: 'instr'
沒有搜索,因這幾個字符出現Access的論壇網站搜索無法進行,何等痛苦
昨天一朋友大叫怪事,他的音樂數據庫無法搜索了,只有30000條記錄時是好的
毫無疑問,日文片假名是禍根,花幾分鐘把有包含上面的日文替換成"?"搜索順利恢復
找來論壇程序用戶群最大的動網dvBBS AC版本 7.0SP2 版測試,同樣有這個日文發帖后 導致無法搜索并且運行時出錯的問題
線上去搜索 '80040e14' 內存溢出" 的錯誤 多的是!
一簡單有效的解決辦法:
對這26個字符進行編碼和解碼,可能效率感覺不理想,測試下來問題不大,速度影響不是太大
編碼:
Function Jencode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Jencode=""
Exit function
end if
dim F,i,E
' F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
' "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
' "ヂ","ダ","ゾ","ゼ")
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Jencode=iStr
for i=0 to 25
Jencode=replace(Jencode,F(i),E(i))
next
End Function
解碼:
Function Juncode(byVal iStr)
if isnull(iStr) or isEmpty(iStr) then
Juncode=""
Exit function
end if
dim F,i,E
' F=array("ゴ","ガ","ギ","グ","ゲ","ザ","ジ","ズ","ヅ","デ",_
' "ド","ポ","ベ","プ","ビ","パ","ヴ","ボ","ペ","ブ","ピ","バ",_
' "ヂ","ダ","ゾ","ゼ")
E=array("Jn0;","Jn1;","Jn2;","Jn3;","Jn4;","Jn5;","Jn6;","Jn7;","Jn8;","Jn9;","Jn10;","Jn11;","Jn12;","Jn13;","Jn14;","Jn15;","Jn16;","Jn17;","Jn18;","Jn19;","Jn20;","Jn21;","Jn22;","Jn23;","Jn24;","Jn25;")
F=array(chr(-23116),chr(-23124),chr(-23122),chr(-23120),_
chr(-23118),chr(-23114),chr(-23112),chr(-23110),_
chr(-23099),chr(-23097),chr(-23095),chr(-23075),_
chr(-23079),chr(-23081),chr(-23085),chr(-23087),_
chr(-23052),chr(-23076),chr(-23078),chr(-23082),_
chr(-23084),chr(-23088),chr(-23102),chr(-23104),_
chr(-23106),chr(-23108))
Juncode=iStr
for i=0 to 25
Juncode=replace(Juncode,E(i),F(i))'□
next
End Function
注意,如果直接使用字符不方便(Windows還沒裝日文支持),注釋掉的部分提供有 chr(-23804) ..這樣的定義
這樣
1.
表單輸入保存時,使用Jencode()將這26個字符先編碼再保存(為什么是這26個字符,經過全部測試87個平假名89個片假名最終認定的)
本新聞共4頁,當前在第1頁 1 2 3 4