登录名:  密码:  验证码: 9107
设为首页 收藏本站 联系站长
2008年12月4日
农历戊子年(鼠)
十一月初七
 首页 | 最新上传 | 新闻 | 购物商场 | 招聘求职 | HTML学习 | java学习 | IT新闻 | 黑客技术 | 域名和空间 | 流量统计 | 故事小说
 GIF动画制作 | 图片素材 | 源码下载 | 书籍下载 | 视频资料 | ASP | 数据库 | PHP | 基本电脑知识 | 迅雷资源 | 兼职 | 组网工程
 英语学习 | FLASH专区 | ASP.NET | VB | 综合资源网 | 驱动下载 | 游戏下载 | 网站模板网页美工 | 韩文学习 | 论坛
 特别推荐:产品报价  漂亮网站网址  图片素材
  我要查找:  
欢迎您来这里。每天学一点,每天进步一点!
Google
  文章总数:2955 注册用户总数:26
 当前位置:首页 >> ASP  >> ASP
like检索出错:Microsoft JET Database Engine (0x80040E14) 内存溢出
来源:http://www.itlearner.com  发表日期:2007年8月24日 作者: 

 编辑:admin 级别: 司令 浏览次数:228
】    
最近一到一个客户给的access数据库有3万多条记录,要求做搜索页面来进行数据搜索,结果当sql语句使用like '%...%'就发生"内存溢出"的报错.
下面是比较好的解决方案.
资源来自搜索引擎,作者网名好像是叫kkkbs(邂逅浪漫)
----------------------------------------------------------------------
26个日文片假名会导致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个片假名最终认定的)

ゴ 即 chr(-23116) 编码为 Jn1;
2.
显示时,则使用 Juncode() 函数进行解码,还原日文片假名显示
3.
搜索关键字,也要使用 Jencode() 进行编码后再放入 like里
where [Topic] like '%Jencode(kewwords)%' 使用
才能保证搜索的值和编码过的数据库字段内容匹配
==================================
PS:
也可以使用正则表达式来改写上面的两个函数,或许效率还要更高些
再就是如果 压根不使用日文,也不需要搜索日文,则解码部分可以不用,保存数据实直接把这26个片假名字符替换为空字符或任一字符,比如"□"
抛砖引玉,如果有更本质的真正的好方法,谢分享
附:
----------------------------
平假名87个 asc值
-23391 --> -23316
unicode 3040-309F
ぁあぃいぅうぇえぉお
かがきぎくぐけげこご
さざしじすずせぜそぞ
ただちぢっつづてでと
どなにぬねのはばぱひ
びぴふぶぷへべぺほぼ
ぽまみむめもゃやゅゆ
ょよらりるれろゎわゐ
ゑをん゛゜ゝゞ
------------------------------
片假名89个 asc值
-23135 -> -23059
unicode 30A0-30FF
ァアィイゥウェエォオ
カガキギクグケゲコゴ
サザシジスズセゼソゾ
タダチヂッツヅテデト
ドナニヌネノハバパヒ
ビピフブプヘベペホボ
ポマミムメモャヤュユ
ョヨラリルレロヮワヰ
ヱヲンヴヵヶーヽヾ
---------------------------------------------------------------------
另一网友发的错误情况:
ACCESS数据库含有某些特定日文字符时,like检索可能会出错的几种情况:
连接方式与打开方式
========================
conn.open "driver={microsoft access driver (*.mdb)};dbq=" & DatabaseToQuery
rs_str.open StrSQL,conn,1,1
出错
========================
错误描述: ODBC 驱动程序不支持所需的属性。
错误编号: -2147217887
错误类型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
/syl/access-syl-str.asp, 第 442 行
连接方式与打开方式
========================
conn.open "driver={microsoft access driver (*.mdb)};dbq=" & DatabaseToQuery
rs_str.open StrSQL,conn,1,3
出错
========================
错误描述: [Microsoft][ODBC Microsoft Access Driver] 内存溢出
错误编号: -2147217913
错误类型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
连接方式与打开方式
========================
conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DatabaseToQuery
rs_str.open StrSQL,conn,1,1
出错
========================
错误描述: 内存溢出
错误编号: -2147217900
错误类型:
Microsoft JET Database Engine (0x80040E14)
连接方式与打开方式
========================
conn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DatabaseToQuery
rs_str.open StrSQL,conn,1,3
出错
========================
错误描述: 内存溢出
错误编号: -2147217900
错误类型:
Microsoft JET Database Engine (0x80040E14)
解决办法就是按照kkkbs(邂逅浪漫)的办法去除日文字符。
Google
 ·上一篇文章: 64位MD5加密算法(asp)
 ·下一篇文章: ASP访问ACCESS出错提示简要解释
 该篇文章的评论
 暂无相关评论
 姓名:  邮箱:
 内容:
                
 相关文章
 · Microsoft VBScript 运行
 · 整理一个asp多级树型分类
 · DW网页设计100例94:在线
 · 如何实现添加到收藏夹
 · ASP源码下载
 · ASP多媒体视频教程专区
 · MM_preloadImages()问题
 · Windows XP 中IIS5安装文
 · 如何把ASP编写成DLL
 · 用ASP创建多栏选项列表S
 · OpenSchema 方法详
 最新上传文章
 · 轮番变化的图片广告脚本
 · 冯小刚导的所有电影列表
 · 互联网寒冬来临 企
 · MSI文件提取器,msi文件破
 · 如何把做好的。net代码生
 · 正确使用 cookie&n
 · ASP中DateAdd函数的用法
 · Erase 语句
 · 吉列剃须刀
 · phpmyadmin安装中"
 · 安装,启动与卸载Mysql系

服务说明 | 关于网站 | 联系我们 | 友情链接
网站学习网欢迎您!
http://www.studywebgood.com
浙ICP备07030755号 
联系邮箱:shuizhilang@126.com 如本网站侵犯了您的版权,请马上通知我.