instr 日文 sql ado access 连联演出的内存溢出大戏{}

探讨了在VBA中处理日文字符时遇到的内存溢出问题,特别是在使用Instr函数进行文本搜索时。文章详细描述了不同情况下错误的发生,包括在调试与生成EXE后的差异,以及部分日文字符引发的特定问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

instr 日文 sql ado access 连联演出的内存溢出大戏{}

vba中发现

关于Instr不分大小写时的报错一例
bt: 很仙的衬衣男港风ins超火的痞帅长袖衬衫春季pureピュア外套上衣
If InStr(1, Bt, Mid(Gjc, i, 1), vbTextCompare) = 0, 报错, 内存溢出, 怀疑是这里有日文字符导致的instr函数时使用不分大小写参数时出错

因为如果区分大小写, 则不会出现这样的问题
?instr(“很仙的衬衣男港风ins超火的痞帅长袖衬衫春季pureピュア外套上衣”,“上”)
32

vb6中的发现

韩文是无法输入到文本框中的,输入进去?问题, 但上述的日文是可以的, 但也由此引发了血案…

日文字符会引发instr(1,xx,xx,1)内存溢出报错
立即窗口中
InStr(1, “春季pureピュア外套上衣”, “”, 1),如果这里是空值的话, 则不会报错…晕
?InStr(1, “春季pureピュア外套上衣”, “ピ”, 1) 报错内存溢出
?InStr(1, “春季”, “ピ”, 1) 报错内存溢出
?InStr(“春季pureピュア外套上衣”, “ピ”) 答案是7

但还发现了一个奇怪的点
就是生成EXE后,
?InStr(1, “春季pureピュア外套上衣”, “i”, 1) , 居然不报错了, 我的天, 郁闷

后面还发现日文中还有差异如下:
ピ这个字符在调试时会报错, 在EXE后也不报错
ュ这个字符在调试时/EXE均不会报错

百度传言说可以通过lcase来消除错误, 但是好像我试了没有用 依然报错内存溢出
i = InStr(1, LCase(s), LCase(“p”), 1)

vb6中, 可以通过textbox输入这种日文, 通过ADO控件加入ACCESS, 但但询时出现错误
Rs.open sq,cn,1,3 的时候引起的内存溢出报错问题
具体如下

Sq = “Select * from 爱笔记 where instr([合并],‘1’)<>0” '虽然access中包含了日文数据行, 但这个不涉及的时候可以执行
Select * from 爱笔记 where instr(1,[合并],‘1’,1)<>0 '虽然access中包含了日文数据行, 但这个不涉及的时候可以执行

Sq = “Select * from 爱笔记 where instr([合并],‘仙’)<>0” ’ 这里"仙"表示是那个包含在日文字符串中的一个字符, 这句就报错 内存溢出, 就是说, 和文本比较textcompare不分大小写的模式无关, 直接是语言问题要背锅

Sq = “Select * from 爱笔记 where instr([合并],‘ピュア外套’)<>0” '不管是否匹配到数据均报错, 应该是语言的问题

Select * from 爱笔记 where instr(1,[合并],‘ピュア外套’,1)<>0 '不管是否匹配到数据均报错, 应该是语言的问题

ACCESS打开着, 通过ado控件加入日文记录, 但ACCESS好像不直接显示, 要下一次打开才显示, 晕, 害我奇怪了一下, 明明在打开着的ACCESS中没有看到新增的日文数据行, 却不知道为什么又是内存溢出

解决方案:

保存前进行日文预判断, 如果发现, 则程序直接终止.

Set re = CreateObject(“vbscript.regexp”)
re.Global = True
re.Pattern = “[\u0800-\u4e00]”
If re.Execute(frInput.Text1(2).Text).Count <> 0 Then
Open App.Path & “\ablog.txt” For Output As #1
Print #1, frInput.Text1(2).Text
Close #1
MsgBox “字符异常导致未保存, 内容转移至程序目录下的ablog.txt文件中.”, 16, “报错”
End
End If

抵住, 然后头微上仰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值