Asp ACCESS数据库内存溢出(日文)的处理办法

ACCESS有个BUG,那就是在使用 like 搜索时如果遇到日文就会出现“内存溢出”的问题,提示“80040e14/内存溢出”。 

以前也遇到过了,不过那时没怎么在意把含有日文的数据删除了就好了,现在这次的都是些重要的资料不可能删除的,就需要想办法来解决了。 

那导致出问题的26个日文:ゴ ガ ギ グ ゲ ザ ジ ズ ヅ デ ド ポ ベ プ ビ パ ヴ ボ ペ ブ ピ バ ヂ ダ ゾ ゼ  

说一下解决办法: 

1、最笨的方法:删除含有日文的数据 
    
这就不用解释了; 

2、替换方法: 

思路:就是存储进入数据库时把那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 

3、处理SQL语句: 
不要使用like语句,举个例子: 

会出问题的SQL:  where title like ’%”&keyword&”%’ 

现在换成下面的就不会出现内存溢出了:where InStr(1,LCase(Title),LCase(’”&keyword&”’),0)<>0 

问题应该可以解决。

关于笃志情缘

人尽其责,物尽其用,不成功,也无憾,毕竟奋斗过。走自己的路吧! 笃志建站:虚拟主机、域名注册、云主机、成品网站、企业邮局、CDN加速 http://www.duzhi.net QQ:3081689173
此条目发表在网站技术分类目录,贴了标签。将固定链接加入收藏夹。

Asp ACCESS数据库内存溢出(日文)的处理办法》有2条回应

  1. Metehan说:

    I have been so bewrldeied in the past but now it all makes sense!

  2. I really like and appreciate your blog post.Really looking forward to read more. Want more.

评论已关闭。