[
会员中心
] [
发布文章
][
发布软件
] [
中文繁體
]
文章
·
资料
电脑软件
手机软件
网站源码
电脑·手机·网络
学习
话题
娱乐
故事
文化·历史
国学典籍
法律法规
操作系统
网络
办公·文件
音频视频
图形图像
硬件·驱动程序
行业
教学学习
编程
游戏
安卓
苹果
鸿蒙
其他
ASP
ASP.NET
JSP
PHP
HTML
·
CSS
·
JavaScript
本 站 搜 索
文章
软件
[选项]
文章类别:
[全部]
电脑·手机·网络
话题
故事
文化·历史
娱乐
学习
法律·法规
国学典籍
搜索选项:
文章编号
文章标题
文章作者
文章来源
相关链接
关键字词
文章标签
文章内容
软件类别:
[全部]
操作系统
网络
办公·文件
音频视频
图形图像
行业
编程
教学学习
游戏
硬件·驱动程序
安卓系统
苹果系统
鸿蒙系统
其他系统
HTML·CSS·JavaScript
ASP
JSP
PHP
ASP.NET
搜索选项:
软件编号
软件名称
软件作者
软件来源
相关链接
关键字词
软件标签
软件简介
发 送 文 章
26个日文片假名导致Access搜索(80040e14/内存溢出)的解决办法
〖
评论()
〗〖
留言
〗〖
收藏
〗
收信地址
填写收信人的电子邮箱
邮件主题
填写邮件主题
邮件内容
补充最新修改版,使用Unicode的字符代码,而不是非unicode(负数值,有时会出错)代码 ゴガギグゲザジズヅデドポベプビパヴボペブピバヂダゾゼ 当字段内包含了这26个日文字符任意一个多个时,就会导致在执行SQL语句中包含了 [字段]like’%aaaaa%’或inStr(1,[字段],’aaaaa’,1)0 这样的查询时,毫无道理的出现了 "MicrosoftJETDatabaseEngine错误’80040e14’内存溢出"的错误 其他JetSQL函数命令未作测试,大概与字符搜索定位匹配相关的都可能出错 搜索相关资料得知被微软工程师证实是Access的bug,可能是语法关系都是微软的东东 在vbs中执行inStr(1,日文平假名变量,"aaaaa",1)依然要出现错误 MicrosoftVBScript运行时错误错误’800a0005’无效的过程调用或参数:’instr’ 没有搜索,因这几个字符出现Access的论坛网站搜索无法进行,何等痛苦 昨天一朋友大叫怪事,他的音乐数据库无法搜索了,只有30000条记录时是好的 毫无疑问,日文片假名是祸根,花几分钟把有包含上面的日文替换成"?"搜索顺利恢复 找来论坛程序用户群最大的动网dvBBSAC版本7.0SP2版测试,同样有这个日文发帖后导致无法搜索并且运行时出错的问题 线上去搜索’80040e14’内存溢出"的错误多的是! 一简单有效的解决办法: 对这26个字符进行编码和解码,可能效率感觉不理想,测试下来问题不大,速度影响不是太大 编码: FunctionJencode(byValiStr) ifisnull(iStr)orisEmpty(iStr)then Jencode="" Exitfunction endif dimF,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(chrw(12468),chrw(12460),chrw(12462),chrw(12464),_ chrw(12466),chrw(12470),chrw(12472),chrw(12474),_ chrw(12485),chrw(12487),chrw(12489),chrw(12509),_ chrw(12505),chrw(12503),chrw(12499),chrw(12497),_ chrw(12532),chrw(12508),chrw(12506),chrw(12502),_ chrw(12500),chrw(12496),chrw(12482),chrw(12480),_ chrw(12478),chrw(12476)) Jencode=iStr fori=0to25 Jencode=replace(Jencode,F(i),E(i)) next EndFunction 解码: FunctionJuncode(byValiStr) ifisnull(iStr)orisEmpty(iStr)then Juncode="" Exitfunction endif dimF,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(chrw(12468),chrw(12460),chrw(12462),chrw(12464),_ chrw(12466),chrw(12470),chrw(12472),chrw(12474),_ chrw(12485),chrw(12487),chrw(12489),chrw(12509),_ chrw(12505),chrw(12503),chrw(12499),chrw(12497),_ chrw(12532),chrw(12508),chrw(12506),chrw(12502),_ chrw(12500),chrw(12496),chrw(12482),chrw(12480),_ chrw(12478),chrw(12476)) Juncode=iStr fori=0to25 Juncode=replace(Juncode,E(i),F(i))’□ next EndFunction 注意,如果直接使用字符不方便(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 unicode3040-309F ぁあぃいぅうぇえぉお かがきぎくぐけげこご さざしじすずせぜそぞ ただちぢっつづてでと どなにぬねのはばぱひ びぴふぶぷへべぺほぼ ぽまみむめもゃやゅゆ ょよらりるれろゎわゐ ゑをん゛゜ゝゞ ------------------------------ 片假名89个asc值 -23135--23059 unicode30A0-30FF ァアィイゥウェエォオ カガキギクグケゲコゴ サザシジスズセゼソゾ タダチヂッツヅテデト ドナニヌネノハバパヒ ビピフブプヘベペホボ ポマミムメモャヤュユ ョヨラリルレロヮワヰ ヱヲンヴヵヶーヽヾ ================补充修改的版本=========================== 添加一个编码解码参数codeType 都使用一个函数 使用chr()不直接使用日文字符 这样~够简洁了吧? 疑点:显示日文是不会出错的,保存到数据库也不会出错 只有SQL使用like和inStr的时候才会出错这个与显示无关! 还有在vbs里使用inStr(1,str,"aaa",1)这样按字符搜索也会错 改为inStr(lcase(str),"aaa")就不会出错 如果一定得用inStr(1,str,"aaa",1)字符搜索语法 则一定要在先inStr()后jncode()的顺序否则会出错 一点问题都没有!注意到这几点绝对没错! rs("TopicStr")=Jncode(TopicStr,true)’encode保存到数据库的资料 DisplayStr=Jncode(rs("TopicStr"),false)’uncode’显示到页面的标题 FunctionJncode(byValiStr,codeType) ifisnull(iStr)orisEmpty(iStr)oriStr=""then Jncode="":Exitfunction endif dimF,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(chrw(12468),chrw(12460),chrw(12462),chrw(12464),_ chrw(12466),chrw(12470),chrw(12472),chrw(12474),_ chrw(12485),chrw(12487),chrw(12489),chrw(12509),_ chrw(12505),chrw(12503),chrw(12499),chrw(12497),_ chrw(12532),chrw(12508),chrw(12506),chrw(12502),_ chrw(12500),chrw(12496),chrw(12482),chrw(12480),_ chrw(12478),chrw(12476)) ifcodyTypethen fori=0to25iStr=replace(iStr,F(i),E(i))next else fori=0to25iStr=replace(iStr,E(i),F(i))next endif Jncode=iStr EndFunction
文章网址:
https://dangbai.cn/Article.asp?ID=10001285
填写邮件内容
发信地址
填写发信人的电子邮箱
邮件签名
填写邮件签名
验证码
填写验证码,单击刷新验证码
程序执行中,请稍候...
发送协议
·欢迎使用本站在线文章发送系统。
·不得使用本站在线发送邮件系统发送垃圾邮件、广告邮件。
·如果收信人地址或其服务器出现错误,可能无法成功发送。
·如果有什么问题,或者意见建议,请联系[
网站管理员
]。
当百网
本站使用【啊估文章软件站】网站系统
〖
网站管理员留言簿
〗