当前位置:编程学习 > asp >>

asp使用like查询access 查询语句时提示:内存溢出的解决方法

Access数据库使用like搜索时,如果遇到日文片假名就会出现“内存溢出”的问题,提示“80040e14/内存溢出”。解决办法如下:

一、替换法:

把数据存储到数据库前把26个日文片假名替换成其他编码,从数据库读取出来后再反替换回来。

函数示例如下:

编码方式,用于把表单数据存储到数据库之前:JPcode(iStr,true)

解码方式,用于从数据库读取出来之后的显示:JPcode(iStr,false)

函数:

Function JPcode(byVal iStr,codeType)

 If isNull(iStr) or isEmpty(iStr) or iStr = "" Then

  JPcode = "" : Exit function

 End If

 Dim F,i,E

 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))

       If codyType Then

  For i=0 to 25 iStr = Replace(iStr,F(i),E(i)) Next

       Else

  For i=0 to 25 iStr = Replace(iStr,E(i),F(i)) Next

       End If

       JPcode = iStr

End Function

另外一个正则表达式的函数:

  1. function filteJapanese(sStr)
  2. dim oRegExp   
  3. set oRegExp = new RegExp      
  4. oRegExp.global = true         
  5. oRegExp.pattern = "[\u3040-\u309F|\u30A0-\u30FF]"
  6. filteJapanese = oRegExp.replace(sStr,"")
  7. set oRegExp = nothing
  8. end function

注意:使用关键字进行搜索时,也要使用JPcode(iStr,true)进行编码后再放入like语句里使用

例如:where [Topic] like '%" & JPcode(keyword) & "%'

才能保证搜索的值和编码过的数据库字段内容匹配。

二、不要使用like语句,例:

把会报错的SQL:where title like '%keyword%'

换成:where InStr(1,LCase(Title),LCase('keyword'),0)<>0

三、access中用like关键字,内存溢出的问题

直接在access中用正常,在ASP+ODBC下用就出错,出现内存溢出,或者"缺少所需的属性"错误.但换别的字段却可以.这种问题是字段长度比较大,数据比较多,例如10几万条.解决的办法是用left(col,30) like '%key%'

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,