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
抵住, 然后头微上仰