BLOG数据载入中...

Microsoft JET Database Engine 错误 '80040e14'内存溢出的解决办法 [紫河 发表于 2008-4-2 21:16:45]

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' 内存溢出" 的错误 多的是!

一个简单的方法是:

把如下的语句:

Sql = "select * From [tbname] Where Title like '%"&keyword&"%' Order By id Desc"

换成:

Sql = "select * from [tbname] where InStr(1,LCase(Title),LCase('"&keyword&"'),0)<>0 order by id desc"


 


阅读全文 | 回复(1) | 引用通告 | 编辑 
Re:Microsoft JET Database Engine 错误 '80040e14'内存溢出的解决办法 [zihe发表评论于2008-4-2 21:19:11]

解释:

InStr([start, ]string1, string2[, compare])

参数
start

可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,将从第一个字符的位置开始搜索。如果 start 包含 Null,则会出现错误。如果已指定 compare,则必须要有 start 参数。

string1

必选项。接受搜索的字符串表达式。

string2

必选项。要搜索的字符串表达式。

compare

可选项。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,将执行二进制比较。

设置
compare 参数可以有以下值:

常数 值 描述
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。


返回值
InStr 函数返回以下值:

如果 InStr 返回
string1 为零长度 0
string1 为 Null Null
string2 为零长度 start
string2 为 Null Null
string2 没有找到 0
在 string1 中找到 string2 找到匹配字符串的位置
start > Len(string2) 0


说明
下面的示例利用 InStr 搜索字符串:

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
MyPos = Instr(4, SearchString, SearchChar, 1) ' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(1, SearchString, SearchChar, 0) ' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(SearchString, SearchChar) ' Comparison is binary by default (last argument is omitted). Returns 9.
MyPos = Instr(1, SearchString, "W") ' A binary comparison starting at position 1. Returns 0 ("W" is not found).
注意 InStrB 函数使用包含在字符串中的字节数据,所以 InStrB 返回的不是一个字符串在另一个字符串中第一次出现的字符位置,而是字节位置。

------------------------------------------------

Lcase应该就是把pwd转成小写的意思, 如下:

LCase 函数

返回字符串的小写形式。

LCase(string)

string 参数是任意有效的字符串表达式。如果 string 参数中包含 Null,则返回 Null。
说明

仅大写字母转换成小写字母;所有小写字母和非字母字符保持不变。
下面的示例利用 LCase 函数把大写字母转换为小写字母:

Dim MyString
Dim LCaseString
MyString = "VBSCript"
LCaseString = LCase(MyString) ' LCaseString 包含 "vbscript"。


个人主页 | 引用 | 返回 | 删除 | 回复 

发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
    BLOG数据载入中...

首页 | 论坛 | 博客 | 登陆 | 注册 | 相册 | 精华 | Tags